特許第6744199号(P6744199)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧
特許6744199命令を処理するための複数の実行ユニットを備えるプロセッサ、プロセッサを使用して命令を処理するための方法、およびプロセッサの設計プロセスにおいて使用される設計構造
<>
  • 特許6744199-命令を処理するための複数の実行ユニットを備えるプロセッサ、プロセッサを使用して命令を処理するための方法、およびプロセッサの設計プロセスにおいて使用される設計構造 図000002
  • 特許6744199-命令を処理するための複数の実行ユニットを備えるプロセッサ、プロセッサを使用して命令を処理するための方法、およびプロセッサの設計プロセスにおいて使用される設計構造 図000003
  • 特許6744199-命令を処理するための複数の実行ユニットを備えるプロセッサ、プロセッサを使用して命令を処理するための方法、およびプロセッサの設計プロセスにおいて使用される設計構造 図000004
  • 特許6744199-命令を処理するための複数の実行ユニットを備えるプロセッサ、プロセッサを使用して命令を処理するための方法、およびプロセッサの設計プロセスにおいて使用される設計構造 図000005
  • 特許6744199-命令を処理するための複数の実行ユニットを備えるプロセッサ、プロセッサを使用して命令を処理するための方法、およびプロセッサの設計プロセスにおいて使用される設計構造 図000006
  • 特許6744199-命令を処理するための複数の実行ユニットを備えるプロセッサ、プロセッサを使用して命令を処理するための方法、およびプロセッサの設計プロセスにおいて使用される設計構造 図000007
  • 特許6744199-命令を処理するための複数の実行ユニットを備えるプロセッサ、プロセッサを使用して命令を処理するための方法、およびプロセッサの設計プロセスにおいて使用される設計構造 図000008
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6744199
(24)【登録日】2020年8月3日
(45)【発行日】2020年8月19日
(54)【発明の名称】命令を処理するための複数の実行ユニットを備えるプロセッサ、プロセッサを使用して命令を処理するための方法、およびプロセッサの設計プロセスにおいて使用される設計構造
(51)【国際特許分類】
   G06F 9/38 20060101AFI20200806BHJP
【FI】
   G06F9/38 310F
   G06F9/38 370X
