(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-06-28
(54)【発明の名称】マイクロプロセッサにおけるルーティング命令
(51)【国際特許分類】
G06F 9/38 20180101AFI20240621BHJP
G06F 9/30 20180101ALI20240621BHJP
【FI】
G06F9/38 310G
G06F9/30 310A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023578818
(86)(22)【出願日】2022-06-24
(85)【翻訳文提出日】2023-12-20
(86)【国際出願番号】 CN2022101090
(87)【国際公開番号】W WO2023274060
(87)【国際公開日】2023-01-05
(32)【優先日】2021-06-29
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(74)【復代理人】
【識別番号】100104880
【氏名又は名称】古部 次郎
(74)【復代理人】
【識別番号】100118108
【氏名又は名称】久保 洋之
(72)【発明者】
【氏名】トンプト、ブライアン、ダブリュー
(72)【発明者】
【氏名】ゲンデン、マイケル、ジョセフ
(72)【発明者】
【氏名】ピンディクラ、タルナチャラム
(72)【発明者】
【氏名】ウィリアムズ、フィリップ、ジー
(72)【発明者】
【氏名】リー、ケント
(72)【発明者】
【氏名】セゲブ、ニル
(72)【発明者】
【氏名】パテル、メフル
【テーマコード(参考)】
5B013
5B033
【Fターム(参考)】
5B013AA14
5B013AA18
5B013DD02
5B033AA03
5B033AA13
(57)【要約】
実行スライスを含む処理パイプラインの作業負荷をバランスするためのコンピュータシステム、プロセッサ、プログラミング命令もしくは方法またはその組み合わせであって、実行スライスは、命令を処理するための1または複数の実行ユニットを有する少なくとも2つの処理パイプラインであって、少なくとも第1の処理パイプラインおよび第2の処理パイプラインは、第1の命令タイプを実行可能である、処理パイプラインと、第1の処理パイプラインと第2の処理パイプラインのいずれで第1の命令タイプを実行するかを決定するための命令をデコードする命令デコードユニットと、を備える、コンピュータシステム、プロセッサ、プログラミング命令もしくは方法またはその組み合わせである。プロセッサは、第1の処理パイプライン作業負荷、第2の処理パイプライン作業負荷、およびそれらの組み合わせからなる作業負荷グループの少なくとも1つを計算することと、作業負荷グループの少なくとも1つに基づいて、第1の命令タイプを実行する第1の処理パイプラインまたは第2の処理パイプラインを選択することと、を実行するように構成される。
【選択図】
図9
【特許請求の範囲】
【請求項1】
情報を処理するためのプロセッサであって、前記プロセッサは、
各々が命令を処理するための1または複数の実行ユニットを有する少なくとも2つの処理パイプラインであって、前記少なくとも2つの処理パイプラインのうちの少なくとも第1の処理パイプラインおよび第2の処理パイプラインは、第1の命令タイプを実行可能である、少なくとも2つの処理パイプラインと、
前記第1の処理パイプラインと前記第2の処理パイプラインのいずれで前記第1の命令タイプを実行するかを決定するための命令をデコードする命令デコードユニットと、を備え、
前記プロセッサは、
第1の処理パイプライン作業負荷、第2の処理パイプライン作業負荷、およびそれらの組み合わせからなる作業負荷グループの少なくとも1つを計算することと、
前記作業負荷グループの少なくとも1つに基づいて、前記第1の命令タイプを実行する前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することと、
を実行するように構成される、プロセッサ。
【請求項2】
前記プロセッサは、前記第1の処理パイプライン作業負荷を計算し、前記第2の処理パイプライン作業負荷を計算するようにさらに構成される、請求項1に記載のプロセッサ。
【請求項3】
前記第1の処理パイプライン作業負荷を計算することは、前記第1の処理パイプラインにおいて実行される命令の少なくとも第1のサブグループの数をカウントすることを含む、請求項2に記載のプロセッサ。
【請求項4】
前記第1の処理パイプラインの作業負荷を計算することは、
前記少なくとも2つの処理パイプラインによって実行されたすべての前記命令をカウントすることと、
命令の前記第1のサブグループの前記数、前記少なくとも2つの処理パイプラインによって実行されるすべての前記命令、およびそれらの組み合わせからなるグループの少なくとも1つに基づいて、前記第1の処理パイプラインにおいて実行される命令の前記第1のサブグループの割合を決定することと、
を含む、請求項3に記載のプロセッサ。
【請求項5】
前記第2の処理パイプライン作業負荷を計算することは、前記第2の処理パイプラインにおいて実行される命令の少なくとも第2のサブグループの数をカウントすることを含む、請求項2に記載のプロセッサ。
【請求項6】
前記第2の処理パイプライン作業負荷を計算することは、
前記少なくとも2つの処理パイプラインによって実行されたすべての前記命令をカウントすることと、
命令の前記第2のサブグループの前記数、前記少なくとも2つの処理パイプラインによって実行されるすべての前記命令、およびそれらの組み合わせからなるグループの少なくとも1つに基づいて、前記第2の処理パイプラインにおいて実行される命令の前記第2のサブグループの割合を決定することと、
を含む、請求項5に記載のプロセッサ。
【請求項7】
前記作業負荷グループの少なくとも1つに基づいて前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することは、前記第1の処理パイプライン作業負荷と第2の処理パイプライン作業負荷とを比較することを含む、請求項1に記載のプロセッサ。
【請求項8】
前記作業負荷グループの少なくとも1つに基づいて前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することは、前記第1の処理パイプライン作業負荷を計算することと、前記第1の処理パイプライン作業負荷を第1の閾値と比較することとを含み、前記第1の閾値は、数、割合、比率、およびそれらの組み合わせからなる第1の閾値グループの少なくとも1つである、請求項7に記載のプロセッサ。
【請求項9】
前記作業負荷グループの少なくとも1つに基づいて、前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することは、
前記第1の処理パイプライン作業負荷が前記第1の閾値未満であることに応答して、前記第1の命令タイプを実行する前記第1の処理パイプラインを選択することを含む、請求項8に記載のプロセッサ。
【請求項10】
前記作業負荷グループの少なくとも1つに基づいて、前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することは、
前記第1の処理パイプライン作業負荷を計算することと、
前記第2の処理パイプライン作業負荷を計算することと、
前記第1の処理パイプライン作業負荷を第1の閾値と比較することと、
前記第2の処理パイプライン作業負荷を第2の閾値と比較することと、
前記第1の処理パイプライン作業負荷が前記第1の閾値を超えること、および前記第2の処理パイプライン作業負荷が前記第2の閾値未満であることの両方に応答して、前記第1の命令タイプを実行する前記第2の処理パイプラインを選択することと、
前記第1の処理パイプライン作業負荷が前記第1の閾値以下であること、かつ、前記第1の処理パイプライン作業負荷が前記第1の閾値を超えることおよび前記第2の処理パイプライン作業負荷が前記第2の閾値未満であることの両方、に応答して、前記第1の命令タイプを実行する前記第1の処理パイプラインを選択することと、
を含む、請求項1に記載のプロセッサ。
【請求項11】
前記第1の処理パイプライン作業負荷の計算および前記第2の処理パイプライン作業負荷の計算は、「N」命令の固定間隔またはローリング間隔にわたって実行される、請求項10に記載のプロセッサ。
【請求項12】
前記第1の処理パイプライン作業負荷を計算することは、前記第1の処理パイプラインにおいて実行される命令の第3のサブグループの数をカウントすることと、命令の前記第3のサブグループの前記数が第3の閾値を超えているか否かを判定することと、前記第1の処理パイプラインにおいて実行される命令の前記第3のサブグループの前記数が前記第3の閾値を超えていることに応答して、前記第1の命令タイプを実行する前記第2の処理パイプラインを選択することと、をさらに含む、請求項3に記載のプロセッサ。
【請求項13】
前記第1の命令タイプは、単純算術命令である、請求項1に記載のプロセッサ。
【請求項14】
前記プロセッサは、2つの実行スライスを含む少なくとも1つのスーパースライスを含み、各実行スライスは、前記少なくとも2つの処理パイプラインを含み、前記第1の処理パイプラインは、単純算術命令を実行するように構成された算術論理演算ユニット(ALU)実行ユニットを有するComputeパイプであり、前記第2の処理パイプラインは、少なくとも単純算術命令を実行するように構成された単純(SX)実行ユニットを有するStore/Branch/Simpleパイプであり、前記第1の命令タイプは単純算術命令であり、
前記命令デコードユニットは、命令の第1のサブグループの数をカウントする第1のカウンタを含み、命令の前記第1のサブグループが、前記Computeパイプ内で実行される少なくともマルチサイクル演算命令を含み、
前記プロセッサは、
前記第1のカウンタを使用して、命令の前記第1のサブグループの数をカウントすることと、
命令の前記第1のサブグループの数を第1の閾値と比較することと、
命令の前記第1のサブグループの前記数が前記第1の閾値未満であることに応答して、前記単純算術命令を実行する前記Computeパイプを選択することと、
命令の前記第1のサブグループが前記第1の閾値以上であることに応答して、前記単純算術命令を実行する前記Store/Branch/Simpleパイプを選択することと、
を実行するように構成される、請求項1に記載のプロセッサ。
【請求項15】
前記命令デコードユニットは、さらに、
前記Store/Branch/Simpleパイプ内で実行される命令の第2のサブグループの数をカウントする第2のカウンタであって、命令の前記第2のサブグループは、ストア命令、デュアルポートロード命令、分岐命令、SX命令、およびこれらの組み合わせからなる単純グループのうちの少なくとも1つを含む、第2のカウンタと、
前記少なくとも1つのスーパースライスで処理される命令の数をカウントする第3のカウンタと、を備え、
前記プロセッサは、
前記Computeパイプのパイプラインで実行される命令の前記第1のサブグループの前記数と、前記第3のカウンタによってカウントされる命令の数とに基づいて、前記Computeパイプで実行される命令の前記第1のサブグループの第1の比率を計算することと、
前記第2のカウンタを使用して、命令の前記第2のサブグループの数をカウントすることと、
前記Store/Branch/Simpleパイプで実行された命令の前記第2のサブグループの前記数と、前記第3のカウンタによってカウントされた命令の前記数とに基づいて、前記Store/Branch/Simpleパイプで実行された命令の前記第2のサブグループの第2の比率を計算することと、
前記第1の比率を第1の比率閾値と比較することと、
前記第2の比率を第2の比率閾値と比較することと、
前記第1の比率が前記第1の比率閾値未満であること、または前記第2の比率が前記第2の比率閾値以上であることに応答して、前記単純算術命令を実行する前記Computeパイプを選択することと、
前記第1の比率が第1の比率閾値以上であることに応答し、さらに前記第2の比率が前記第2の比率閾値未満であることに応答して、前記単純算術命令を実行する前記Store/Branch/Simpleパイプを選択することと、
を実行するように構成される、
請求項14に記載のプロセッサ。
【請求項16】
前記命令デコードユニットは、さらに、
前記Computeパイプ内で実行される命令の第3のサブグループの数をカウントする第4のカウンタであって、命令の前記第3のサブグループは、行列乗算アキュムレータ命令のうちの少なくとも1つを含む、第4のカウンタと、を含み、
前記プロセッサは、
前記第4のカウンタを使用して、命令の前記第3のサブグループの前記数をカウントすることと、
前記スーパースライスのComputeパイプで実行される命令の前記第3のサブグループの前記数、前記第3のカウンタによってカウントされる命令の前記数、およびそれらの組み合わせからなるグループの少なくとも1つに基づいて、前記Computeパイプで実行される命令の前記第3のサブグループの第3の比率を計算することと、
前記第3の比率を第3の比率閾値と比較することと、
前記第1の比率と前記第1の比率閾値との前記比較、または前記第2の比率と前記第2の比率閾値との前記比較に関係なく、前記第3の比率が前記第3の比率閾値を超えることに応答して、前記単純算術命令を実行する前記Store/Branch/Simpleパイプを選択することと、
を実行するように構成される、請求項15に記載のプロセッサ。
【請求項17】
プロセッサで情報を処理するための方法であって、前記方法は、
命令を処理するための1または複数の実行ユニットを有する少なくとも2つの処理パイプラインを提供することであって、前記少なくとも2つの処理パイプラインの少なくとも第1の処理パイプラインおよび第2の処理パイプラインは、第1の命令タイプを実行することができる、提供することと、
前記第1の処理パイプライン作業負荷、前記第2の処理パイプライン作業負荷、およびそれらの組み合わせからなる作業負荷グループの少なくとも1つを計算することと、
前記作業負荷グループの少なくとも1つに基づいて、前記第1の命令タイプを実行する前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することと、
を含む、方法。
【請求項18】
前記第1の処理パイプライン作業負荷を計算することは、前記第1の処理パイプラインにおいて実行される命令の少なくとも第1のサブグループの数をカウントすることを含み、
前記方法は、さらに、
前記第1の処理パイプライン作業負荷が第1の閾値未満であることに応答して、前記第1の命令タイプを実行する前記第1の処理パイプラインを選択することを含む、
請求項17に記載の方法。
【請求項19】
前記第2の処理パイプライン作業負荷を計算することは、前記第2の処理パイプラインにおいて実行される命令の少なくとも第2のサブグループの数をカウントすることを含み、
前記方法は、さらに、
前記第1の処理パイプライン作業負荷が第1の閾値以上であり、前記第2の処理パイプライン作業負荷が第2の閾値未満であることに応答して、前記第1の命令タイプを実行する前記第2の処理パイプラインを選択すること、を含む、
請求項18に記載の方法。
【請求項20】
前記第1の処理パイプライン作業負荷を計算することは、前記第1の処理パイプラインにおいて実行される命令の少なくとも第1のサブグループの数をカウントすることを含み、
第2の処理パイプライン作業負荷を計算することは、前記第2の処理パイプラインにおいて実行される命令の少なくとも第2のサブグループの数をカウントすることを含み、
前記方法は、さらに、
命令の前記第1のサブグループとは異なる、前記第1の処理パイプラインにおいて実行される命令の少なくとも第3のサブグループの数をカウントすることと、
命令の前記第3のサブグループが第3の閾値以下であること、前記第1の処理パイプライン作業負荷が第1の閾値以下であること、かつ、前記第1の処理パイプライン作業負荷が前記第1の閾値を超えることおよび前記第2の処理作業負荷が第2の閾値以上であることの両方、に応答して、前記第1の命令タイプを実行する前記第1の処理パイプラインを選択することと、
命令の少なくとも前記第3のサブグループの前記数が前記第3の閾値を超えること、かつ、前記第1の処理作業負荷の前記数が前記第1の閾値を超えることおよび前記第2の処理パイプライン作業負荷が第2の閾値未満であること、に応答して、前記第2の命令タイプを実行する前記第2の処理パイプラインを選択することと、
を含む、請求項17に記載の方法。
【請求項21】
コンピュータプログラムであって、前記プログラムがコンピュータ上で実行されるとき、請求項17から20のいずれか1項に記載の方法ステップを実行するように適合されたプログラムコードを含む、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、データ処理システム、プロセッサ、およびプロセッサアーキテクチャ、ならびに、例えば1または複数の行列乗算加算(MMA)ユニットなどの高密度数学実行ユニットで実行するための、大きなデータ幅命令を処理する方法に関する。
【背景技術】
【0002】
現在、データ処理システムで使用されているプロセッサは、一度に複数の命令を処理し、多くの場合、それらの命令は順番通りに処理されない。最新のコンピュータアーキテクチャでは、一度に複数の命令を実行する、あるいは少なくとも同じ時間枠内で複数の命令を実行するようにコンピュータを設計する方法がいくつか知られている。例えば、スループットを向上させる設計の1つとして、複数の命令スレッドを同時に処理するために、プロセッサコア内に複数の実行スライスを設け、スレッドがプロセッサコアの特定のリソースを共有するものがある。実行スライスは、複数の命令を同時に処理するためにプロセッサ内で並列に接続された複数のデータ処理ハードウェアパイプラインを指す場合もある。パイプライン化には、命令を段階的に処理することが含まれ、マルチステージパイプラインは、マルチサイクル命令でシングルステージパイプラインと同じスループットを維持する。複数の実行スライスは、プロセッサコア内の同時マルチスレッディングの一部として使用されることがある。
【0003】
様々なパイプラインステージは、命令がメモリからフェッチされる「命令フェッチ」ステージを含むことができる。「デコード」ステージでは、命令が異なる制御ビットにデコードされる。この制御ビットは、一般に、(i)命令によって指定された演算を実行するための機能ユニット(例えば、実行ユニット)のタイプ、(ii)演算のためのソースオペランド、および(iii)演算の結果の宛先を指定する。「ディスパッチ」ステージでは、デコードされた命令は、命令がデータおよび利用可能な実行ユニットを待機する発行キュー(ISQ)にディスパッチされる。発行キュー内の命令は通常、「実行」ステージの実行ユニットに発行される。「実行」ステージは、命令によって指定された演算を処理する。命令によって指定された演算を実行することは、通常、データ、例えば1または複数のオペランドを受け入れることと、1または複数の結果を生成することとを含む。実行ユニットのためのデータもしくは情報またはその両方を保持するために、通常、実行ユニットもしくは発行キューまたはその両方に関連するレジスタファイルが存在する。レジスタファイルは、通常、レジスタファイル内のエントリまたはロケーションから読み出される情報、もしくはエントリまたはロケーションに書き込まれる情報、またはその両方を有する。
【0004】
複数の実行スライスまたはパイプラインを有するプロセッサでは、演算中、1または複数の実行ユニットの作業負荷が、他の実行ユニットによって処理される作業負荷よりも高い、例えばはるかに高い場合がある。言い換えれば、一部の実行ユニットが命令で過負荷になる一方で、他の実行ユニットが軽負荷になることがある。異なる実行ユニットによって実行される作業負荷が、より良好にバランスされ、例えば、異なる実行ユニット間でより均等に分散されることができれば有利であり、これにより、プロセッサ性能が向上する、もしくは待ち時間が減少する、またはその両方である場合がある。
【発明の概要】
【0005】
本開示の要約は、コンピュータシステム、コンピュータアーキテクチャ構造、プロセッサ、プロセッサアーキテクチャ構造、ワイドデータ幅(アキュムレータ)レジスタファイルを含むレジスタファイル、およびプロセッサ内の実行ユニットの作業負荷をバランスさせる方法の理解を助けるために与えられるものであり、本開示または本発明を限定する意図で与えられるものではない。本開示は、当業者に向けられたものである。本開示の様々な態様および特徴は、いくつかの実施態様では有利に個別に使用され、他の実施態様では本開示の他の態様および特徴と組み合わせて使用され得ることが理解されるべきである。従って、コンピュータシステム、アーキテクチャ構造、プロセッサ、プロセッサアーキテクチャ構造、レジスタファイル、もしくはそれらの動作方法、またはその組み合わせに対して、異なる効果を達成するための変形および修正を行うことができる。
【0006】
情報を処理するためのコンピュータシステム、プロセッサ、もしくは方法、またはその組み合わせは、システム内もしくはプロセッサ内またはその両方の1または複数の実行ユニットの作業負荷をバランスさせるために開示され、一実施形態では、プロセッサパイプライン間、例えばプロセッサ内の固定小数点(FX)パイプラインと単純(SX)パイプラインとの間の作業負荷をバランスさせることを対象とする。一態様では、システム、プロセッサもしくは方法またはその組み合わせは、システム内もしくはプロセッサ内またはその両方の他の実行ユニットに命令をルーティングすることによって、第1の実行パイプラインの作業負荷を低減することを対象とする。1または複数の実施形態において、情報を処理するためのプロセッサは、実行スライスであって、実行スライスは、命令を処理するための1または複数の実行ユニットを有する少なくとも2つの処理パイプラインを含み、少なくとも2つの処理パイプラインの少なくとも第1の処理パイプラインおよび第2の処理パイプラインは、第1の命令タイプを実行することが可能である、実行スライスと、第1の処理パイプラインまたは第2の処理パイプラインのいずれが第1の命令タイプを実行するかを決定するために命令をデコードするための命令デコードユニットと、を含む。1または複数の態様において、プロセッサは、第1の処理パイプライン作業負荷、第2の処理パイプライン作業負荷、およびそれらの組み合わせからなる作業負荷グループの少なくとも1つを計算することと、作業負荷グループの少なくとも1つに基づいて、第1の命令タイプを実行する第1の処理パイプラインまたは第2の処理パイプラインを選択することと、を実行するように構成される。
【0007】
好ましくは、システムもしくはプロセッサまたはその両方は、第1の処理パイプライン作業負荷を計算し、第2の処理パイプライン作業負荷を計算するようにさらに構成される。第1の処理パイプライン作業負荷または第2の処理パイプライン作業負荷を計算することは、一実施形態において、第1の処理パイプラインにおいて実行される命令の少なくとも第1のサブグループの数をカウントすること、もしくは第2の処理パイプラインにおいて実行される命令の少なくとも第2のサブグループの数をカウントすること、またはその両方を含み、一態様において、実行スライスによって実行されるすべての命令をカウントすることと、第1の処理パイプラインにおいて実行される命令の第1のサブグループの割合、もしくは第2の処理パイプラインにおいて実行される命令の第2のサブグループの割合、またはその両方を、命令の第1のサブグループの数、命令の第2のサブグループの数、実行スライスによって実行されるすべての命令、およびそれらの組み合わせからなるグループのうちの少なくとも1つに基づいて決定することと、をさらに含む。1または複数のアプローチにおいて第1の処理パイプライン作業負荷を計算すること、および第2の処理パイプライン作業負荷を計算することは、「N」命令の固定間隔またはローリング間隔にわたって実行される。一態様において、第1の処理パイプライン作業負荷を計算することは、第1の処理パイプラインにおいて実行される命令の第3のサブグループの数をカウントすることと、命令の第3のサブグループの割合を決定することとをさらに含む。
【0008】
1または複数の実施形態において、作業負荷グループの少なくとも1つに基づいて第1の処理パイプラインまたは第2の処理パイプラインを選択することは、第1の処理パイプライン作業負荷と第2の処理パイプライン作業負荷とを比較することと、第1の処理パイプライン作業負荷を計算することと、第1の処理パイプライン作業負荷を第1の閾値と比較することであって、第1の閾値は、数、割合、比率、およびそれらの組み合わせからなる第1の閾値グループの少なくとも1つである、比較することと、第1の処理パイプライン作業負荷が第1の閾値未満であることに応答して、第1の命令タイプを実行する第1の処理パイプラインを選択することと、第1の処理パイプライン作業負荷を計算することと、第2の処理パイプライン作業負荷を計算することと、第1の処理パイプライン作業負荷を第1の閾値と比較することと、第2の処理パイプライン作業負荷を第2の閾値と比較することと、第1の処理パイプライン作業負荷が第1の閾値を超えること、および第2の処理パイプライン作業負荷が第2の閾値未満であることの両方に応答して、第1の命令タイプを実行する第2の処理パイプラインを選択することと、第1の処理パイプライン作業負荷が第1の閾値以下であること、かつ、第1の処理パイプライン作業負荷が第1の閾値を超えることおよび第2の処理パイプライン作業負荷が第2の閾値以下であることの両方、に応答して、命令タイプを実行する第1の処理パイプラインを選択することと、を含む。さらなる実施形態において、1または複数の実施形態における作業負荷グループの少なくとも1つに基づいて、第1の処理パイプラインまたは第2の処理パイプラインを選択することは、命令の第3のサブグループの数もしくは割合またはその両方が第3の閾値を超えているか否かを判定することと、第1の処理パイプラインにおいて実行される命令の第3のサブグループの数もしくは割合またはその両方が第3の閾値を超えていることに応答して、第2の処理パイプラインを選択することとを含む。
【0009】
一実施形態では、システムもしくはプロセッサまたはその両方は、2つの実行スライスを含む少なくとも1つのスーパースライスを含み、第1の処理パイプラインは、単純算術命令を実行するように構成された算術論理演算ユニット(ALU)実行ユニットを有するComputeパイプであり、第2の処理パイプラインは、少なくとも単純算術命令を実行するように構成された単純(SX)実行ユニットを有するStore/Branch/Simpleパイプであり、第1の命令タイプは単純算術命令であり、命令デコードユニットは、命令の第1のサブグループの数をカウントする第1のカウンタを含み、命令の第1のサブグループが、Computeパイプ内で実行される少なくともマルチサイクル演算命令を含む。一態様では、プロセッサは、第1のカウンタを使用して、命令の第1のサブグループの数をカウントすることと、命令の第1のサブグループの数を第1の閾値と比較することと、命令の第1のサブグループの数が第1の閾値未満であることに応答して、単純算術命令を実行するComputeパイプを選択することと、命令の第1のサブグループが第1の閾値以上であることに応答して、単純算術命令を実行するStore/Branch/Simpleパイプを選択することと、を実行するように構成される。さらなる実施形態において、命令デコードユニットは、さらに、Store/Branch/computeパイプ内で実行される命令の第2のサブグループの数をカウントする第2のカウンタであって、命令の第2のサブグループは、ストア命令、デュアルポートロード命令、分岐命令、SX命令、およびこれらの組み合わせからなる単純グループのうちの少なくとも1つを含む、第2のカウンタと、スーパースライスで処理される命令の数をカウントする第3のカウンタと、を備える。プロセッサは、Computeパイプのパイプラインで実行される命令の第1のサブグループの数と、第3のカウンタによってカウントされる命令の数とに基づいて、Computeパイプで実行される命令の第1のサブグループの第1の比率を計算することと、第2のカウンタを使用して、命令の第2のサブグループの数をカウントすることと、Store/Branch/Simpleパイプで実行された命令の第2のサブグループの数と、第3のカウンタによってカウントされた命令の数とに基づいて、Store/Branch/Simpleパイプで実行された命令の第2のサブグループの第2の比率を計算することと、第1の比率を第1の比率閾値と比較することと、第2の比率を第2の比率閾値と比較することと、第1の比率が第1の比率閾値未満であること、または第2の比率が第2の比率閾値以上であることに応答して、単純算術命令を実行するComputeパイプを選択することと、第1の比率が第1の比率閾値以上であることに応答し、さらに第2の比率が第2の比率閾値未満であることに応答して、単純算術命令を実行するStore/Branch/Simpleパイプを選択することと、を実行するように構成される。
【0010】
本発明の前記および他の目的、特徴、および利点は、添付図面に示される本発明の例示的な実施形態のより具体的な以下の説明から明らかになるであろう。
【0011】
コンピュータシステム、コンピュータアーキテクチャ構造、プロセッサ、プロセッサアーキテクチャ構造、プロセッサパイプライン、実行ユニット、もしくはそれらの動作方法の様々な態様、特徴、および実施形態は、提供される図と併せて読むと、より良く理解されるであろう。実施形態は、コンピュータシステム、コンピュータアーキテクチャ構造、プロセッサ、プロセッサアーキテクチャ構造、プロセッサパイプライン、実行ユニット、もしくはそれらの動作方法、またはその組み合わせの態様、特徴、もしくは様々な実施形態、またはその組み合わせを例示する目的で図に提供されているが、特許請求の範囲は、示された正確なシステム、実施形態、方法、プロセス、もしくは装置、またはその組み合わせに限定されるべきではなく、示された特徴、もしくはプロセス、またはその両方は、単独で、または他の特徴もしくはプロセスまたはその両方と組み合わせて使用されてもよい。
【図面の簡単な説明】
【0012】
【
図1】本開示の態様が実施され得るデータ処理システムの一例を示す図である。
【
図2】本開示の特定の態様が実施され得るプロセッサのブロック図である。
【
図3】本開示の特定の態様による、2つの実行スライスを有するマルチスライスプロセッサの一部のブロック図である。
【
図4】本開示の一実施形態による、2つのスーパースライスとして配置された4つの実行スライスを有するマルチスライスプロセッサの一部のブロック図である。
【
図5】本開示の実施形態によるプロセッサパイプラインの一部を示すブロック図である。
【
図6】本開示の実施形態によるプロセッサパイプラインの一部を示す簡略化されたブロック図である。
【
図7】本開示の実施形態によるプロセッサ実行ユニットで処理される命令の一例を示す図である。
【
図8】本開示の実施形態によるプロセッサ実行ユニットで処理される命令の一例を示す図である。
【
図9】プロセッサ内の1または複数の実行ユニットの作業負荷を調整するための実施形態による方法のフローチャートを示す図である。
【発明を実施するための形態】
【0013】
以下の説明は、本発明の一般原理を説明するためになされたものであり、本明細書で請求される発明概念を限定するものではない。以下の詳細な説明では、コンピュータシステム、コンピュータアーキテクチャ構造、プロセッサ、プロセッサアーキテクチャ構造、プロセッサ命令実行パイプライン、実行ユニット、およびそれらの動作方法の理解を提供するために、多数の詳細が記載されているが、当業者には、コンピュータシステム、コンピュータアーキテクチャ構造、プロセッサ、プロセッサアーキテクチャ構造、プロセッサ命令実行パイプライン、実行ユニット、およびそれらの動作方法の異なる多数の実施形態は、それらの特定の詳細がなくても実施されることがあり、特許請求の範囲および本発明は、本明細書で具体的に説明され示されるシステム、アセンブリ、サブアセンブリ、実施形態、機能ユニット、特徴、回路、プロセス、方法、態様、もしくは詳細、またはその組み合わせに限定されるべきではないことが理解されるだろう。さらに、本明細書に記載された特定の特徴は、様々な可能な組み合わせおよび順列のそれぞれにおいて、他の記載された特徴と組み合わせて使用することができる。
【0014】
本明細書において特に定義されない限り、すべての用語は、本明細書から暗示される意味、ならびに当業者によって理解される意味、もしくは辞書、専門書などで定義される意味、またはその両方を含め、可能な限り広義に解釈されるものとする。また、本明細書および添付の特許請求の範囲において使用される場合、単数形「a」、「an」および「the」は、特に指定されない限り、複数の参照語を含み、用語「含む(comprises)」もしくは「含む(comprising)」またはその両方は、記載された特徴、整数、ステップ、動作、要素、もしくはコンポーネントまたはその組み合わせの存在を指定するが、1つ以上の他の特徴、整数、ステップ、動作、要素、コンポーネント、もしくはそれらのグループまたはその組み合わせの存在または追加を排除するものではないことに留意しなければならない。
【0015】
以下の議論では、当業者には明らかな、プロセッサおよびマイクロプロセッサシステム、プロセッサアーキテクチャを含む情報処理システムの従来の特徴を省略するか、または簡単にしか説明しない。当業者は、プロセッサの一般的なアーキテクチャ、特に、実行パイプラインおよび1または複数の実行ユニットを有するプロセッサに精通していることが想定される。番号付けされた要素には、その要素が導入された図に従って番号が付けられ、後続の図ではその番号によって参照されることが多いが、必ずしもそうではないことに留意されたい。
【0016】
図1は、本開示の態様が実施され得るデータ処理システム100の一例を示す。このシステムは、プロセッサ110とも呼ばれる中央処理装置(CPU)110を有する。CPU110は、システムバス112によって他の様々な構成要素に結合されている。読取専用メモリ(「ROM」)116は、システムバス112に結合され、データ処理システム100の特定の基本機能を制御する基本入力/出力システム(「BIOS」)を備える。ランダムアクセスメモリ(「RAM」)114、I/Oアダプタ118、および通信アダプタ134も、システムバス112に結合されている。I/Oアダプタ118は、ディスク記憶装置120と通信する小型コンピュータシステムインターフェース(「SCSI」)アダプタであってもよい。通信アダプタ134は、バス112を外部ネットワークと相互接続し、データ処理システムが他のかかるシステムと通信できるようにする。入力/出力装置も、ユーザインタフェースアダプタ122およびディスプレイアダプタ136を介してシステムバス112に接続されている。キーボード124、トラックボール132、マウス126、およびスピーカ128はすべて、ユーザインタフェースアダプタ122を介してバス112に相互接続されている。ディスプレイモニタ138は、ディスプレイアダプタ136によってシステムバス112に接続されている。このようにして、ユーザは、キーボード124、トラックボール132またはマウス126を介してシステムに入力し、スピーカ128およびディスプレイ138を介してシステムから出力を受信することができる。さらに、例えばAIX(「AIX」はIBM Corporationの商標)などのオペレーティングシステムが、
図1に示す様々なコンポーネントの機能を調整するために使用される。
【0017】
CPU(または「プロセッサ」)110は、集積回路によって形成された様々なレジスタ、バッファ、実行ユニット、キャッシュ、メモリ、および他のユニットを含み、縮小命令セットコンピューティング(「RISC」)技術に従って動作することができる。CPU110は、いくつかの態様では内部クロック(図示せず)に同期したプロセッササイクルに従ってデータを処理する。
【0018】
図2は、実施形態によるプロセッサ110の簡略化されたブロック図を示す。プロセッサ110は、メモリ202、命令キャッシュ204、命令フェッチユニット206、デコードユニット210、LSU処理パイプライン230およびVSU処理パイプライン255を含む実行スライス215、および宛先リソース290を含む。プロセッサ110は、コンピュータシステム内に含まれてもよいし、コンピュータシステム内に分散されていてもよい。命令およびデータは、メモリ202に格納することができ、命令キャッシュ204は、メモリ202内の命令にアクセスし、フェッチされる命令を格納することができる。メモリ202は、任意のタイプの揮発性メモリまたは不揮発性メモリを含むことができる。メモリ202および命令キャッシュ204は、複数のキャッシュレベルを含むことができる。
【0019】
図2では、命令フェッチユニット206、デコードユニット210、および実行スライス215の簡略化された例が描かれている。様々な実施形態において、プロセッサ110は、複数の処理実行スライス215、例えば、4つの実行スライス215を含み得る。一実施形態では、各実行スライス215は、LSU処理パイプライン230およびVSU処理パイプライン255を含む。一態様では、LSU処理パイプライン230は、LSU発行ユニット235、実行ユニット240、および物理レジスタファイル250を含む。実施形態における実行ユニット240は、Sx/Agen実行パイプライン245を含む。また、LSU処理パイプライン230は、エラーチェックおよび処理ロジック、LSU処理パイプライン230を通る1または複数の並列パス、および当該技術分野において現在または今後知られる他の機能などの他の機能を含むことができる。一態様では、VSU処理パイプライン255は、VSU発行ユニット270、実行ユニット275、および物理レジスタファイル285を含む。実施形態における実行ユニット275は、FX/ALU実行パイプライン280を含む。VSU処理パイプライン255はまた、エラーチェックおよび処理ロジック、VSU処理パイプライン255を通る1または複数の並列パス、および当技術分野で現在または今後知られる他の機能などの他の機能を含むことができる。
【0020】
図2のプロセッサ110において、命令フェッチユニット206は、デコードユニット210によるさらなる処理のために、命令アドレスに従って命令キャッシュ204から命令をフェッチする。デコードユニット210は、命令をデコードし、デコードされた命令、命令の一部、または他のデコードされたデータを、命令のタイプに応じて適切なパイプライン230または255に渡す。デコードユニット210は、分岐命令を検出することもできる。より具体的には、
図2の例では、デコードユニット210は、デコードされた命令をLSU発行ユニット235またはVSU発行ユニット270のいずれかに送信する。それぞれの発行ユニット235、270は、命令または他のデータを解析し、解析に基づいて、デコードされた命令、命令の一部、または他のデータを、それぞれのパイプライン230、255内の1または複数の実行ユニット240、275に送信する。それぞれの物理レジスタファイル250、285は、それぞれの実行ユニット245、280のデータを保持する。物理レジスタファイル250、285は、1つのレジスタファイル内のデータがいずれかの実行ユニット240、275によって使用され得る別個のレジスタファイルとすることができ、一実施形態では、レジスタファイル250、285は、単一のレジスタファイルとすることができる。プロセッサ110を通る順方向経路が
図2に描かれているが、プロセッサ110の要素間に他のフィードバック経路および信号経路が含まれてもよい。
【0021】
実行ユニット240、275は、それぞれの実行ユニット240、275に発行された命令によって指定された演算を実行し(perform)、実行する(execute)。LSUパイプライン230は実行ユニットSX/Agen245と共に示されてきたが、実行ユニット240は、例えば、ロード/ストア実行ユニット(LSU)、ストアアドレス生成器(Agen)ロジックを含む単純ユニット(SX)、もしくは他の実行ユニット、またはその組み合わせなどの複数の実行ユニットを含むことができる。VSUパイプライン255は、実行ユニットFX/ALU280と共に示されてきたが、実行ユニット275は、例えば、固定小数点実行ユニット(FX)、浮動小数点実行ユニット(FPU)、算術論理実行ユニット(ALU)、ベクトルスカラー実行ユニット(VSU)、もしくは他の実行ユニット、またはその組み合わせなどの複数の実行ユニットを含むことができる。
【0022】
プロセッサ110はまた、実行された命令の結果、例えば、LSU処理パイプライン230およびVSU処理パイプライン255からの結果を宛先リソースに書き込むための結果/ライトバックロジック290を含む。宛先リソースは、レジスタ、キャッシュメモリ、他のメモリ、他のデバイスと通信するためのI/O回路、他の処理回路、または実行される命令またはデータのための他の任意のタイプの宛先を含む、任意のタイプのリソースであってよい。プロセッサ110は、他の回路、機能ユニット、およびコンポーネントを含んでもよい。
【0023】
命令は、
図2のプロセッサ110において、論理的にパイプライン化されたステージのシーケンスで処理されてもよい。しかしながら、かかる限定が本明細書の特許請求の範囲において明確に示されない限り、ステージのこの特定の分割が限定として取られるべきでないように、これらのステージの機能が一緒にマージされてもよいことが理解されるべきである。実際、ステージまたは機能ユニットのいくつかは、理解を簡単にするために、
図2において単一の論理ユニットとして示されており、関連するさらなる詳細は、以下で提供される。
【0024】
図3は、プロセッサ110の一部のブロック図であり、この例では、本開示の実施形態によるマルチスライスプロセッサ110を示す。
図3は、議論の目的のために、マルチスライスプロセッサ110の一部を図式的に示しているに過ぎないことに留意されたい。マルチスライスプロセッサが他の構成を有してもよいことは理解されよう。
図3に示すように、マルチスライスプロセッサは、2つの処理スライス-スライス0(スライスS0または215A)およびスライス1(スライスS1または215B)を含む。プロセッサ110は、メモリ202、命令キャッシュ204、命令フェッチユニット206およびデコードユニット210を含む。スライスS0およびS1の各々は、命令ディスパッチユニット(220Aおよび220B)、論理レジスタマッパ(225Aおよび225B)、履歴バッファ(HB)(226Aおよび226B)、命令補完テーブル(ICT)(222Aおよび222B)、LSU処理パイプライン(230Aおよび230B)、およびVSU処理パイプライン(255Aおよび225B)を含む。
【0025】
各LSU処理パイプライン(230Aおよび230B)は、LSU発行ユニット(LSU ISQ)(235Aおよび235B)と、実行ユニット(240Aおよび240B)とを含み、それぞれのLSU処理パイプライン230A、230B内の各実行ユニット240A、240Bは、SX/Agen実行ユニット(245Aおよび245B)を含む。LSU処理パイプライン230A、230Bは、例えばロードストアユニット(LSU)などの他の実行ユニットを含むことができる。各VSU処理パイプライン(255Aおよび255B)は、VSU発行ユニット(VSU ISQ)(270Aおよび270B)および実行ユニット(275Aおよび275B)を含み、それぞれのVSU処理パイプライン255A、255B内の各実行ユニット275A、275Bは、FX/ALU実行ユニット(280Aおよび280B)を含む。VSU処理パイプライン(255A、255B)は、例えば、ベクトルスカラーユニット(VSU)および浮動小数点実行ユニット(FPU)などの他の実行ユニットを含むことができる。物理レジスタファイル(RF)250Aは、LSU処理パイプライン230AおよびVSU処理パイプライン255Aの両方によって使用することができ、物理レジスタファイル250Bは、LSU処理パイプライン230BおよびVSU処理パイプライン255Bの両方によって使用することができる。
図3のプロセッサ110は、LSUおよびVSU処理パイプライン間で共有される単一のレジスタファイル250A、250Bを示しているが、1または複数のレジスタファイル250が、LSUおよびVSU処理パイプラインにおいて、および実行スライス215A、215Bにわたって使用され得ることが理解され得る。実行ユニット240A、240B、275A、275Bは、実行ユニットによる実行のための命令を保持する1または複数のキューを含み得る。
【0026】
2つのスライス215A、215Bは図示および議論を容易にするためだけに示されており、マルチスライスプロセッサ110は、各スライスがスライスS0、S1(スライス215Aおよび215B)の各々について上述したすべての構成要素を有する2つ以上の実行スライスを含んでもよいことに留意されたい。さらに、処理スライスは、スーパースライス(SS395)にグループ化されてもよく、各スーパースライスは、処理スライスまたは実行スライスの組を含む。例えば、マルチスライスプロセッサは、2つのスーパースライスSS0およびSS1を含むことができ、SS0(例えば、395)はスライスS0およびS1を含み、SS1(図示せず)はスライスS2およびS3を含む。
【0027】
命令フェッチユニット206は、プロセッサ110またはプロセッサスーパースライス395によって実行される命令をフェッチする。命令フェッチユニット206によってフェッチされた命令はデコードユニット210に送られ、そこで命令が命令タイプ別にデコードされる。デコードユニット210は、デコードされた命令をそれぞれの命令ディスパッチユニット220A、220Bに送信する。命令ディスパッチユニット220A、220Bは、命令の種類と、その特定の命令を処理すべき実行ユニット240または275に応じて、LSU発行ユニット235またはVSU発行ユニット255に命令をディスパッチする。命令ディスパッチユニット220A、220Bは、それぞれのLSU発行ユニット235またはVSU発行ユニット255に、通常、プログラム順序で命令をディスパッチする。1または複数の実施形態では、LSU発行ユニット235またはVSU発行ユニット270にディスパッチされた各命令には、命令を識別するための識別子、例えば識別タグ(iTag)が刻印される。命令には、他の情報やメタデータをスタンプすることもできる。命令(iTag)は通常、スレッドごとにプログラムの昇順で割り当てられ、スタンプされる。
【0028】
それぞれのLSU発行ユニット235またはVSU発行ユニット270は、命令タイプに基づいて、それぞれの実行ユニット240または実行ユニット275に命令を発行する。例えば、マルチサイクル演算命令、行列乗算アキュムレータ(MMA)命令は、通常、VSU処理パイプライン255(例えばFX/ALU実行ユニット280)で処理され、ストア命令、ロード命令(デュアルポートロードを含む)、分岐命令およびストア命令は、通常、LSU処理パイプライン230で処理される。LSUおよびVSU発行ユニット235、270は通常、命令に関連するデータが取り出され、使用可能になるまで命令を保持する。特定の態様では、LSU発行ユニット235およびVSU発行ユニット270は命令のセットを保持し、物理レジスタファイル250は命令入力のデータを蓄積する。レジスタファイルは、メモリとプロセッサ内の他の機能(実行)ユニットとの間でデータをステージングするために使用されることがある。多数のレジスタファイルとタイプがあってもよい。すべてのソースデータが命令のために蓄積されると、1または複数の実施形態におけるデータは、命令の実行のために指定された1または複数の実行ユニットに渡される。物理レジスタ(またはメインレジスタ)ファイル250は、実行ユニット240、275にディスパッチされた命令で指定された演算で使用されるデータを格納する役割を果たすことができ、実行ユニット240、275によって実行された演算の結果は、物理レジスタファイル250内の指定されたターゲットレジスタエントリに書き込まれることがある。各実行ユニット、例えばSX/Agen245およびFX/ALU280は、レジスタファイル(STF)エントリに書き込むために、ライトバックバス上で結果データを利用可能にすることができる。
【0029】
論理レジスタマッパ225は、論理レジスタ内のエントリ(例えば、GPR1)と物理(メイン)レジスタファイル250内のエントリ(例えば、物理レジスタアレイエントリ)との間のマッピングを提供するメタデータ(例えば、iTag、STFtagなど)を含む。STFtagは、論理レジスタエントリを物理レジスタファイルエントリに関連付けるポインタである。例えば、ある命令が論理レジスタ、例えばGPR1を読み出したいとき、論理レジスタマッパ225はそれぞれの発行ユニット235、270に伝え、発行ユニット235、270は、物理レジスタファイル250内のどこにデータ、例えば物理レジスタアレイエントリを見つけることができるかを、それぞれの実行ユニット240、275、例えばSX/Agen245およびFX/ALU280に伝える。それぞれの実行ユニット240、275、例えばSX/Agen245またはFX/ALU280は、命令をアウトオブオーダーで実行し、それぞれの実行ユニット240、275が命令を終了すると、それぞれの実行ユニット240、275は、終了した命令、例えばiTagをICT222に送信する。ICT222は、ディスパッチユニット220によってディスパッチされた命令のキューを含み、それらが処理されるにつれて命令の進行状況を追跡する。
【0030】
誤予測された分岐命令または他の例外が検出されると、誤予測された分岐または例外に後続する命令およびデータは破棄され、例えば、プロセッサ110の様々なユニットからフラッシュされる。履歴バッファ(HB)226、例えば、セーブ&リストアバッファ(SRB)226は、投機的レジスタ状態とアーキテクトレジスタ状態の両方を含み、新しい命令がディスパッチされると、論理レジスタマッパ225をバックアップする。この点に関して、履歴バッファ226は、新しい命令がフラッシュされ、古いデータを回復する必要がある場合に備えて、新しい命令が論理レジスタマッパ226からデータを退避させるときに、論理レジスタマッパ225からの情報を格納する。履歴バッファ(HB)226は、新しい命令が完了するまで、格納された情報を保持する。履歴バッファ(HB)226は、論理レジスタマッパ225の内容を履歴バッファ(HB)226から論理レジスタマッパ225に戻すために、論理レジスタマッパ225とインタフェースし、論理レジスタマッパ225内のポインタを更新して、命令が正しいデータを得る場所を知るようにし、例えば、プロセッサは、割り込み可能な命令の前に存在した状態に戻され、例えば、分岐命令が誤予測された。
【0031】
複数の処理スライスを有するCPU110は、複数の命令を同時に実行することができ、例えば、1つの処理サイクルにおいて各処理スライスにおける1つの命令を同時に実行することができる。かかる複数の処理スライスを有するCPUは、マルチスライスプロセッサまたはパラレルスライスプロセッサと呼ばれることがある。複数の実行スライスで同時に処理を行うことにより、マルチスライスプロセッサの処理速度を大幅に向上させることができる。シングルスレッド(ST)モードでは1つのスレッドが処理され、SMTモードでは2つのスレッド(SMT2)または4つのスレッド(SMT4)が同時に処理される。
【0032】
上述したように、命令はデコードユニット210でデコードされ、プロセッサで実行するために複数の実行ユニットの1つに指示される。多くのプロセッサでは、多数の命令を1または複数の実行ユニットで実行することができる。例えば、単純算術演算や他の些細な命令は、複数の実行ユニットによって実行することができる。待ち時間を短縮するために、プロセッサは、複数のパイプラインもしくは実行ユニットまたはその両方によって実行可能な命令を、様々なパイプラインもしくは実行ユニットまたはその両方の作業負荷に基づいて、命令を実行可能なプロセッサ内の1または複数のパイプラインもしくは実行ユニットまたはその両方のうちの1つに向けることができる。1または複数の実施形態において、プロセッサは、1または複数のパイプもしくは実行ユニットまたはその両方において実行可能な命令を実行することに応答して、1または複数のパイプもしくは実行ユニットまたはその両方の作業負荷を決定することができ、その命令を実行可能なプロセッサ内のパイプラインもしくは実行ユニットまたはその両方の作業負荷に基づいて、1または複数のパイプラインもしくは実行ユニットまたはその両方のうちの1つに、実行のためのそれらの命令を向けることができる。
【0033】
例えば、演算集中型作業負荷では、例えば、通常単純算術命令を実行する固定小数点(FX)実行ユニットなどの演算ユニットが、(他の演算命令に加えて)演算命令、例えば、マルチサイクル演算命令もしくは乗算行列加算(MMA)命令またはその両方で過負荷になる可能性があり、一方、他の実行ユニット、例えば、単純算術命令も実行可能なSX実行ユニットは軽負荷になる可能性がある。FX実行作業負荷を低減するために、1または複数の実施形態において、プロセッサ、例えば、プロセッサ内の命令デコードユニット(IDU)は、FX実行ユニット/パイプラインの作業負荷およびSX実行ユニット/パイプラインの作業負荷を検出もしくは判定またはその両方を行い、FX実行ユニットまたはSX実行ユニットのいずれかで実行可能な単純算術命令を、これら2つのパイプラインもしくは実行ユニットまたはその両方のそれぞれの作業負荷に基づいて、FXユニットまたはSXユニットにルーティングするロジックを実装することができる。
【0034】
例えば、典型的にはVSU処理パイプラインで処理されるが、LSU処理パイプラインでも実行可能な些細なもしくは単純なまたはその両方である命令は、これら2つの処理パイプラインの作業負荷に基づいて、LSU処理パイプラインで実行されるように指示することができ、その逆も可能である。例えば、VSUパイプラインの作業負荷が重く、LSUパイプラインの作業負荷が比較的軽い場合、プロセッサは、LSUパイプラインで実行可能な単純なもしくは些細なまたはその両方である演算命令をLSUパイプラインに向けることができる。比較的単純で、パワーISAの複数の処理パイプラインで処理可能な、またはその両方である、頻繁に使用される命令の1つに、addi命令がある。addi命令は比較的単純な算術演算であり、通常、算術実行ユニット、例えばFX実行ユニットによってVSU処理パイプラインで実行される。addi命令は、SXユニット、例えばストアアドレス生成(Agen)実行ユニットによってLSU処理パイプラインで実行することもできる。プロセッサの動作中、FXユニットはaddi命令以外の演算命令、例えばマルチサイクル演算で過負荷になる可能性があり、一方、addi命令も実行可能なSXユニットの作業負荷は軽い。FX実行ユニットの作業負荷を低減し、待ち時間を短縮してプロセッサのスループットと性能を向上させるために、addi命令は実行のためにSXユニットにリダイレクトすることができる。1または複数の実施形態では、命令デコードユニット(IDU)は、1または複数の実行ユニットもしくはパイプラインまたはその両方の作業負荷を検出もしくは判定またはその両方を行うロジックを実装することができ、1または複数の実行ユニット/パイプラインの作業負荷に応答して、実行のために命令を代替の実行ユニットもしくはパイプラインまたはその両方にリダイレクトまたは再ルーティングすることができる。異なる実行ユニットもしくは処理パイプラインまたはその両方の作業負荷を検出もしくは判定またはその両方を行うための1つのメカニズムは、特定の実行ユニットもしくは処理パイプラインまたはその両方によって処理される様々な命令をカウントする1または複数のカウンタを実装することである。
【0035】
図4に目を向けると、プロセッサ410の一部の別の実施形態が図示されている。プロセッサ410は、2つのスーパースライス(SS0およびSS1)として構成された4つの実行スライスを有するマルチスライスプロセッサである。スーパースライスA(SS0)はスーパースライスB(SS1)と同じであり、4スレッドモード(SMT4)ではスレッド0と2がSS0で処理され、スレッド1と3がSS1で処理される。開示される実施形態における命令デコードユニット(IDU)210は、発行キュー235A~235Dに対する8つの送信レーンを有し、送信レーン0:3はスーパースライスA(SS0)に供給され、送信レーン4:7はスーパースライスB(SS1)に供給される。命令デコードユニット(IDU)210の送信レーン0:3は、スライス0発行キュー235Aとスライス1発行キュー235Bに命令を送信し、命令デコードユニット(IDU)210の送信レーン4:7は、スライス2発行キュー235Cとスライス3発行キュー235Dに命令を送信する。スーパースライスSS0発行キュー235A、235BおよびスーパースライスSS1発行キュー235C、235Dは、命令の種類に基づいて、複数のパイプのいずれかに命令を発行する。
図4の例では、発行キュー235A、235Bは、ロードAパイプ442A、Store/Branch/SimpleAパイプ444A、スライスCompute0パイプ476A、スライスCompute1パイプ476B、スーパースライスComputeAパイプ478A、もしくはSMT4-コアリソースComputeパイプ484、またはその組み合わせのうちの1つに命令を発行することができる。
図4の例では、発行キュー235C、235Dは、ロードBパイプ442B、Store/Branch/SimpleBパイプ444B、スライスCompute2パイプ476C、スライスCompute3パイプ476D、スーパースライスComputeBパイプ478B、もしくはSMT4-コアリソースComputeパイプ484、またはその組み合わせのうちの1つに命令を発行することができる。
図4のプロセッサ410の動作は、スーパースライスA(SS0)がスーパースライスB(SS1)のコピーであることが理解され得るように、主にスーパースライスA(SS0)の動作を参照して説明される。パイプ442、444、476、478、および484の各々は、それぞれのパイプを下って発行された命令を実行するための1または複数の実行ユニットを含み得ることが理解され得る。
【0036】
図4の例では、スーパースライスA(SS0)を参照し、スーパースライスB(SS1)が同様に構成されることを認識すると、Store/Branch/SimpleAパイプ444Aは、ストア演算および単純算術演算、ならびに他の演算を処理できるストアアドレス生成(Agen)ロジックを含むシンプル(SX)パイプラインを含む。スライスCompute0パイプ476Aは、算術演算に使用される算術ロジック(ALU)実行ユニットを含む固定小数点(FX)パイプラインを含む。単純算術演算は、通常、スライスCompute0パイプ476Aで処理、例えば実行されるが、Store/Branch/Simpleパイプ444Aで処理、例えば実行することもできる。例えば、addi命令は、通常、ALU実行ユニットによってスライスCompute0パイプ476Aで処理され、SXパイプラインによってStore/Branch/SimpleAパイプ444Aでも実行され得る。1または複数の実施形態では、スライスCompute0パイプ476Aに重い作業負荷があり、Store/Branch/SimpleAパイプ444Aに比較的軽い作業負荷がある場合、例えばaddi命令などの単純算術命令を、実行のためにStore/Branch/SimpleAパイプ444Aに向けることができる。
【0037】
1または複数の実施形態において、IDU202は、様々な処理パイプラインもしくは実行ユニットまたはその両方の作業負荷を決定するために、処理パイプラインの1または複数に送信される命令の1または複数のグループまたはサブグループを追跡する。一実施形態では、1または複数のカウンタが、処理パイプラインもしくは実行ユニットまたはその両方の1または複数に送信される命令の1または複数のグループまたはサブグループを追跡するために使用される。
図4の例示的な実施形態において、命令デコードユニット(IDU)210は、複数の命令グループ、例えば、スーパースライスA(SS0)に向けられる命令グループとスーパースライスB(SS1)に向けられる命令グループを追跡する。一態様では、命令デコードユニット(IDU)202は、スーパースライスA(SS0)に対してレーン0:3にわたって伝送される特定の命令、命令のグループ、または命令のサブグループをカウントする1または複数のカウンタと、スーパースライスB(SS1)に対してレーン4:7にわたって伝送される特定の命令、命令のグループ、または命令のサブグループをカウントする1または複数の他のカウンタとを有することができる。スーパースライスA(SS0)へのレーン0:3にわたって伝送される特定の命令をカウントする1または複数のカウンタは、スーパースライスA(SS0)における作業負荷を決定すること、および1または複数の態様において異なるパイプ442A、444A、476A、476B、478Aもしくは484またはその組み合わせの作業負荷を決定することを容易にする。レーン4:7を介してスーパースライスB(SS1)に伝送される特定の命令をカウントする1または複数のカウンタは、スーパースライスB(SS1)における作業負荷を決定すること、および1または複数の態様において異なるパイプ442B、444B、476C、476D、478Bもしくは484またはその組み合わせの作業負荷を決定することを容易にする。
【0038】
図5は、命令デコードユニット(IDU)202の簡略化されたブロック図の一部を示しており、シングルスレッドモード(SMT1)またはデュアルスレッドモード(SMT2)において、サパースライスSS0、SS1の両方、例えば、発行キュー235A~235Dに送信される8つの(8)レーン0:7(527)の全ては、カウンタ411~414およびカウンタ416~419によってカウントされ、様々なパイプもしくは実行ユニットまたはその両方へのルーティングは、8つのデコードレーン527すべてに影響を与える。
図6は、4スレッドモード(SMT4)において、送信レーン0:3上のカウンタ411~414によってカウントされた命令が、スーパースライスSS0発行キュー235A~235Bへのデコードレーン0:3(628)に影響を与え、送信レーン4:7上のカウンタ416~419によってカウントされた命令が、スーパースライスSS1発行キュー235C~235Dへのデコードレーン4:7(629)に影響を与える、命令デコードユニット(IDU)202の簡略化されたブロック図の一部を示す。
【0039】
1または複数の実施形態では、
図4に示すように、IDU210は、複数のカウンタ411~414およびカウンタ416~419を含み、カウンタ411~414は、スーパースライスA SS0内の様々なパイプラインの作業負荷を決定することを容易にし、カウンタ416~419は、スーパースライスB SS1内の様々なパイプラインの作業負荷を決定することを容易にする。より具体的には、カウンタ411~414は、スーパースライスA(SS0)の発行キュー235A、235Bへのレーン0:3にわたって伝送される様々な命令(または命令のグループ/サブグループ)をカウントし、カウンタ416~419は、スーパースライスB(SS1)の発行キュー235C、235Dへのレーン4:7にわたって伝送される様々な命令(または命令のグループ)をカウントする。
【0040】
一態様では、例えば
図4のプロセッサにおいて、カウンタ411は、スーパースライスA(SS0)に送信された命令の総数(例えば、全ての命令)をカウントするように配置および構成され、一方、カウンタ416は、スーパースライスB(SS1)に送信された命令の総数(例えば、全ての命令)をカウントする。好ましくは、カウンタ411および416の各々は、IDU202内に含まれ得る。1つのアプローチにおいて、例えば
図4のプロセッサ410において、単純算術命令、例えばaddi命令が、プロセッサ内の複数のパイプもしくは実行ユニットまたはその両方、例えば第1のパイプ/実行ユニットおよび第2のパイプ/実行ユニットにおいて実行可能である場合、異なるパイプもしくは実行ユニットまたはその両方の作業負荷もしくは相対的な作業負荷またはその両方を決定するために、第1のカウンタは、パイプもしくは実行ユニットまたはその両方のうちの1つ、例えば、第1のパイプもしくは実行ユニットまたはその両方に送信し、第2のカウンタは、パイプもしくは実行ユニットまたはその両方の別の1つ、例えば第2のパイプもしくは実行ユニットまたはその両方に送信された命令(または命令のグループ)をカウントすることができる。1または複数の実施形態において、異なるパイプもしくは実行ユニットまたはその両方の作業負荷に基づいて、プロセッサは、1つのパイプもしくは実行ユニットまたはその両方、例えば第1のパイプもしくは実行ユニットまたはその両方、または他のパイプもしくは実行ユニットまたはその両方、例えば第2のパイプもしくは実行ユニットまたはその両方の作業負荷に基づいて、異なるパイプもしくは実行ユニットまたはその両方に命令を指示することができる。
【0041】
図4のプロセッサの具体例に目を向けると、単純算術命令、例えばaddi命令は、スーパースライスA(SS0)の複数のパイプもしくは実行ユニットまたはその両方で実行可能である。プロセッサ410内の単純算術命令、例えばaddi命令は、スライスCompute0パイプ476AおよびスーパースライスSS0内のStore/Branch/SimpleAパイプ444Aで実行可能である。カウンタ412は、一態様において、スライスCompute0パイプ476Aによって処理される算術リソース集中型命令の第1のサブグループ、例えば、マルチサイクル算術(MC Arth)命令の数をカウントするように構成され、カウンタ413は、命令の第3のサブグループ、例えば、行列乗算アキュムレータ(MMA)命令(大量のリソースを大量に消費する計算命令など)の数をカウントするように構成され、およびカウンタ414は、Store/Branch/SimpleAパイプ444Aによって処理される命令の第2のサブグループの数、例えば、ストア命令、デュアルポートロード命令、分岐命令、およびSX命令の数をカウントするように構成される。スーパースライスB(SS1)の場合、カウンタ417はカウンタ412と同様に構成および配置され、カウンタ418はカウンタ413と同様に構成および配置され、カウンタ419はカウンタ414と同様に構成および配置されることが理解できる。実施例では、命令の第1のサブグループは、例えば、xxbrd、vsubcuq、ddiv、vsbox、vdivsw、fcfidなどのマルチサイクル演算命令を含むことができるが、これらに限定されず、命令の第3のサブグループは、例えば、xvbf16ger2、xvf16ger2、xvf32ger、xvf64ger、およびxvi4ger2などのMMA命令を含むことができるが、これらに限定されない。実施例では、命令の第2のサブグループには、ストア命令、デュアルポートロード命令、分岐命令、および単純(SX)命令(例えば、ストア命令stsdx、std、stdu、sth、stmd、stwd、デュアルポートロード命令lxvp、lxvpx、lq、lqArx、分岐命令b、ba、bl、bla、bc、bca、bclr、bclrl、bcctr、bcctrl、単純(SX)命令mfspr、mtsprなど)が含まれるが、これらに限定されない。
【0042】
プロセッサ410は、カウンタ値を使用してStore/Branch/SimpleAパイプ444Aの作業負荷を決定し、スライスCompute0パイプ476Aの作業負荷を決定するロジックを含み、決定された作業負荷値もしくは割合またはその両方に基づいて単純算術命令を指示することができる。異なる作業負荷チューニングに対応するために、例えば、単純算術命令、例えばaddi命令を、2つ以上のパイプ、例えばStore/Branch/SimpleAパイプ444AまたはスライスCompute0パイプ476Aのいずれにいつ送信するかを決定するために、複数の異なる設定を実装することができる。複数の異なる設定は、事前設定、プリセット、調整可能、もしくはプログラム可能、またはその組み合わせであり得る。プロセッサ410は、特定の命令、例えば単純な算術命令をどのパイプもしくは実行ユニットまたはその両方にいつ向けるかを決定するための基礎として、特定の命令もしくは異なる命令またはその両方のカウント値もしくは比率(割合)またはその両方を使用することができる。
【0043】
1または複数の実施形態では、プロセッサは、マルチサイクル算術命令の比率または割合、行列乗算加算(MMA)命令の比率または割合、もしくはプロセッサの1つのスーパースライス(SS0またはSS1)上で処理されるストア命令、デュアルポートロード命令、分岐命令、および単純(SX)命令の比率、またはその両方を決定し、それらの比率に基づいて、単純算術命令、例えば、addi命令をスライスCompute0パイプ476AまたはStore/Branch/SimpleAパイプ444Aのいずれに送るかを決定する。例えば、カウンタ412によってカウントされた命令の第1のサブグループ、カウンタ413によってカウントされた命令の第3のサブグループ、およびカウンタ414によってカウントされた命令の第2のサブグループの比率は、単純算術命令をスライスCompute0パイプ476A(例えば、スライスCompute0パイプ476AのFXユニット)またはStore/Branch/SimpleAパイプ444A(例えば、Store/Branch SimpleAパイプ444AのSXユニット)のいずれかに単純算術命令を送るかどうかを決定するために使用される。
【0044】
命令の比率は、一定数「N」命令ごとに、例えば64命令ごとにカウントすることができる。この場合、比率は、例えば、64命令後、128命令後、192命令後など、毎64命令後のカウンタ値から計算することができる。すなわち、64個の命令が送信されるごとに、各命令グループのカウントがサンプリングされる。プロセッサ、好ましくはIDUは、サンプリング結果を閾値制御設定と比較し、単純算術命令のルーティングを同じに維持するか、または次の64命令にわたって単純算術命令を再ルーティングする。ここで、64個のマルチサイクル演算(MC Arth)命令の後、マルチサイクル演算(MC Arth)命令を処理するFXユニットの作業負荷が高い(例えば、64個の命令に対して閾値以上である)場合、64個の命令の固定数に基づいて、どのパイプもしくは実行ユニットまたはその両方を使用するかの決定を行う例が
図7に示されており、次の固定された64個の命令に対する単純算術命令、例えば、addi命令は、SXユニット(Store/Branch/Simpleパイプ444内)によって処理されるようにルーティングされる。
図7では、128命令後、カウンタのサンプリング結果が変化したため、プロセッサは、スライスComputeパイプ476内のFXユニットへの単純算術命令の送信に戻る。
【0045】
比率およびカウンタ値の決定もしくはサンプリングまたはその両方は、例えば、最後の数「N」サイクルにわたって、ローリングベースで実行することもできる。例えば、サンプリングおよび比率は、サンプリング結果もしくは比率またはその両方が、最後の64個の命令に基づいて各命令の後に決定されるように、最後の64個の命令に基づいて決定することができる。プロセッサ、好ましくはIDUは、最後の64個の命令に基づくサンプリング結果を閾値制御設定と比較し、単純算術命令をどのように指示するかを決定する。命令のローリング数「N」、例えば、64個の命令のローリング数に基づいて、どのパイプもしくは実行ユニットまたはその両方を使用するかの決定を行う例が
図8に示されており、64個のマルチサイクル演算(MC Arth)命令の後、FXユニットの作業負荷が決定される。
図8において、最初の64個の命令の後、FXユニットの作業負荷が計算され、高いと判定されるので、プロセッサは、Store/Branch/Simple444内のSXユニットに単純算術命令を指示する。64回目の命令の後、プロセッサスライス(SS0)は、単純算術計算(Arth)やロード命令(Load)、ストア命令(Store)など、マルチサイクル演算(MC Arth)命令以外の命令の処理を開始する。64回目のサイクルの後の各命令の後、プロセッサは最後の64命令からの結果をサンプリングし、比率を決定する。9番目のサイクル、例えば72命令の後、比率は十分に変化しておらず、単純算術命令、例えばaddi命令は、Store/Branch/Simpleパイプ444内のSXユニットに引き続きルーティングされる。9番目のサイクル(例えば72命令)の後、プロセッサはあまり集中的でない演算作業負荷を処理し続け、10番目のサイクル(例えば80命令)の後、最後の64命令の比率は、単純算術命令(例えばAddi命令)がFXユニット(例えばスライスComputeパイプ476)にリダイレクトされるように十分に変化している。
【0046】
プロセッサ、例えばIDU202は、命令を代替パイプもしくは実行ユニットまたはその両方にリダイレクトするために、多数の異なる条件を処理するようにプログラムすることができる。
図4のプロセッサ410の例では、IDU202に、単純算術命令、例えば、Addi命令を、Computeパイプ476のようなComputeパイプ、もしくはFXユニットのような実行ユニット、またはその両方から、Store/Branch/Simpleパイプ444もしくはSXユニットのような実行ユニットまたはその両方のような代替パイプ、もしくは代替実行ユニット、またはその両方に送らせるように、2つの条件をプログラムすることができる。単純算術命令をStore/Branch/Simpleパイプ444(例えば、SXユニット)に向ける1つの条件は、マルチサイクル命令が第1の閾値を超え、ストア、デュアルロードポート、分岐、単純(SX)命令が第2の閾値未満である場合である。単純算術命令、例えばAddi命令をStore/Branch/Simpleパイプ444(例えばSXユニット)に向ける別の条件は、MMA命令が第3の閾値を超えている場合である。
【0047】
一例では、マルチサイクル命令に関連する第1の閾値は、命令の固定数またはローリング数Nにわたって(例えば、64命令にわたって)において、マルチサイクル演算(MC Arth)命令の数が、例えば、20%より大きい、例えば、30%より大きい、または例えば、40%より大きい場合であり、同じ固定またはローリング数Nの命令数におけるストア、デュアルロードポート、分岐、および単純(SX)命令の第2の閾値が、例えば、15%より小さい、例えば、25%より小さい、または例えば、35%より小さい場合である。スーパースライスA(SS0)について、マルチサイクル演算(MC Arth)命令の比率または割合は、カウンタ412およびカウンタ411のカウント値を見ることによって計算することができ、ストア、デュアルポートロード、分岐およびSX(単純)命令の比率または割合は、カウンタ414およびカウンタ411の値を見ることによって計算することができ、MMA命令の比率または割合は、カウンタ413およびカウンタ411のカウント値を見ることによって計算することができることが理解され得る。比率もしくは割合またはその両方は、スーパースライスA(SS0)においてそれぞれのカウンタ411~414を使用するのと同じ方法でそれぞれのカウンタ416~419の値を使用することにより、スーパースライスB(SS1)について計算することができる。閾値の割合/比率の値は、例示した値とは異なる可能性があり、部分的にはプロセッサのアーキテクチャや設計上の考慮事項の問題となることが理解されよう。カウンタからの数値は、比率や割合とは対照的に、様々なパイプもしくは実行ユニットまたはその両方の作業負荷を決定するための条件もしくは閾値またはその両方を設定するために使用することができる。
【0048】
単純算術命令を処理するための主要な実行ユニットが、マルチサイクル算術命令もしくはMMA命令またはその両方からのような重い算術/計算作業負荷を有する場合に、単純算術命令、例えば、addi命令を、実行のために代替の実行ユニットに選択的にルーティングすることによって、実行ユニット間の作業負荷のバランスをとり、プロセッサ性能を向上させ、プロセッサ待ち時間を減少させることができることが理解され得る。実行パイプラインもしくは実行ユニットまたはその両方の作業負荷の選択的ルーティングおよびバランシングの実装は、様々な作業負荷を計算および決定するカウンタを使用し、異なる命令を異なる実行パイプラインもしくは実行ユニットまたはその両方に向ける閾値(調整可能、固定)を使用して達成することができる。
【0049】
図9は、プロセッサ性能を向上させるために、複数の実行パイプラインもしくは実行ユニットまたはその両方で実行可能な単純算術命令を特定の実行パイプラインもしくは実行ユニットまたはその両方に選択的にルーティングする特定の実施形態を含む、実施形態において、プロセッサ内の作業負荷または実行パイプライン、もしくは実行ユニット、またはその両方を調整することを含む、プロセッサ内でデータ、例えば、実行命令を処理する方法を図示し、説明する実施形態による例示的なフローチャートである。方法900は、便宜上記載されており、一連のステップもしくは多数のステップまたはその両方を含むものとして本開示を限定する意図で記載されているわけではないが、プロセスは、一連のステップとして実行される必要はなく、もしくは、ステップは、
図9に関して示され、記載された順序で実行される必要はなく、またはその両方であってもよいが、プロセスは、統合されてもよく、もしくは、1または複数のステップが、一緒に実行されてもよく、同時に実行されてもよく、またはその両方であってよく、あるいは、ステップは、開示された順序で実行されてもよく、または、代替の順序で実行されてもよいことを理解されたい。
【0050】
図9の方法900は、複数の実行パイプラインもしくは実行ユニットまたはその両方を有するプロセッサにおいて、プロセッサの性能およびスループットを改善するために、プロセッサ内の作業負荷を調整し、バランスをとることに関する。905において、命令のタイプ、例えばPower ISAアーキテクチャにおけるaddi命令のような単純算術命令を実行することができる複数のパイプラインもしくは実行ユニットまたはその両方を有するプロセッサが提供される。他のプロセッサアーキテクチャには、異なる命令が適用可能であろう。プロセス900は、命令のタイプを実行可能な第1の処理パイプラインもしくは第1の実行ユニットまたはその両方と、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方との両方を参照して説明されるが、プロセッサ内の2つ以上の処理パイプラインもしくは2つ以上の実行ユニットまたはその両方が、命令のタイプを実行可能である場合があり、2つ以上の処理パイプラインもしくは2つ以上の実行ユニットまたはその両方の間で作業負荷を調整させる、もしくはバランスさせる、またはその両方であるプロセス900は、かかるプロセッサにも適用可能であることが、当業者には理解され得る。
【0051】
910において、命令のタイプ、例えば単純算術命令を実行することができる第1の処理パイプラインもしくは実行ユニットまたはその両方の作業負荷が計算される。議論を容易にするために、プロセス900を単純算術命令を参照して説明するが、プロセス900が、複数の処理パイプラインもしくは実行ユニットまたはその両方によって実行可能な他の命令のタイプに適用可能であることは、当業者には理解されるであろう。実施例では、プロセス900は、単純算術命令を実行可能な第1の処理パイプラインとしてのスライスComputeパイプ、および単純算術命令を実行可能な第1の実行ユニットとしてのFX実行ユニット(例えば、第1の処理パイプライン内)を参照して説明される。実施例では、プロセス900は、単純算術命令を実行可能な第2の処理パイプラインとしてのStore/Branch/Simpleパイプ、および単純算術命令を実行可能な第2の実行ユニットとしてのSX実行ユニット(例えば、第2の処理パイプライン内)を参照して説明される。
【0052】
1または複数の実装において、915において、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方の作業負荷は、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方において実行されるすべての命令をカウントすることによって計算され得る。1つのアプローチでは、915において、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方の作業負荷は、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方によって実行される命令のサブグループをカウントすることによって計算され得ることが理解され得る。例えば、915において、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方の作業負荷は、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方によって実行される命令のサブグループであるマルチサイクル算術命令をカウントすることによって計算することができる。さらなるアプローチでは、915において、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方の作業負荷は、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方によって実行される命令の複数のサブグループをカウントすることによって計算され得る。例えば、915において、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方の作業負荷は、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方によって実行される命令の第1のサブグループであるマルチサイクル算術命令をカウントすることによって、および第1の処理パイプラインもしくは第1の実行ユニットまたはその両方によって実行される命令の第2のサブグループである行列乗算アキュムレータ(MMA)命令をカウントすることによって、計算され得る。プロセッサ、処理パイプライン、もしくは実行ユニットまたはその組み合わせ内の様々な命令もしくは命令グループ/サブグループまたはその両方をカウントするために、1または複数のカウンタが提供され得ることが理解され得る。
【0053】
1または複数の実施形態において、920では、プロセッサまたは処理スライスにおいて実行されるすべての命令が計算され、925において、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方において実行される命令の比率または割合が計算されるであろう。1つのアプローチでは、925において、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方において実行された命令の比率または割合は、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方において実行された命令(または命令のサブグループ)の数を、それぞれのプロセッサ/処理スライスにおいて処理された命令の総数で割ることによって決定されるであろう。実施形態による915および920におけるカウントは、プロセッサ/処理スライスの固定数またはローリング数「N」命令にわたって決定される。例えば、915における第1の処理パイプラインもしくは第1の実行ユニットまたはその両方における命令のカウント、920におけるプロセッサもしくは処理スライスまたはその両方において実行されるすべての命令のカウント、ならびに925における比率もしくは割合またはその両方の計算/決定は、固定された64個の命令間隔にわたって、またはローリングする64個の命令間隔にわたって行うことができる。
【0054】
実施形態によれば、第1の処理パイプラインもしくは実行ユニットまたはその両方で実行される命令(または命令のサブグループ)の比率もしくは割合またはその両方を使用する代わりに、命令(または命令のサブグループ)の数「N」が915でカウントされ、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方の作業負荷を決定/計算するための基礎として910で使用され得ることが理解され得る。
【0055】
910で第1の処理パイプラインもしくは第1の実行ユニットまたはその両方の作業負荷を計算した後(例えば、915/925で命令(または命令のグループ)の数/比率/割合を計算した後)、プロセス900は930に続き、1または複数のアプローチに従って、命令のタイプ、例えば単純算術命令を実行可能な第2の処理パイプラインもしくは第2の実行ユニットまたはその両方の作業負荷が計算される、もしくは決定される、またはその両方である。1または複数の実装では、935において、第2の処理パイプライン(例えば、Store/Branch/Simpleパイプ)もしくは第2の実行ユニット(例えば、SX実行ユニット)またはその両方の作業負荷は、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方において実行されるすべての命令をカウントすることによって計算され得る。1つのアプローチにおいて、935において、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方の作業負荷は、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方によって実行される命令のサブグループをカウントすることによって計算され得ることが理解され得る。例えば、935において、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方の作業負荷は、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方によって実行される命令のサブグループである、ストア命令、デュアルポートロード命令、分岐命令、およびSX命令をカウントすることによって計算され得る。さらなるアプローチでは、935において、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方の作業負荷は、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方によって実行される命令の複数のサブグループをカウントすることによって計算され得る。プロセッサ、処理パイプライン、もしくは実行ユニット、またはその組み合わせ内の様々な命令もしくは命令グループ/サブグループまたはその両方をカウントするために、1または複数のカウンタが提供され得ることが理解され得る。
【0056】
1または複数の実施形態では、940において、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方において実行される命令の比率または割合が計算されるであろう。1つのアプローチでは、940において、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方において実行された命令の比率または割合は、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方において実行された命令(または命令のサブグループ)の数を、それぞれのプロセッサ/処理スライスにおいて処理された命令の総数で割ることによって決定されるであろう。それぞれのプロセッサ/処理スライスにおいて処理された命令の総数は、920において決定された。実施形態による935および920におけるカウントは、プロセッサ/処理スライスの固定数またはローリング数「N」命令にわたって決定される。例えば、935における第2の処理パイプラインもしくは第2の実行ユニットまたはその両方における命令のカウント、920におけるプロセッサもしくは処理スライスまたはその両方において実行されたすべての命令のカウント、ならびに940における比率もしくは割合またはその両方の計算/決定は、固定された64個の命令間隔にわたって、またはローリングする64個の命令間隔にわたって行うことができる。
【0057】
実施形態によれば、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方で実行される命令(または命令のサブグループ)の比率もしくは割合またはその両方を使用する代わりに、命令(または命令のサブグループ)の数「N」が935でカウントされ、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方の作業負荷を決定/計算するための基礎として930で使用され得ることが理解され得る。
【0058】
930で第2の処理パイプラインもしくは第2の実行ユニットまたはその両方の作業負荷を計算した後(例えば、935/940で命令(または命令グループ)の数/比率/割合を計算した後)、プロセス900は945に続き、1または複数のアプローチに従って、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方の作業負荷が、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方の作業負荷と比較される。1または複数の実装において、950において、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方において実行される命令(または命令のグループ/サブグループ)の比率/割合/数が、第1の閾値と比較される。例えば、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方において処理/実行される命令の第1のサブグループの比率もしくは割合またはその両方、例えば、FXユニットによってComputeパイプ内で実行されるマルチサイクル演算命令は、第1の閾値と比較され、第1の閾値は、例えば、20%、30%、または40%であり得る。別の例では、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方で処理/実行される命令の第1のサブグループの数「N」、例えば、FXユニットによってComputeパイプ内で実行されるマルチサイクル算術命令は、第1の閾値と比較され、第1の閾値は、例えば、プロセッサもしくは処理スライスまたはその両方によって実行される命令の例えば64サイクルの固定またはローリング間隔のうちの5番、25番、32番、もしくは45番、またはその組み合わせであり得る。第1の閾値は、上記の例とは異なる場合があり、第1の閾値は、固定される場合があり、予め決定される場合があり、プログラム可能である場合があり、もしくは調整される場合があり、またはその組み合わせである場合があり、プロセッサおよび設計の考慮事項に部分的に依存することが理解され得る。一態様において、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方において実行される命令(または命令のグループ/サブグループ)の比率/割合/数を950における第1の閾値と比較することは、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方のためのベースライン作業負荷を提供し、それ以下では、命令のタイプ、例えば、単純算術命令が、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方において処理され、それ以上では、プロセッサが、命令のタイプ、例えば、単純算術命令を、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方において実行する可能性がある。
【0059】
1または複数の実装では、955において、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方において実行される命令(または命令のグループ/サブグループ)の比率/割合/数が、第2の閾値と比較される。例えば、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方において処理/実行される命令の第1のサブグループ、例えば、SXユニットによってStore/Branch/Simpleパイプにおいて実行されるストア命令、デュアルポートロード命令、分岐命令、SX命令の比率もしくは割合またはその両方が、第2の閾値と比較され、第2の閾値は、例えば、15%、25%、または35%であり得る。別の実施例では、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方で処理/実行される命令の第1のサブグループの数「N」、例えば、SXユニットによってStore/Branch/Simpleパイプで実行されるマルチサイクル算術命令は、第2の閾値と比較され、第2の閾値は、例えば、プロセッサもしくは処理スライスまたはその両方によって実行される64命令の例えば固定またはローリング間隔のうちの15番、32番、45番、もしくは50番またはその組み合わせであり得る。第2の閾値は、上記の例とは異なる場合があり、第2の閾値は、固定される場合があり、予め決定される場合があり、プログラム可能である場合があり、もしくは調整される場合があり、またはその組み合わせである場合があり、プロセッサおよび設計の考慮事項に部分的に依存することが理解され得る。一態様において、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方において実行される命令(または命令のグループ/サブグループ)の比率/割合/数を955において第2の閾値と比較することは、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方のベースライン作業負荷を提供し、それ以下では、命令のタイプ、例えば、単純算術命令は、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方において処理され、それ以上では、プロセッサは、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方において命令のタイプ、例えば単純算術命令を実行する。
【0060】
945において、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方の作業負荷を第2の処理パイプラインもしくは第2の実行ユニットまたはその両方と比較した後(例えば、950/955において、第1および第2の処理パイプラインもしくは第1および第2の実行ユニットまたはその両方おいて実行される命令(または命令のグループ)の比率/割合/数を第1および第2の閾値と比較した後)、プロセス900は960に続き、1または複数のアプローチに従って、第1または第2の処理パイプラインもしくは第1または第2の実行ユニットまたはその両方が、第1および第2のパイプラインもしくは第1および第2の実行ユニットまたはその両方の作業負荷に基づいて、命令の第1のタイプ、例えば単純算術命令を実行するように選択される。
【0061】
一例では、960において、第1の処理パイプライン(例えば、Computeパイプ)もしくは第1の実行ユニット(例えば、FXユニット)またはその両方は、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方の作業負荷(例えば、925/950において決定される)が第1の閾値未満、例えば、20%未満であることに応答して、第1のタイプの命令、例えば、単純算術命令を処理するように選択される。第1の閾値は、上記の20%の例とは異なることができ、第1の閾値は、固定された、予め決められた、プログラム可能な、もしくは調整可能な、またはその組み合わせである比率/割合/数であることができ、プロセッサおよび設計構成に部分的に依存することが理解され得る。別の実施例では、960において、第2の処理パイプライン(例えば、Store/Branch/Simpleパイプ)もしくは第2の実行ユニット(例えば、SXユニット)またはその両方は、第1の処理パイプラインもしくは第1の実行ユニットまたはその両方の作業負荷(例えば925/950で決定される)が第1の閾値を超える、例えば20%を超え、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方の作業負荷(例えば940/955で決定される)が第2の閾値未満であり、例えば15%未満であることに応答して、第1のタイプの命令、例えば単純算術命令を処理/実行するように選択される。第2の閾値は、上記の15%の例とは異なることができ、第2の閾値は、固定された、予め決められた、プログラム可能な、もしくは調整可能な、またはその組み合わせである比率/割合/数であることができ、プロセッサおよび設計構成に部分的に依存することが理解され得る。上述したように、第1および第2の閾値は、比率または割合の代わりに数値として表すことができることをさらに理解することができる。
【0062】
代替的に、もしくは追加的に、またはその両方で、960において、第1もしくは第2の処理パイプライン、もしくは第1もしくは第2の実行ユニット、またはその両方は、第1もしくは第2またはその両方のパイプラインのみの作業負荷、もしくは、第1もしくは第2またはその両方の実行ユニットのみの作業負荷、またはその両方に基づいて、命令の第1のタイプ、例えば単純算術命令を実行するように選択され得る。例えば、960において、第1もしくは第2の処理パイプライン、もしくは第1もしくは第2の実行ユニット、またはその両方は、第1の処理パイプライン/実行ユニットのみの作業負荷、または第2の処理パイプライン/実行ユニットのみの作業負荷に基づいて、命令のタイプを実行するように選択され得る。実施形態によれば、960において、第2の処理パイプライン(例えば、Store/Branch/Simpleパイプ)もしくは第2の実行ユニット(例えば、SXユニット)、またはその両方は、第1の処理パイプライン(例えば、Computeパイプ)もしくは1の実行ユニット(例えば、FXユニット)またはその両方が、第3の閾値を超える命令の第2のサブグループ、例えば、行列乗算アキュムレータ(MMA)命令を処理/実行することに応答して、命令のタイプ、例えば、単純算術命令を実行する。MMA命令は一般に多くの計算リソースを必要とするので、第1の処理パイプラインもしくは第1の実行ユニット(例えば、FXユニット)またはその両方が第3の閾値を超えるMMA命令を実行している状況では、プロセッサは、第2の処理パイプラインもしくは第2の実行ユニットまたはその両方において命令の第1のタイプ、例えば、単純算術命令を処理する。
【0063】
第3の閾値は、例えば、5%、10%、または15%とすることができる。別の例では、第3の閾値は、例えば、プロセッサもしくは理スライスまたはその両方によって実行される64個の命令の固定またはローリング間隔のうちの5番、15番、または25番のような数値とすることができる。第3の閾値は、上記の例とは異なる場合があり、第3の閾値は、固定される場合があり、予め決定される場合があり、プログラム可能である場合があり、もしくは調整される場合があり、またはその組み合わせである場合があり、プロセッサおよび設計上の考慮事項に部分的に依存することが理解され得る。1または複数の処理パイプラインもしくは実行ユニットまたはその両方において実行可能な命令の第1のタイプを実行するために、960においてどの処理パイプラインもしくは実行ユニットまたはその両方が選択され得るかを決定することに、複数の条件もしくは基準またはその両方が置かれ得ることが理解され得る。したがって、異なる処理パイプラインもしくは実行ユニットまたはその両方を選択するために上で議論された基準/条件のうちの1または複数が、単独で、もしくは様々な組み合わせで、またはその両方で使用され得ることが理解され得る。
【0064】
したがって、フローチャート図のブロックは、指定された機能を実行するための手段の組み合わせ、指定された機能を実行するためのステップの組み合わせ、および指定された機能を実行するためのプログラム命令手段をサポートする。また、フローチャート図の各ブロック、およびフローチャート図のブロックの組み合わせは、指定された機能またはステップを実行する特別な目的のハードウェアベースのコンピュータシステムによって、または特別な目的のハードウェアとコンピュータ命令との組み合わせによって実施できることが理解されるであろう。
【0065】
本発明は、任意の可能な技術詳細レベルで統合されたシステム、方法もしくはコンピュータプログラム製品またはそれらの組み合せとすることができる。コンピュータプログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を記憶したコンピュータ可読記憶媒体を含んでよい。
【0066】
コンピュータ可読記憶媒体は、命令実行装置によって使用される命令を保持し、記憶することができる有形の装置とすることができる。コンピュータ可読記憶媒体は、一例として、電子記憶装置、磁気記憶装置、光学記憶装置、電磁記憶装置、半導体記憶装置またはこれらの適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な一例としては、ポータブルコンピュータディスケット、ハードディスク、RAM、ROM、EPROM(またはフラッシュメモリ)、SRAM、CD-ROM、DVD、メモリスティック、フロッピーディスク、パンチカードまたは溝内の隆起構造などに命令を記録した機械的に符号化された装置、およびこれらの適切な組み合せが挙げられる。本明細書で使用されるコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波管もしくは他の伝送媒体を介して伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、またはワイヤを介して送信される電気信号のような、一過性の信号それ自体として解釈されるべきではない。
【0067】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理装置に、または、ネットワーク(例えば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク、もしくはワイヤレスネットワークまたはその組み合わせ)を介して外部コンピュータまたは外部記憶装置にダウンロードすることができる。ネットワークは、銅線伝送ケーブル、光伝送ファイバー、無線伝送、ルーター、ファイアウォール、スイッチ、ゲートウェイコンピュータ、もしくはエッジサーバーまたはその組み合わせで構成される。各コンピューティング/処理装置のネットワークアダプタカードまたはネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理装置内のコンピュータ可読記憶媒体に格納するためにコンピュータ可読プログラム命令を転送する。
【0068】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、統合回路のための構成データ、またはSmAlltAlk、C++などのオブジェクト指向プログラミング言語と「C」プログラミング言語や類似のプログラミング言語などの手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで記述されたソースコードまたはオブジェクトコードのいずれかであってよい。コンピュータ可読プログラム命令は、スタンドアロンソフトウェアパッケージとして、完全にユーザのコンピュータ上で、または部分的にユーザのコンピュータ上で実行可能である。あるいは、部分的にユーザのコンピュータ上でかつ部分的にリモートコンピュータ上で、または完全にリモートコンピュータまたはサーバ上で実行可能である。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続され、または(例えば、インターネットサービスプロバイダーを使用したインターネット経由で)外部コンピュータに接続されてよい。いくつかの実施形態では、例えば、プログラマブルロジック回路、フィールドプログラマブルゲートアレイ(FPGA)、またはプログラマブルロジックアレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用してパーソナライズすることにより、コンピュータ可読プログラム命令を実行することができる。
【0069】
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータプログラム製品のフローチャート図もしくはブロック図またはその両方を参照して本明細書に記載されている。フローチャート図もしくはブロック図またはその両方の各ブロック、およびフローチャート図もしくはブロック図またはその両方のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されよう。
【0070】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令がフローチャートもしくはブロック図またはその両方の1または複数のブロックで指定された機能/動作を実装するための手段を生成するように、機械を生成するために汎用コンピュータ、専用コンピュータのプロセッサまたは他のプログラム可能なデータ処理装置に提供されることができる。これらのコンピュータ可読プログラム命令はまた、フローチャートもしくはブロック図またはその両方の1または複数のブロックで指定された機能/行為の態様を実装する命令を含む生成品の1つを命令が記憶されたコンピュータ可読記憶媒体が構成するように、コンピュータ、プログラム可能なデータ処理装置、もしくは特定の方法で機能する他のデバイスまたはその組み合わせに接続可能なコンピュータ可読記憶媒体の中に記憶されることができる。
【0071】
コンピュータ、他のプログラム可能な装置、または他のデバイス上でフローチャートもしくはブロック図またはその両方の1または複数のブロックで指定された機能/行為を実行する命令のように、コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラム可能な装置、または他のデバイス上で一連の操作ステップを実行し、コンピュータ実装された過程を生成することができる。
【0072】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータプログラム製品が実行可能な実装の構成、機能、および動作を示している。これに関して、フローチャートまたはブロック図の各ブロックは、モジュール、セグメント、または命令の一部を表してよく、これは、指定された論理機能を実装するための1または複数の実行可能命令を構成する。いくつかの代替の実施形態では、ブロックに示されている機能は、図に示されている順序とは異なる場合がある。例えば、連続して示される2つのブロックは、実際には、実質的に同時に実行されるか、またはブロックは、関係する機能に応じて逆の順序で実行される場合がある。ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方のブロックの組み合わせは、指定された機能または動作を実行する、または特別な目的のハードウェアとコンピュータ命令の組み合わせを実行する特別な目的のハードウェアベースのシステムによって実装できることにも留意されたい。
【0073】
さらに、様々な実施形態によるシステムは、プロセッサと、プロセッサと一体化され、もしくはプロセッサによって実行可能な、またはその両方であるロジックとを含むことができ、ロジックは、本明細書に記載される1または複数のプロセスステップを実行するように構成される。プロセッサと一体化されるとは、プロセッサが、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)などのハードウェアロジックとして組み込まれたロジックを有することを意味する。プロセッサによって実行可能とは、ロジックがハードウェアロジックであること、ファームウェア、オペレーティングシステムの一部、アプリケーションプログラムの一部などのソフトウェアロジックであること、またはプロセッサによってアクセス可能であり、プロセッサによる実行時にプロセッサに何らかの機能を実行させるように構成されたハードウェアロジックとソフトウェアロジックの組み合わせであることを意味する。ソフトウェアロジックは、当該技術分野で知られているように、任意のメモリタイプのローカルメモリもしくはリモートメモリまたはその両方に格納することができる。ソフトウェアプロセッサモジュール、もしくはASIC、FPGA、中央処理装置(CPU)、集積回路(IC)、グラフィック処理装置(GPU)、またはその組み合わせなどのハードウェアプロセッサなど、当技術分野で公知の任意のプロセッサを使用することができる。
【0074】
前述のシステムもしくは方法論またはその両方のさまざまな特徴を任意の方法で組み合わせて、上で提示した説明から複数の組み合わせを作成できることは明らかであろう。
【0075】
本発明の実施形態は、オンデマンドでサービスを提供するために顧客に代わって展開されるサービスの形態で提供され得ることがさらに理解されよう。
【0076】
本発明の様々な実施形態の説明は、例示の目的で提示されているが、網羅的であることを意図するものではなく、開示される実施形態に限定されることを意図するものでもない。記載される実施形態の範囲から逸脱することなく、多くの修正および変更が可能であることは当業者には明らかであろう。本明細書で使用される用語は、実施形態の原理、市場で見られる技術に対する実際の適用または技術的改善を最もよく説明するため、または当業者が本明細書に記載の実施形態を理解できるようにするために選択された。
【手続補正書】
【提出日】2024-01-26
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
情報を処理するためのプロセッサであって、前記プロセッサは、
各々が命令を処理するための1または複数の実行ユニットを有する少なくとも2つの処理パイプラインであって、前記少なくとも2つの処理パイプラインのうちの少なくとも第1の処理パイプラインおよび第2の処理パイプラインは、第1の命令タイプを実行可能である、少なくとも2つの処理パイプラインと、
前記第1の処理パイプラインと前記第2の処理パイプラインのいずれで前記第1の命令タイプを実行するかを決定するための命令をデコードする命令デコードユニットと、を備え、
前記プロセッサは、
第1の処理パイプライン作業負荷、第2の処理パイプライン作業負荷、およびそれらの組み合わせからなる作業負荷グループの少なくとも1つを計算することと、
前記作業負荷グループの少なくとも1つに基づいて、前記第1の命令タイプを実行する前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することと、
を実行するように構成される、プロセッサ。
【請求項2】
前記プロセッサは、前記第1の処理パイプライン作業負荷を計算し、前記第2の処理パイプライン作業負荷を計算するようにさらに構成される、請求項1に記載のプロセッサ。
【請求項3】
前記第1の処理パイプライン作業負荷を計算することは、前記第1の処理パイプラインにおいて実行される命令の少なくとも第1のサブグループの数をカウントすることを含む、請求項2に記載のプロセッサ。
【請求項4】
前記第1の処理パイプラインの作業負荷を計算することは、
前記少なくとも2つの処理パイプラインによって実行されたすべての前記命令をカウントすることと、
命令の前記第1のサブグループの前記数、前記少なくとも2つの処理パイプラインによって実行されるすべての前記命令、およびそれらの組み合わせからなるグループの少なくとも1つに基づいて、前記第1の処理パイプラインにおいて実行される命令の前記第1のサブグループの割合を決定することと、
を含む、請求項3に記載のプロセッサ。
【請求項5】
前記第2の処理パイプライン作業負荷を計算することは、前記第2の処理パイプラインにおいて実行される命令の少なくとも第2のサブグループの数をカウントすることを含む、請求項2に記載のプロセッサ。
【請求項6】
前記第2の処理パイプライン作業負荷を計算することは、
前記少なくとも2つの処理パイプラインによって実行されたすべての前記命令をカウントすることと、
命令の前記第2のサブグループの前記数、前記少なくとも2つの処理パイプラインによって実行されるすべての前記命令、およびそれらの組み合わせからなるグループの少なくとも1つに基づいて、前記第2の処理パイプラインにおいて実行される命令の前記第2のサブグループの割合を決定することと、
を含む、請求項5に記載のプロセッサ。
【請求項7】
前記作業負荷グループの少なくとも1つに基づいて前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することは、前記第1の処理パイプライン作業負荷と
前記第2の処理パイプライン作業負荷とを比較することを含む、請求項1に記載のプロセッサ。
【請求項8】
前記作業負荷グループの少なくとも1つに基づいて前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することは、前記第1の処理パイプライン作業負荷を計算することと、前記第1の処理パイプライン作業負荷を第1の閾値と比較することとを含み、前記第1の閾値は、数、割合、比率、およびそれらの組み合わせからなる第1の閾値グループの少なくとも1つである、請求項7に記載のプロセッサ。
【請求項9】
前記作業負荷グループの少なくとも1つに基づいて、前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することは、
前記第1の処理パイプライン作業負荷が前記第1の閾値未満であることに応答して、前記第1の命令タイプを実行する前記第1の処理パイプラインを選択することを含む、請求項8に記載のプロセッサ。
【請求項10】
前記作業負荷グループの少なくとも1つに基づいて、前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することは、
前記第1の処理パイプライン作業負荷を計算することと、
前記第2の処理パイプライン作業負荷を計算することと、
前記第1の処理パイプライン作業負荷を第1の閾値と比較することと、
前記第2の処理パイプライン作業負荷を第2の閾値と比較することと、
前記第1の処理パイプライン作業負荷が前記第1の閾値を超えること、および前記第2の処理パイプライン作業負荷が前記第2の閾値未満であることの両方に応答して、前記第1の命令タイプを実行する前記第2の処理パイプラインを選択することと、
前記第1の処理パイプライン作業負荷が前記第1の閾値以下であること、かつ、前記第1の処理パイプライン作業負荷が前記第1の閾値を超えることおよび前記第2の処理パイプライン作業負荷が前記第2の閾値未満であることの両方、に応答して、前記第1の命令タイプを実行する前記第1の処理パイプラインを選択することと、
を含む、請求項1に記載のプロセッサ。
【請求項11】
前記第1の処理パイプライン作業負荷の計算および前記第2の処理パイプライン作業負荷の計算は、「N」命令の固定間隔またはローリング間隔にわたって実行される、請求項10に記載のプロセッサ。
【請求項12】
前記第1の処理パイプライン作業負荷を計算することは、前記第1の処理パイプラインにおいて実行される命令の第3のサブグループの数をカウントすることと、命令の前記第3のサブグループの前記数が第3の閾値を超えているか否かを判定することと、前記第1の処理パイプラインにおいて実行される命令の前記第3のサブグループの前記数が前記第3の閾値を超えていることに応答して、前記第1の命令タイプを実行する前記第2の処理パイプラインを選択することと、をさらに含む、請求項3に記載のプロセッサ。
【請求項13】
前記第1の命令タイプは、単純算術命令である、請求項1に記載のプロセッサ。
【請求項14】
前記プロセッサは、2つの実行スライスを含む少なくとも1つのスーパースライスを含み、各実行スライスは、前記少なくとも2つの処理パイプラインを含み、前記第1の処理パイプラインは、単純算術命令を実行するように構成された算術論理演算ユニット(ALU)実行ユニットを有するComputeパイプであり、前記第2の処理パイプラインは、少なくとも単純算術命令を実行するように構成された単純(SX)実行ユニットを有するStore/Branch/Simpleパイプであり、前記第1の命令タイプは単純算術命令であり、
命令デコードユニットは、命令の第1のサブグループの数をカウントする第1のカウンタを含み、命令の前記第1のサブグループが、前記Computeパイプ内で実行される少なくともマルチサイクル演算命令を含み、
前記プロセッサは、
前記第1のカウンタを使用して、命令の前記第1のサブグループの数をカウントすることと、
命令の前記第1のサブグループの数を第1の閾値と比較することと、
命令の前記第1のサブグループの前記数が前記第1の閾値未満であることに応答して、前記単純算術命令を実行する前記Computeパイプを選択することと、
命令の前記第1のサブグループが前記第1の閾値以上であることに応答して、前記単純算術命令を実行する前記Store/Branch/Simpleパイプを選択することと、
を実行するように構成される、請求項1に記載のプロセッサ。
【請求項15】
前記命令デコードユニットは、さらに、
前記Store/Branch/Simpleパイプ内で実行される命令の第2のサブグループの数をカウントする第2のカウンタであって、命令の前記第2のサブグループは、ストア命令、デュアルポートロード命令、分岐命令、SX命令、およびこれらの組み合わせからなる単純グループのうちの少なくとも1つを含む、第2のカウンタと、
前記少なくとも1つのスーパースライスで処理される命令の数をカウントする第3のカウンタと、を備え、
前記プロセッサは、
前記Computeパイプのパイプラインで実行される命令の前記第1のサブグループの前記数と、前記第3のカウンタによってカウントされる命令の数とに基づいて、前記Computeパイプで実行される命令の前記第1のサブグループの第1の比率を計算することと、
前記第2のカウンタを使用して、命令の前記第2のサブグループの数をカウントすることと、
前記Store/Branch/Simpleパイプで実行された命令の前記第2のサブグループの前記数と、前記第3のカウンタによってカウントされた命令の前記数とに基づいて、前記Store/Branch/Simpleパイプで実行された命令の前記第2のサブグループの第2の比率を計算することと、
前記第1の比率を第1の比率閾値と比較することと、
前記第2の比率を第2の比率閾値と比較することと、
前記第1の比率が前記第1の比率閾値未満であること、または前記第2の比率が前記第2の比率閾値以上であることに応答して、前記単純算術命令を実行する前記Computeパイプを選択することと、
前記第1の比率が第1の比率閾値以上であることに応答し、さらに前記第2の比率が前記第2の比率閾値未満であることに応答して、前記単純算術命令を実行する前記Store/Branch/Simpleパイプを選択することと、
を実行するように構成される、
請求項14に記載のプロセッサ。
【請求項16】
前記命令デコードユニットは、さらに、
前記Computeパイプ内で実行される命令の第3のサブグループの数をカウントする第4のカウンタであって、命令の前記第3のサブグループは、行列乗算アキュムレータ命令のうちの少なくとも1つを含む、第4のカウンタと、を含み、
前記プロセッサは、
前記第4のカウンタを使用して、命令の前記第3のサブグループの前記数をカウントすることと、
前記スーパースライスのComputeパイプで実行される命令の前記第3のサブグループの前記数、前記第3のカウンタによってカウントされる命令の前記数、およびそれらの組み合わせからなるグループの少なくとも1つに基づいて、前記Computeパイプで実行される命令の前記第3のサブグループの第3の比率を計算することと、
前記第3の比率を第3の比率閾値と比較することと、
前記第1の比率と前記第1の比率閾値との前記比較、または前記第2の比率と前記第2の比率閾値との前記比較に関係なく、前記第3の比率が前記第3の比率閾値を超えることに応答して、前記単純算術命令を実行する前記Store/Branch/Simpleパイプを選択することと、
を実行するように構成される、請求項15に記載のプロセッサ。
【請求項17】
プロセッサで情報を処理するための方法であって、前記方法は、
命令を処理するための1または複数の実行ユニットを有する少なくとも2つの処理パイプラインを提供することであって、前記少なくとも2つの処理パイプラインの少なくとも第1の処理パイプラインおよび第2の処理パイプラインは、第1の命令タイプを実行することができる、提供することと、
前記第1の処理パイプライン作業負荷、前記第2の処理パイプライン作業負荷、およびそれらの組み合わせからなる作業負荷グループの少なくとも1つを計算することと、
前記作業負荷グループの少なくとも1つに基づいて、前記第1の命令タイプを実行する前記第1の処理パイプラインまたは前記第2の処理パイプラインを選択することと、
を含む、方法。
【請求項18】
前記第1の処理パイプライン作業負荷を計算することは、前記第1の処理パイプラインにおいて実行される命令の少なくとも第1のサブグループの数をカウントすることを含み、
前記方法は、さらに、
前記第1の処理パイプライン作業負荷が第1の閾値未満であることに応答して、前記第1の命令タイプを実行する前記第1の処理パイプラインを選択することを含む、
請求項17に記載の方法。
【請求項19】
前記第2の処理パイプライン作業負荷を計算することは、前記第2の処理パイプラインにおいて実行される命令の少なくとも第2のサブグループの数をカウントすることを含み、
前記方法は、さらに、
前記第1の処理パイプライン作業負荷が第1の閾値以上であり、前記第2の処理パイプライン作業負荷が第2の閾値未満であることに応答して、前記第1の命令タイプを実行する前記第2の処理パイプラインを選択すること、を含む、
請求項18に記載の方法。
【請求項20】
前記第1の処理パイプライン作業負荷を計算することは、前記第1の処理パイプラインにおいて実行される命令の少なくとも第1のサブグループの数をカウントすることを含み、
第2の処理パイプライン作業負荷を計算することは、前記第2の処理パイプラインにおいて実行される命令の少なくとも第2のサブグループの数をカウントすることを含み、
前記方法は、さらに、
命令の前記第1のサブグループとは異なる、前記第1の処理パイプラインにおいて実行される命令の少なくとも第3のサブグループの数をカウントすることと、
命令の前記第3のサブグループが第3の閾値以下であること、前記第1の処理パイプライン作業負荷が第1の閾値以下であること、かつ、前記第1の処理パイプライン作業負荷が前記第1の閾値を超えることおよび前記第2の処理
パイプライン作業負荷が第2の閾値以上であることの両方、に応答して、前記第1の命令タイプを実行する前記第1の処理パイプラインを選択することと、
命令の少なくとも前記第3のサブグループの前記数が前記第3の閾値を超えること、かつ、前記第1の処理作業負荷の前記数が前記第1の閾値を超えることおよび前記第2の処理パイプライン作業負荷が第2の閾値未満であること、に応答して、
第2の命令タイプを実行する前記第2の処理パイプラインを選択することと、
を含む、請求項17に記載の方法。
【請求項21】
コンピュータプログラムであって、前記プログラムがコンピュータ上で実行されるとき、請求項17から20のいずれか1項に記載の方法ステップを実行するように適合されたプログラムコードを含む、コンピュータプログラム。
【国際調査報告】