【請求項の数】17
【全頁数】19
(21)【出願番号】特願2016-226864(P2016-226864)
(22)【出願日】2016年11月22日
(65)【公開番号】特開2017-102919(P2017-102919A)
(43)【公開日】2017年6月8日
【審査請求日】2019年4月19日
(31)【優先権主張番号】14/956467
(32)【優先日】2015年12月2日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】セドリック、リヒテナウ
(72)【発明者】
【氏名】トーマス、フルーガー
(72)【発明者】
【氏名】ピーター、アルテフォクト
【審査官】 漆原 孝治
(57)【特許請求の範囲】
【請求項1】
命令を処理するための複数の実行ユニットと、実行用の命令を前記実行ユニットのうちの1つに割り当てるための命令デコードおよび発行ロジックとを備えるプロセッサであって、前記プロセッサが、
後続の命令間のレジスタ・アクセス競合を解決するための制御ロジックと、
依存関係キャッシュと
を備え、前記依存関係キャッシュが、
前記命令が実行されることが予定されている実行ユニットを示す実行ユニット・インジケータを前記制御ロジックから受信するための受信ロジックと、
前記受信された実行ユニット・インジケータを格納するために前記受信ロジックに応答する格納ロジックと、
命令用の前記格納された実行ユニット・インジケータを提供するために前記命令デコードおよび発行ロジックからの要求に応答する取得ロジックと
を備え、
前記命令デコードおよび発行ロジックが、前記依存関係キャッシュに命令用の実行ユニット・インジケータを要求し、前記依存関係キャッシュから受信された前記実行ユニット・インジケータに応じて、前記命令を前記実行ユニットのうち対応する1つに割り当てるように構成される、プロセッサ。
【請求項2】
前記制御ロジックがスコアボード制御ロジックである、請求項1に記載のプロセッサ。
【請求項3】
前記依存関係キャッシュの前記格納ロジックも、前記予定された命令に応じて、命令用のインジケータを格納するように構成される、請求項1に記載のプロセッサ。
【請求項4】
命令の実行完了時に、前記命令と依存関係のある命令が認識される、請求項1に記載のプロセッサ。
【請求項5】
前記依存関係キャッシュが、前記認識された命令の依存関係を記録するように構成される、請求項4に記載のプロセッサ。
【請求項6】
前記依存関係キャッシュが、プロセッサのプログラム実行時間または消費電力が減少するように、最適な実行ユニットまたはプロセッサ・コアまたはプロセッサ・スライスまたはプロセッサ・パイプラインを選択するためのユニット選択モジュールを備える、請求項1に記載のプロセッサ。
【請求項7】
前記格納ロジックに書き込むために、前記依存関係キャッシュ内のエントリのアドレスが、第1のマッピング・ユニットによって決定される、請求項1に記載のプロセッサ。
【請求項8】
前記格納ロジックから読み取るために、前記依存関係キャッシュ内のエントリのアドレスが、第2のマッピング・ユニットによって決定される、請求項1に記載のプロセッサ。
【請求項9】
プロセッサを使用して命令を処理するための方法であって、前記プロセッサが実行用の命令を前記実行ユニットのうちの1つに割り当てるための命令デコードおよび発行ロジックを備え、前記方法が、
制御ロジックによって、後続の命令間のレジスタ・アクセス競合を解決するステップと、
依存関係キャッシュを提供するステップと、
前記制御ロジックから、前記依存関係キャッシュで、前記命令が実行されることが予定されている前記実行ユニットを示す実行ユニット・インジケータを受信するステップと、
前記受信された実行ユニット・インジケータを前記依存関係キャッシュに格納するステップと、
前記命令デコードおよび発行ロジックによって、命令用の前記実行ユニット・インジケータを前記依存関係キャッシュに要求するステップと、
命令用の前記格納された実行ユニット・インジケータを前記依存関係キャッシュから取得するステップと、
前記命令を、前記依存関係キャッシュから受信された前記実行ユニット・インジケータに応じて前記実行ユニットのうち対応する1つに割り当てるステップとを含む、方法。
【請求項10】
前記制御ロジックがスコアボード制御ロジックとして実装される、請求項9に記載の方法。
【請求項11】
前記予定された命令に応じて、命令用のインジケータを格納することも含む、請求項9に記載の方法。
【請求項12】
命令の実行完了時に、前記命令の依存関係のある命令を認識するステップをさらに含む、請求項9に記載の方法。
【請求項13】
前記認識された命令の依存関係を記録するステップをさらに含む、請求項12に記載の方法。
【請求項14】
プログラム実行時間が減少するように、最適な実行ユニットまたはプロセッサ・コアまたはプロセッサ・スライスまたはプロセッサ・パイプラインを選択するステップをさらに含む、請求項9に記載の方法。
【請求項15】
前記格納ロジックに書き込むために、前記依存関係キャッシュ内のエントリのアドレスを、第1のマッピング・ユニットによって決定するステップをさらに含む、請求項9に記載の方法。
【請求項16】
前記格納ロジックから読み取るために、前記依存関係キャッシュ内のエントリのアドレスを、第2のマッピング・ユニットによって決定するステップをさらに含む、請求項9に記載の方法。
【請求項17】
請求項9〜16のいずれかに記載の方法をプロセッサに実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般にプロセッサに関し、より詳細には、命令を処理するための複数の実行ユニットを備えるプロセッサ、実行用の命令を実行ユニットのうちの1つに割り当てるための命令デコードおよび発行ロジック(instruction decode and issue logic)に関する。さらに、本発明は、プロセッサおよび設計構造を使用して命令を処理するための方法に関する。
【背景技術】
【0002】
現在、プロセッサ(例えば、スーパースカラ・プロセッサ)は、スーパースカラ・プロセッサ内の複数の並列実行ユニットを使用できるため、1つのプロセッサ・サイクルの間に、複数の命令の並列実行を可能にする。一般に、このメカニズムによってプロセッサの性能が向上する。同じサイクル内で複数の命令を並列実行パイプラインに発行できる場合もある。しかし、2つの連続する命令は、互いに依存することがある。つまり、後の命令が先行する命令の結果を必要とする場合がある。したがって、後の命令のスケジューリングまたはディスパッチは、先行する命令が終了するのを待機する必要がある。これとは無関係に、異なる実行ユニットへの命令の発行は、特別な依存関係を反映することなく実行され得る。
【0003】
従来の方法は、依存関係のある命令間の距離を最大化しようとする。最初に、アルゴリズムとプログラムは、基礎になるハードウェアに最も適合するように再設計される場合がある。しかし、この再設計は、非常に高価になる可能性があり、ソフトウェアを実行する必要のあるプロセッサ・アーキテクチャごとに再実行する必要がある。加えて、ソース・コードがすでに使用不可能になっている場合があり、また関連費用が発生するため、ユーザは自分のシステムを再コンパイルして再認証することを望まない。仮想マシン(VM)を使用する仮想環境またはマルチスレッド環境では、他のスレッドがそのような単一スレッドの最適化を無効にする場合がある。マルチスレッドまたはVM(仮想マシン)環境では、同じコア上で他に何かが実行されるのを予測し、ハードウェア・リソースを得るために争うのは極めて困難であるため、どのような静的最適化も無効化される可能性がある。
【0004】
一方、トランジスタ処理デバイスの性能および単一スレッドの性能は、物理的制限のため飽和しつつあるが、ムーアの法則は適用され、「シリコンの縮小」が続いている。したがって、さらに多くの回路を1つのチップ上に集積することができ、例えば並列実行ユニットを使用して命令ストリームの実行を並列化することができ、そのため、命令当たりの平均サイクル数を減らすことができる。並列性は、命令間の依存性に制限される。すなわち、1つの命令の結果が、後続の依存関係のある命令によって必要とされる場合があるため、複数の命令を任意に並列化することはできない。性能を最大化するには、個々の実行ユニットの結果を他の実行ユニットに転送する必要がある。プロセッサ設計者にとって、これは、配線の問題または転送経路上の追加サイクル遅延をもたらす。現在、使用可能な配線スタックが、相互接続されるユニットの数(つまり、性能の向上)を制限する可能性があり、統合のギャップを埋めるために、設計上の大きな労力が生じる場合がある。プロセッサ設計において、多くの金属層は、それらが使用できたとしても、極めて高価になる。
【0005】
3番目に、依存関係検出範囲を伴うハードウェアの最適化が試みられてきた。しかし、そのようなアプローチでは、多くの追加ハードウェアが必要になり、限定的な結果しか得られない。必要な追加ハードウェア要素は、通常、指数関数的に増大する。静的依存関係検出範囲は、同程度に小さくすることができ、動的依存関係検出は存在しなくてもよい。
【0006】
加えて、ユニットからユニットへの転送待ち時間は、プロセッシング・ユニットに必要な総面積が増えるに従って増加する。データを段階分けする必要があり、その結果、離れたユニット上で依存関係のある命令が実行された場合、性能が低下する。
【0007】
コンパイラの最適化が、もう1つの選択肢になる可能性がある。その場合、プロセッサ・アーキテクチャごとにソース・コードを再コンパイルする必要がある。この場合も、ソース・コードが必要になる。また、この方法は、仮想環境およびマルチスレッド実行に対してあまり堅牢ではないことがあり、可変の依存関係の転送待ち時間を扱わない場合がある。
【0008】
現在使用可能な技術の選択肢は、例えば文献米国第5,802,386号に記載されている。この文献は、スケジュールされる命令のオペランドとして必要とされる前の命令の結果が使用可能になったときに、最初のプロセッサ・サイクルの開始の識別に基づいて、命令が、実行のために効率的、静的にスケジュールされるということを開示している。命令の処理のための格納されたプロセッサ・サイクル識別を調べて、命令が実行可能になったときの最も早いプロセッサ・サイクルを明らかにする。
【0009】
別の文献(米国第5,835,745号)は、命令ボックスを含んでいるパイプライン・プロセッサを開示している。この命令ボックスは、命令のセットのレジスタ・オペランド・フィールドをマッピングするためのレジスタ・マッパ、および命令プロセッサからの設定命令の発行を静的に並べ替えるための、命令のセットごとに適合される命令スケジュールを含んでいる。マッピングされるレジスタ・オペランド・フィールドは、命令の発行の前に、並べ替えられた命令のセットのうちの対応する命令と関連付けられる。
【0010】
しかし、これらのアプローチも、実行時(例えば、アドレス計算が実行される時)またはプロセッサの複数実行ユニット環境内のマルチスレッドなどの動的環境においてのみ認識できる依存関係の問題を解決できない。したがって、複数の実行ユニットを備えるプロセッサの場合、複数の依存関係のある命令について、命令のディスパッチを最適化する必要がある。
【先行技術文献】
【特許文献】
【0011】
【特許文献1】米国第5,802,386号
【特許文献2】米国第5,835,745号
【発明の概要】
【発明が解決しようとする課題】
【0012】
本発明の課題は、このような必要性に対処し、命令を処理するための複数の実行ユニットを備えるプロセッサ、プロセッサを使用して命令を処理するための方法、およびプロセッサの設計プロセスにおいて使用される設計構造を提供することである。
【課題を解決するための手段】
【0013】
この必要性は、独立した特許請求の範囲に従って、命令を処理するための複数の実行ユニットを備えるプロセッサ、およびプロセッサを使用して命令を処理するための方法によって対処できる。
【0014】
本発明の1つの態様によれば、命令を処理するための複数の実行ユニットを備えるプロセッサ、実行用の命令を実行ユニットのうちの1つに割り当てるための命令デコードおよび発行ロジックを提供できる。このプロセッサは、後続の命令間のレジスタ・アクセス競合を解決するための制御ロジックおよび依存関係キャッシュを備えることができる。
【0015】
この依存関係キャッシュは、命令の実行を予定することができる実行ユニットを示す実行ユニット・インジケータを制御ロジックから受信するための受信ロジックと、受信された実行ユニット・インジケータを格納するために受信ロジックに応答する格納ロジックと、命令用の格納された実行ユニット・インジケータを提供するために命令デコードおよび発行ロジックからの要求に応答する取得ロジックとを備えることができる。命令デコードおよび発行ロジックは、依存関係キャッシュに命令用の実行ユニット・インジケータを要求し、依存関係キャッシュから受信された実行ユニット・インジケータに応じて命令を実行ユニットのうち対応する1つに割り当てるように構成できる。
【0016】
本発明の別の態様によれば、プロセッサを使用して命令を処理するための方法を提供できる。プロセッサは、実行用の命令を実行ユニットのうちの1つに割り当てるための命令デコードおよび発行ロジックを備えることができる。この方法は、制御ロジックによって後続の命令間のレジスタ・アクセス競合を解決することと、依存関係キャッシュを提供することとを含むことができる。
【0017】
さらに、この方法は、制御ロジックから依存関係キャッシュで、命令が実行されることが予定されている実行ユニットを示す実行ユニット・インジケータを受信することと、受信された実行ユニット・インジケータを依存関係キャッシュに格納することと、命令デコードおよび発行ロジックによって、命令用の実行ユニット・インジケータを依存関係キャッシュに要求することとを含むことができる。要求後に、この方法は、命令用の格納された実行ユニット・インジケータを依存関係キャッシュから取得することと、依存関係キャッシュから受信された実行ユニット・インジケータに応じて命令を実行ユニットのうち対応する1つに割り当てることとを含むことができる。
【0018】
本発明のさらに別の態様によれば、命令を処理するための複数の実行ユニットを備えるプロセッサの設計プロセスにおいて使用される、機械可読記憶媒体内で有形に具現化された関連する設計構造、ならびに実行用の命令を実行ユニットのうちの1つに割り当てるための命令デコードおよび発行ロジックを提供できる。
【0019】
制御ロジックがスコアボード制御ロジックとして実装されてもよいということに注意する。
【0020】
本発明の実施形態が、さまざまな対象を参照して説明されるということに注意する必要がある。具体的には、一部の実施形態は、方法タイプの請求項を参照して説明され、他の実施形態は装置タイプの請求項を参照して説明されている。ただし、当業者は、前述の説明および以下の説明から、特に注記のない限り、対象の1つの種類に属している特徴の任意の組合せに加えて、異なる対象に関連する特徴間、具体的には、方法タイプの請求項の特徴と、装置タイプの請求項の特徴との間の任意の組合せも、本文書内で開示されると見なされるということを推測するであろう。
【0021】
上で定義された態様および本発明のその他の態様は、以下に記載された実施形態の例から明らかになり、実施形態の例を参照して説明されるが、本発明はこれらに限定されない。
【0022】
単なる例として、以下の図面を参照して本発明の好ましい実施形態について説明する。
【図面の簡単な説明】
【0023】
図1】異なる実行ユニット上の基本的な従来のラウンドロビン命令実行と共に命令ストリームを示す図である。
図2】実行ユニットのユニット0、ユニット1、およびユニット2への同じ命令の最適化された発行と共に同じ命令ストリームを示す図である。
図3】依存関係キャッシュを含んでいる本発明のアーキテクチャの概要を示す図である。
図4図3の他のプロセッサ・コンポーネントの文脈における依存関係キャッシュの第1の実装の拡張されたバージョンを示す図である。
図5】依存関係キャッシュの代替の実装を示す図である。
図6】依存関係キャッシュの更新に関して、フローチャートの形態で提案された概念を示す図である。
図7】命令の依存関係を認識したスケジューリングのフローチャートを示す図である。
【発明を実施するための形態】
【0024】
この説明の文脈では、以下の規則、用語、または表現あるいはこれらの組合せを使用できる。
【0025】
「プロセッサ」という用語は、単一のプロセッサ(例えば、スーパースカラ・プロセッサ)内で命令レベル並列性と呼ばれる並列性の形態を作る複数のプロセッシング・ユニットが実装されているCPU(central processing units)を示すことができる。したがって、このプロセッサは、所与のクロック・レートで可能になる平均実行スループットよりも速い平均実行スループットを可能にすることができる。プロセッサは、複数の命令をプロセッサ上の異なる機能ユニットに同時にディスパッチすることによって、1クロック・サイクルの間に複数の命令を実行できる。各機能ユニットは、別々のCPUコアではなく、算術論理演算ユニット、ビット・シフタ、または乗算器などの単一のCPU内の実行リソースである。このような概念をスーパースカラ・プロセッサ内で実現できる場合でも、提案された概念は、その他の種類のプロセッサ内でも機能できる。
【0026】
「実行ユニット」という用語は、説明されたように、個別のユニットまたはプロセッサの一部である機能ユニットを示すことができる。複数の実行ユニットが、1つのプロセッサ内に存在することができ、それらはすべて並列で動作するように構成される。これらのユニットは、同一であってもなくてもよい。
【0027】
「命令デコードおよび発行ロジック」という用語は、実行されるコマンドまたは命令を受信できる、プロセッサの一部としてのユニットを示すことができる。命令デコードおよび発行ロジックは、命令を受信すると、次に、命令を構成要素(例えば、命令自体、データまたはアドレスあるいはその両方、あるいはその他のパラメータ)にデコードすることができ、その後、コマンドまたはコマンドの一部をプロセッサ内の関連する実行ユニットに発行することができる。
【0028】
「制御ロジック」という用語は、プロセッサ内で並列に使用可能な実行ユニット間で競合が発生しないことを保証するためのロジックを示すことができる。制御ロジックは、スコアボード・ロジックとして実装されてもよい。
【0029】
「レジスタ・アクセス競合」という用語は、複数のプロセッシング・ユニットを備えるプロセッサにおいて使われる場合がある。命令のストリーム内の個々の命令は、互いに独立していないことがある。命令A(命令ストリーム内で後方に位置付けられている)は、別の命令Bに依存する場合がある。そのため、Aが実行されるには、まずBが終了する必要がある場合がある。したがって、これらの命令は、受信された命令ストリームの順序で実行される必要がある。しかし、他の命令は、互いに完全に独立しているため、受信された命令ストリームと比較した場合に、逆の順序で実行されてもよい。つまり、これらの命令は、「異なる順序で」実行されてもよい。そのため、このような決定を可能にするメカニズムが、プロセッサ内に存在する必要がある。前の段落で定義された制御ロジックは、このような決定を引き受けることができる。
【0030】
「依存関係キャッシュ」という用語は、プロセッサの一部としての新しい要素を示すことができる。具体的には、このプロセッサは、従来技術と比較して性能向上を実現するために、異なる使用可能なプロセッシング・ユニットへの命令または命令の一部の発行を最適化するのに役立つ。
【0031】
「格納ロジック」という用語は、この出願の文脈においては、ストレージの位置を示すことができる。具体的には、このストレージの位置は、所与の命令が実行された実行ロジックを特定するインジケータを格納するための依存関係キャッシュの一部である。このようにして、すでに実行された命令に対して依存関係のある命令も、同じ実行ユニットまたは定義された他の実行ユニット上で実行できることを保証するために、特定の命令が実行された実行ユニットを再び取得することができる。
【0032】
「取得ロジック」という用語は、次のようなロジックとして説明できる。つまり、プロセッサを通る命令のフローを最適化するために、命令が実行された実行ユニットを取得するためのロジックである。このようにして、ある命令とその後の命令(相互に依存している命令)との間で、実行ユニットの切り替えを防ぐことができる。これによって、貴重な処理時間を節約することができ、性能を向上させることができる。
【0033】
「依存関係キャッシュ」という用語は、複数のタスクに役立つロジックを示すことができる。依存関係ロジックの実装の詳細は、図の説明の一部として下で示されている。ただし、依存関係キャッシュの機能の1つは、命令ストリームの一部として命令用のインジケータを格納することであり、複数の同一の実行ユニットまたは多様な実行ユニットを含む環境内で実行される。実行ユニットは、例えば、固定小数点実行ユニット、浮動小数点実行ユニット、または同じ命令を実行できるプロセッサの一部または2つの異なるユニットとして2回以上実装できる任意のその他の特別な実行ユニットであってもよい。
【0034】
実行用の命令を実行ユニットのうちの1つに割り当てるために命令デコードおよび発行ロジックを備える複数の実行ユニットを含んでいる提案されたプロセッサは、いくつかの利点および技術的効果を提供することができる。
【0035】
依存関係キャッシュを使用すると、プロセッサ環境において、従来の命令発行技術を大幅に上回る性能向上を可能にすることができる。プロセッサは、命令のストリームを実行しながら(つまり、既存の変更されていないソフトウェア・コードを実行しながら)、静的および動的な命令の依存関係を学習できる場合がある。学習した内容は、保存することができ、後の時点で、同じ依存関係が再び発生した場合に再利用することができる。したがって、コードが再び実行されるときに(例えば、プログラム・ループ内で)、ある実行ユニットから別の実行ユニット(最終的に、幾何学的に遠く離れた実行ユニット)への転送待ち時間を減らし、プロセッサの全体的性能を向上させるために、依存関係のある命令を、同じ実行ユニットまたは近接した実行ユニットに再び発行することができる。
【0036】
プロセッサの好ましい実施形態によれば、制御ロジックは、スコアボード制御ロジックであってもよい。スコアボード制御ロジックは、マルチプロセッシング・ユニット環境内の依存関係のある命令を記録(keeping track)するのに役立ち、異なる順序でのスケジューリングおよび命令の発行をサポートすることができる。
【0037】
プロセッサの有利な一実施形態によれば、依存関係キャッシュの格納ロジックは、予定された命令に応じて命令用のインジケータを格納するように構成させることもできる。このようにして、命令が繰り返し依存している場合、計算ループにおいてインジケータを取得することができる。固有のプロセッシング・ユニットへのスケジューリングは、最適化された方法で実行できる。
【0038】
プロセッサの好ましい実施形態によれば、ある命令の実行完了時に、その命令の依存関係のある命令を認識できる。そのため、この認識に従って、次の命令を関連するプロセッシング・ユニットに発行またはスケジューリングすることができる。したがって、プロセッサのその他の有利な実施形態によれば、依存関係キャッシュを、認識された命令の依存関係を記録する(tracking)ように構成させることができる。
【0039】
プロセッサのその他の有利な一実施形態によれば、依存関係キャッシュは、一連の依存関係のある命令を終了するために必要なサイクル数を減らし、それによってプロセッサの並列性を最適化することにより、プログラム実行時間を削減できるように、最適な実行ユニットまたはプロセッサ・コアまたはプロセッサ・スライスまたはプロセッサ・パイプラインを選択するためのユニット選択モジュールを備えることができる。
【0040】
プロセッサのその他の実施形態によれば、依存関係キャッシュ内のエントリのアドレスは、第1のマッピング・ユニットによって決定できる。これは、ユニット・インジケータを格納ロジックに書き込む目的で、第1のハッシュ・ユニットによって実行することもできる。
【0041】
それに応じて、プロセッサの別の許容される実施形態によれば、依存関係キャッシュ内のエントリのアドレスは、プロセッシング・ユニットのインジケータを格納ロジックから読み取るために、第2のマッピング・ユニットによって決定される。また、この第2のマッピング・ユニットは、プロセッシング・ユニットのインジケータを格納するための依存関係キャッシュ・テーブルへの高速アクセス用のハッシュ・ユニットとして実装できる。
【0042】
設計構造のオプションの一実施形態によれば、設計構造は、プロセッサを表すネットリストを含むことができる。このネットリストは、SRAMセルのメモリ・セル配置用の自動生産システムに必要になる場合がある。
【0043】
設計構造の別のオプションの実施形態によれば、設計構造は、テスト・データ、特性評価データ、検証データ、または設計仕様の少なくとも1つのセットを含む。
【0044】
以下では、各図について詳細に説明する。図内のすべての命令は概略図である。最初に、命令を処理するための複数の実行ユニットを備える本発明のプロセッサの実施形態に対して効果を比較するために、既存のスケジューリング方法および発行方法のブロック図について説明する。その後、その他の実施形態およびプロセッサを使用して命令を処理するための方法の実施形態について説明する。
【0045】
図1に、異なる実行ユニット上の基本的な従来のラウンドロビン命令実行と共に命令ストリーム100を示す。命令のストリーム100は、複数の命令102、…、120を含んでいる。複数の依存関係が矢印で示されている。例えば、命令106は命令102に依存し、命令108は命令106に依存し、命令116は命令108に依存している。一方、命令110は命令104に依存し、命令116は命令110に依存している。したがって、命令116は命令108と命令110の両方に依存している。命令120は命令116に依存している。このように、命令ストリーム100の例には、さまざまな命令の依存関係が存在している。
【0046】
これらの依存関係は、実行ユニット0 122、実行ユニット1 124、および実行ユニット2 126に関して、異なる種類の実線および破線によっても示されている。図からわかるように、10個の命令102、…、120は、9サイクルで実行できる。命令120は、元の直線的命令ストリーム100の命令118と同じレベルでユニット0(122)において実行されるように示されている。したがって、従来のアーキテクチャにおいて性能向上が達成されるが、ある実行ユニットの結果をその実行ユニットから別の実行ユニットに転送する必要があるというように、異なる実行ユニット0、1、2間に依存関係が存在している。そのため、実行ユニットおよび命令の依存関係が調整される場合、改善の余地がある。
【0047】
図2に、本発明の概念に従う実行ユニット0(122)、ユニット1(124)、およびユニット2(126)への同じ命令の最適化された発行と共に同じ命令ストリーム100を示す。図からわかるように、依存関係のある命令102、106、108、116、120は、実行ユニット0(122)上で実行される。これらの命令は、1サイクルごとに順番に実行される。依存関係のある命令104および110の第2の部分的ストリームが、並行して、できるだけ早く開始されて、実行ユニット1(124)上で実行される。実行ユニット1(124)の結果が、依存関係のある命令の異なる部分的ストリーム(ここでは、実行ユニット0(122)上で実行される)と組み合わせて必要になった時点でのみ、1つの部分的実行ストリームの結果を、ある実行ユニットから別の実行ユニットに(具体的には、ユニット1からユニット0に)転送する必要がある。
【0048】
依存関係のない残りの命令112、114、118は、実行ユニット2(126)上で、順序が異なる方法で、他の部分的に依存関係のある命令とは無関係に実行できる。
【0049】
その結果、命令ストリーム100の10個の命令102、…、120は、従来のスケジューリング手法における9プロセッサ・サイクルではなく、5プロセッサ・サイクルの後に実行を終了できた。これは、従来の命令ディスパッチ・アルゴリズムと比較して、明白な性能的利点を示している。
【0050】
図3に、依存関係キャッシュを含んでいる本発明のアーキテクチャの概要を示す。プロセッサは、複数の実行ユニット0〜n(つまり、122〜308)を備えることができる。これらの実行ユニットは、図1および図2の実行ユニット0、1、および2を備えることができる。図1および図2の命令ストリーム100などの命令ストリームは、スコアボード・ロジックの形態で実装できる制御ユニット306と共に命令デコードおよび発行ユニット302に入ることができる。スコアボード・ロジック306と依存関係キャッシュ300の両方が、デコードおよび発行ユニット302と連携して動作する。
【0051】
図4に、図3の他のプロセッサ・コンポーネントの文脈における依存関係キャッシュ300の拡張されたバージョンを示す。依存関係終了ロジック404は、スコアボード306から少なくとも2つの入力値を受信することができる(402)。それらの入力値は、終了または中止する処理に応じて、アドレスまたはユニット番号422、およびアドレスまたは命令の種類あるいはその両方である。「命令」および「処理」という用語は、この文書の文脈では、交換可能な用語として使用できることに注意する。
【0052】
依存関係キャッシュの機能を最適に説明するために、標準的な一連のステップを次のように説明できる。命令デコードおよび発行ユニット302から発行される命令の命令アドレスを使用して、依存関係キャッシュ300にアクセスし、命令を発行する先、つまり実行ユニットを検出する。このために、命令デコードおよび発行ユニット302は、発行される命令のアドレスを依存関係発行制御ロジック416を介して第2のマッピング・ユニット414(ハッシュ・ユニットとして実装できる)に送信し(432)、命令を実行する必要のある実行ユニットのアドレスを依存関係キャッシュ・テーブル412から読み取る。ハッシュ/マッピング・ユニット414を使用して、依存関係キャッシュ・テーブル412にアクセスするためのアドレスを絞り込むことができる。
【0053】
次に、依存関係キャッシュ300は、実行ユニット識別子を、ユニット選択モジュール420を介して依存関係キャッシュ・テーブル412から命令デコードおよび発行ロジック302に返す(428)。依存関係発行制御ロジック416は、パラメータとして発行される命令の種類を使用して、ユニット選択モジュール420に影響を与える(430)。
【0054】
命令が終了すると、スコアボードによってフラグが立てられた、今終了した命令の結果を待機しているすべての命令(つまり、依存関係のある命令の依存関係のある処理)を考慮できる。これらの命令ごとに、依存関係のある命令のアドレス424(スコアボードから取得される)が使用され、依存関係終了制御ロジック404を介して依存関係キャッシュ300にアクセスする。具体的には、ハッシュ・モジュールとして実装できるユニット・マッピング・モジュール406および第1のマッピング・ユニット410を介して依存関係キャッシュ・テーブル412にアクセスする。ユニット・マッピング・モジュール406は、コンピュータ命令426のすべての依存関係のある命令に関して、近接した実行ユニットをターゲットにすることができる。この文脈では、「近接した」という用語は、実行ユニット間での短い配線(つまり、短い待ち時間)を保証するために、プロセッサ・チップ上で幾何学的に近いということを意味することができる。
【0055】
依存関係のある命令の種類に基づいて、依存関係キャッシュ300(具体的には、依存関係のある処理に関する依存関係キャッシュ・テーブル412のエントリ)を更新するために、終了した命令に最も近いユニットが選択される。等しいプロセッシング・ユニットまたは実行ユニットを備えるプロセッサ・チップの場合、依存関係のある命令が開始された実行ユニットは、その命令が終了した実行ユニットに一致するということに注意する。
【0056】
図5に、依存関係キャッシュ300の代替の実装または拡張された実装を示す。ユニットまたはモジュール依存関係終了制御ロジック404、第1のマッピング・ユニット410、第2のマッピング・ユニット414、依存関係発行制御ロジック416、およびユニット・マッピング・モジュール420は、図4の文脈で説明されたのと同じ方法で基本的に動作する。例えば、ユニット・マッピング・モジュール420は、発行される命令に使用される実行ユニット番号または実行ユニットの識別子(依存関係キャッシュ・テーブル412から受信される(504))を、命令デコードおよび発行ユニット302に返送する(508)。図4の文脈で説明された他の既知のプロセッサ・ユニットから、命令デコードおよび発行ユニット302のみが図5に示されているが、他のすべてのユニットも、本発明の概念のこの拡張された実装において使用できるということに注意する。
【0057】
ただし、依存関係キャッシュ・テーブル412は、発行された命令用の実行ユニット識別子への並列なエントリを持つことができる。第2の並列な列502は、最も若い依存関係のある命令のアドレスに使用される。最も若い依存関係506のアドレスは、依存関係発行制御ロジック416の追加入力として使用される。ユニット・マッピング・モジュール420の出力が依存関係発行制御ロジック416へのフィードバック・ループであることにも注意する。
【0058】
この実施形態では、前の依存関係のある命令を検出するために、命令デコードおよび発行ユニット302から発行される命令の命令アドレスが使用されて、依存関係キャッシュ300にアクセスする。これも、依存関係発行制御ロジック416および第2のマッピング・ユニット414を介して実行される。前と同じマッピング/ハッシュ・アルゴリズムを使用して、命令アドレスを狭いアドレスに変換し、依存関係キャッシュ・テーブル412、502にアクセスできる。
【0059】
最も若い依存関係のある命令のアドレスを使用して(506)、前の依存関係のある命令の命令アドレスが使用され、依存関係キャッシュ・テーブル412、502に再びアクセスし、依存関係のある命令が発行されたユニットを読み出す。依存関係キャッシュ・テーブル412、502は、例えば20ビット幅であってもよいことに注意する。ただし、このビット数はプロセッサのアーキテクチャに依存する場合がある。
【0060】
次に、依存関係キャッシュ・テーブル412、502は、ユニット・マッピング・モジュール420を介して実行ユニット識別子を返し、命令を発行することができる。依存関係キャッシュ・テーブル420、502内に、エントリごとに有効ビットが存在してもよい。この有効ビットが設定された場合、ユニット・マッピング・モジュール420は、例えばランダム/ラウンドロビン・ユニット・アルゴリズムを使用してユニットを選択できる。偽信号のため、選択された実行ユニットは、特定の種類の命令を実行できない場合がある。ただし、有効ビットが設定されていない場合にも同じことが発生することがある。
【0061】
その後、ユニット・マッピング・モジュール420、依存関係発行制御ロジック416、および第2のマッピング・ユニット414を使用して書き込みアクセスを実行し、命令のエントリを更新し、命令の発行先になる実行ユニット識別子を含む依存関係キャッシュ・テーブル412内のアドレスを発行できる。
【0062】
この実施形態において命令が終了すると、スコアボードによってフラグが立てられた、その結果を待機しているすべての命令(つまり、依存関係のある命令)が考慮される(上と比較されたい)。これらの命令ごとに、依存関係のある命令のアドレスが使用されて、上で説明されたように、発行される命令と同様の方法で、依存関係終了制御ロジック404および第1のマッピング・ユニット410を介して依存関係キャッシュにアクセスする。この場合、終了する命令の命令アドレスを、第1のマッピング・ユニットを介して、依存関係キャッシュ・テーブル412、502の列512に書き込むことができる。
【0063】
図6に、依存関係キャッシュの更新に関するフローチャート600の形態で、提案された概念を示す。命令実行の終了から、フローが開始される(602)(命令が完了する)。次に、依存関係のある命令が存在するかどうかが判定される(604)。「いいえ」の場合、更新を実行することはできない。「はい」の場合、依存関係のある命令のアドレスが依存関係キャッシュ・テーブル412内にすでに存在するかどうかが判定される(606)。「はい」の場合、現在の依存関係がより若いかどうかが判定される(608)。「いいえ」の場合、プロセスは、依存関係のある命令が存在するかどうかの判定604に戻る。「はい」の場合、依存関係が依存関係キャッシュ・テーブル412に追加される。
【0064】
依存関係のある命令が依存関係キャッシュ内にすでに存在するかどうかの判定606が「いいえ」の場合、プロセスはステップ610に真っすぐ進み、ここで、依存関係が依存関係キャッシュ・テーブル412に追加される。その後、プロセスは、依存関係のある命令が存在するかどうかの判定604に戻る。
【0065】
図7に、命令の依存関係を認識したスケジューリングのフローチャートを示す。命令の事前スケジューリングから入って、命令アドレスが依存関係キャッシュ300(具体的には、依存関係キャッシュ・テーブル412)内に存在するかどうかの判定702を実行できる。「はい」の場合、依存関係のある命令がすでに完了したかどうかを判定できる(704)。「いいえ」の場合、依存関係のある命令の実行ユニットを特定できる(706)。次に、依存関係のある命令のユニットに基づいて最も良く適合する実行ユニットを決定できる(708)。この決定は、命令間での実行ユニットの変更の数、レジスタ内の内容の再利用、実行ユニット間の幾何学的距離などを最小にすることに基づくことができる。最後に、命令の発行またはスケジューリングあるいはその両方を行うことができる(712)。
【0066】
判定702が「いいえ」の場合で、かつ判定704が「はい」の場合、プロセスは、現在の命令に最適な実行ユニットを決定するための決定処理710を実行する。この処理は、例えばランダム選択アルゴリズムまたはラウンドロビン・アルゴリズムを使用して実行できる。この決定処理の実行後、プロセスは命令のスケジューリング/発行を実行する(712)。
【0067】
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された実施形態に制限されない。説明された実施形態の範囲および主旨を逸脱することなく多くの変更および変形が、当業者にとって明らかとなる。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書で開示された実施形態を理解できるようにするため選択されている。
【0068】
本発明は、システム、方法、またはコンピュータ・プログラム製品あるいはこれらの組合せとして具現化されてもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでもよい。
【0069】
この媒体は、電気、磁気、光、電磁気、赤外線、または伝搬媒体用の半導体システムにしてもよい。コンピュータ可読媒体の例は、半導体メモリまたは固体メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ(RAM:andom accessmemory)、読み取り専用メモリ(ROM:read-only memory)、剛体磁気ディスク、および光ディスクを含んでもよい。光ディスクの現在の例は、コンパクト・ディスク読み取り専用メモリ(CD−ROM:compact disk-read only memory)、コンパクト・ディスク読み取り/書き込み(CD−R/W:compact disk-read/write)、DVD、およびブルーレイディスクを含む。
【0070】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスにしてもよい。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組合せにすることができるが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-onlymemory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasableprogrammable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM:portable compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組合せを含む。本明細書において使用されているコンピュータ可読記憶媒体は、本質的に、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一時的信号であると解釈されるべきではない。
【0071】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワークあるいはこれらの組合せ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードすることができる。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはこれらの組合せを備えてもよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【0072】
本発明の処理を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードまたはオブジェクト・コードにしてもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータを、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide areanetwork)を含む任意の種類のネットワークを介してユーザのコンピュータに接続することができ、または接続を、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行うことができる。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行できる。
【0073】
本発明の態様は、本明細書において、本発明の実施形態に記載された方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組合せは、コンピュータ可読プログラム命令によって実装できると理解されるであろう。
【0074】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて規定された機能/動作を実装するための手段を構築するように、汎用コンピュータ、専用コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを生成するものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて規定された機能/動作の態様を実装する命令を含む製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラマブル・データ処理装置、またはその他のデバイスあるいはこれらの組合せに特定の方法で機能するよう指示するものであってもよい。
【0075】
コンピュータ可読プログラム命令は、コンピュータ、その他のプログラマブル装置、または別のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて規定された機能/動作を実装するように、コンピュータ実装プロセスを生成すべく、コンピュータ、その他のプログラマブル・データ処理装置、あるいは別のデバイスにロードされ、コンピュータ、その他のプログラマブル装置、またはその他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【0076】
図内のフローチャートまたはブロック図あるいはその両方は、本発明のさまざまな実施形態に記載されているシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および処理を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表すことができる。一部の代替実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生させることができる。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組合せは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組合せを実行する専用ハードウェアベースのシステムによって実装できるということにも注意する。
【0077】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、本発明を制限することを意図していない。本明細書で使用される単数形「a」、「an」、「the」は、文脈で特に明示的に示されない限り、複数形も含むことが意図されている。「備える(comprise)」または「備えている(comprising)」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、処理、要素、または構成要素あるいはそれらの組合せの存在を示すが、1つまたは複数のその他の機能、整数、ステップ、処理、要素、構成要素、またはこれらのグループあるいはそれらの組合せの存在または追加を除外していないとさらに理解されるであろう。
【0078】
下の特許請求の範囲内のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、動作、および均等なものは、具体的に特許請求されるその他の特許請求される要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図されている。本発明の説明は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態での発明に限定されない。本発明の範囲および主旨を逸脱することなく多くの変更および変形が、当業者にとって明らかとなる。本発明の原理および実際的な適用を最も適切に説明するため、およびその他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態に関して、本発明を理解できるようにするために、実施形態が選択されて説明された。
【符号の説明】
【0079】
100 命令ストリーム
102 命令
104 命令
106 命令
108 命令
110 命令
112 命令
114 命令
116 命令
118 命令
120 命令
122 ユニット
124 ユニット
126 ユニット
300 依存関係キャッシュ
302 命令デコードおよび発行ユニット
306 スコアボード
308 ユニット
402 データ
404 依存関係終了ロジック
406 ユニット・マッピング・モジュール
410 第1のマッピング・ユニット
412 依存関係キャッシュ・テーブル
414 第2のマッピング・ユニット
416 依存関係発行制御ロジック
420 ユニット・マッピング・モジュール
422 データ
424 データ
426 データ
428 データ
430 データ
432 データ
502 依存関係キャッシュ・テーブル
504 データ
506 データ
508 データ
600 フローチャート
602 ステップ
604 ステップ
606 ステップ
608 ステップ
610 ステップ
702 ステップ
704 ステップ
706 ステップ
708 ステップ
710 ステップ
712 ステップ
図1
図2
図3
図4
図5
図6
図7