トップ :: G 物理学 :: G06 計算;計数




【発明の名称】 命令実行方法
【発明者】 【氏名】ガーブ サンジブ

【氏名】アイアドナト ケブン レイ

【要約】 【課題】データ依存性を防止し、複数の命令を同時に実行可能とする。

【解決手段】複数のレジスタ及びインデックスでアドレス指定可能な複数の一時記憶ロケーションを含むレジスタファイル(117)を有するシステムの命令実行方法であって、入出力を有する複数の命令を命令バッファ内に記憶する段階と、複数の一時記憶ロケーションの1つを、命令バッファ内の複数の各命令の1つに割り当て、複数の命令の所定の1つに対応する出力を、一時記憶ロケーションに記憶する段階と、命令バッファ内の複数の命令の1つが、依存性命令であるかどうかを決定する段階であって、依存性命令は1つの入力を有する前回の命令の出力であり、前回の命令は所定のプログラム順序では依存性命令に先行する命令バッファ内の命令である段階と、前回の命令に割り当てられた一時記憶ロケーションと入力とを関係づける段階とによって構成されるものである。
【特許請求の範囲】
【請求項1】 複数のレジスタと、インデックスでアドレス指定可能な複数の一時記憶ロケーションとを含むレジスタファイルを有するコンピュータシステムにおいて、所定のプログラム順序を有する命令を実行するための方法であって、(1)それぞれ入力と出力を有する複数の命令を命令バッファ内に記憶する段階と、(2)インデックスでアドレス指定可能な複数の一時記憶ロケーションの1つを、前記命令バッファ内の前記複数の命令のそれぞれ1つに割り当てる段階であって、前記複数の命令の所定の1つに対応する出力が、前記複数の命令の前記所定の1つに割り当てられた前記インデックスでアドレス指定可能な一時記憶ロケーションに記憶される段階と、(3)前記命令バッファ内の前記複数の命令の1つが、依存性命令であるかどうかを決定する段階であって、前記依存性命令は1つの入力を有し、これは前回の命令の出力であり、前記前回の命令は所定のプログラム順序では前記依存性命令に先行する前記命令バッファ内の命令である段階と、(4)前記前回の命令に割り当てられた前記インデックスでアドレス指定可能な一時記憶ロケーションと前記入力とを関係づける段階とによって構成される命令実行方法。
【請求項2】 (5)前記前回の命令が出力を出したあとにだけ前記依存性命令を実行する段階と、(6)前記出力を、前記前回の命令に割り当てられた前記インデックスでアドレス指定可能な一時記憶ロケーションに記憶する段階と、(7)前記前回の命令に割り当てられた前記インデックスでアドレス指定可能な一時記憶ロケーションに記憶された前記出力を前記入力として用いて、前記依存性命令に対応する演算を実行する段階とをさらに含むことを特徴とする請求項1記載の命令実行方法。
【請求項3】 前回の命令の状態を示す実行した信号と前記入力とを関係づける段階をさらに含むことを特徴とする請求項1記載の命令実行方法。
【請求項4】 前記前回の命令が退避されるとき、適切なレジスタに前記出力を記憶する段階をさらに含むことを特徴とする請求項1記載の命令実行方法。
【請求項5】 複数のレジスタと、インデックスでアドレス指定可能な複数の一時記憶ロケーションとを含むレジスタ・ファイルを有するコンピュータシステムにおいて、入力と出力を有し所定のプログラム順序を有する命令を実行するための方法であって、(1)インデックスでアドレス指定可能な複数の一時記憶ロケーションの1つを、前記命令バッファ内の前記複数の命令のそれぞれ1つに割り当てる段階であって、前記複数の命令の所定の1つに対応する出力は、前記複数の命令の前記所定の1つに割り当てられた前記一時記憶ロケーションに記憶される段階と、(2)前記命令バッファ内の前記複数の命令の1つが、依存性命令であるかどうかを決定する段階であって、前記依存性命令は前回の命令に依存している入力を有し、前記前回の命令は所定のプログラム順序では前記依存性命令に先行する前記命令バッファ内の命令である段階と、(3)前記前回の命令に割り当てられた前記一時記憶ロケーションと前記前回の命令に依存している入力とを関係づける段階とによって構成される命令実行方法。
【発明の詳細な説明】【0001】
【発明の属する技術分野】本発明はスーパースカラー限定命令セット計算機(RISC)に関するものであり、更に具体的に言えばスーパースカラーR1SCコンピュータ用の、レジスタの名称変更および命令発行を含む命令スケジュール化に関するものである。以下は同一承継人の出願に係る係属中の出願である。「半導体フロアープランおよびレジスタ名称変更回路の方法」、米国出願番号07/860,718号、1992年3月31日、本発明と同時に出願(代理人整理番号SP041)。「高速RISCマイクロプロセッサ・アーキテクチャ」、米国出願番号07/817,810号、1992年1月8日出願(代理人整理番号SP051)。「拡張可能RISCマイクロプロセッサ・アーキテクチャ」、米国出願番号07/817,809号、1992年1月8日出願(代理人整理番号SP021)。本願に於いて上記の出願の開示を参照することによって当該米国特許出願の明細書の記載内容が本明細書の一部分を構成するものとする。
【0002】
【従来の技術】本出願で説明する基本的概念の詳細については以下の幾つかの参考文献に記述されている。Mike Johnson著 Superscalar Microprocessor Design(Prentice−Hall,Inc.,Englewood Cliffs,New Jersey,1991);John L.Hennessyその他著、Computer Architecture−AQuantitative Approach(Morgan Kaufmann Publisher,San Mateo,California,1990)。ジョンソンの著書、特に第2、6、および7章に、本発明によって扱われたレジスタ名称変更問題の優れた解説が記述されている。
【0003】スーパースカラーRISCプロセッサに於ける大きな課題は如何にして、斯かる命令実行の本質的な問題である依存性によるデータ・エラーの発生を回避しつつ、複数の命令を平行処理的に、順不同に実行できるか、という点に関する。データ依存性検査、レジスタ名称変更、および命令スケジュール化は問題解決の根本的要素である。
〔記憶競合およびレジスタ名称変更〕真の依存性(「フロー依存性(flow dependencies)」または「書き込み・読み出し(write−read)」依存性とも呼ばれる)は、しばしば反依存性(「読み出し・書き込み(read−write)」依存性とも呼ばれる)および出力依存性(「書き込み・書き込み(write−write)」依存性とも呼ばれる)と共に命令依存性の単一グルーブに分類される。このように分類をする理由は、これらの依存性のひとつひとつが、レジスタまたは他の記憶ロケーションの使用によってそれ自体を証明するからである。しかしながら、真の依存性を他の二つの依存性と区別することもまた重要である。真の依存性は、プログラムを通してデータおよび情報が流れるということである。反および出力依存性が発生するのは、異なった時点に於いて、レジスタまたは他の記憶ロケーションが異なった計算の為の異なった値を保持するからである。
【0004】命令が順序通りに発行され、順序通りに完了される場合、レジスタと値の間には一対一の対応が存在する。実行のどの過程に於いても、対応するレジスタに格納されている値はレジスタ識別子によって正確に識別される。命令が順不同に発行され、順不同に実行される場合、レジスタと値の間の対応が崩れ、値同士の間でレジスタをめぐっての競合が発生する。レジスタ割り当ての目的が出来るだけ多くの値を出来るだけ少数のレジスタに保存することである時、これは深刻な問題となる。多数の値を少数のレジスタに保存すると、実行の順序をレジスタ・アロケータが仮定する順序から変更した場合、多数の競合をもたらす。
【0005】反および出力依存性は正確には「記億競合」と呼ばれる。なぜならば、たとえ互いに競合する命令が独立していても、記憶のロケーション(レジスタを含む)を再使用しようとすると命令同士問で干渉が発生するからである。記憶に対する競合は命令の発行の抑制と、実行速度の低下という弊害を生む。しかし、問題となるリソースの数を増やすことにより、他のリソース競合と同じように、記憶競合を減少あるいは解消できる。
〔依存性のメカニズム〕ジヨンソンは次の項目を含む、様々な依存性のメカニズムを詳しく論じている。すなわち、ソフトウェア、レジスタの名称変更、リオーダー・バッファを用いたレジスタの名称変更、未来バッファを用いたレジスタ名称の変更、インターロツク、依存性を回避するために命令ウィンドウ中でオペランドをコピーすること、および部分的名称変更、等である。
【0006】従来のハードウェア・インプリメンテーションは命令間の依存性はソフトウェアが管理するようになつている。命令が真の依存性または記憶競合から完全に抜け出すまでハードウェアが命令を扱うことのないように、コンパイラや他のコードジェネレータは命令の順序を変更できる。しかし、不幸にしてこの手法では幾つかの問題が生じる。ソフトウェアはプロセッサによる操作の遅延時間を考慮に入れることができず、したがって依存性を防止するためにどのように命令の順序を変えていいかということを常には判断できない。命令が依存性のない状態になるまでハードウェアがその命令を扱わないように、如何にしてソフトウェアがハードウェアをして制御できるか、ということも問題点のひとつである。操作遅延時間が短いスカラー・プロセッサの場合、ソフトウェアはオーバーヘッドを極端に増大することなく、コードに“noーops”を挿入してデータ依存性の要求を満たすことができる。プロセッサが1サイクルあたり幾つかの命令を取り出そうとする場合、あるいはいくつかのオペレーションを完了するのに何サイクルかがかかる場合、プロセッサが依存性命令を扱わないようにするために挿入しなければならない“noーops”の数は急速に増える。その結果、コード・サイズが容認し難い程増大する。命令間の依存性をエンコードするためnoーopsは命令キャッシュという貴重なリソースを使う。
【0007】順不同の命令発行をプロセッサが許容する場合、どんなメカニズムのソフトウェアを、依存性を実施するのに使用すべきかは全く明らかでない。ソフトウェアはプロセッサの挙動を制御しないので、ソフトウェアが如何にしてプロセッサに依存性命令を解読させないようにするかということは困難である。二番目の問題は、スーパースカラー・プロセッサに於ける依存性を実施するスカラー・プロセッサ用の既存のバイナリ・コードは存在しないことである。なぜならば、実行モードはスーパースカラー・プロセッサにおいては非常に異なったものであるからである。依存性の管理をソフトウェアに委ねるには、スーパースカラー・プロセッサ用にコードを再生成する必要がある。そして、コードの依存性はハードウェアの遅延時間によって直接決定されるので、各スーパースカラー・プロセッサの各バージヨンの最良のコードはそのバージョンのインプリメンテーションに依存する。
【0008】一方、ハードウェアの依存性対処手法は本質的に複雑であるという理由で望ましくない場合もある。典型的なRISC命令がそうであるように、各命令に2個の入力オペランドと1個の出力値があると仮定すると、どの2個の命令の間にも5つの依存性が存在する。すなわち、2つの真の依存性、2つの反依存性、および1つの出力依存性である。更に、ウィンドウ中の命令のグループのような、一つの命令グループの間の依存性の数は、そのグループ中の命令の数の自乗に比例する。なぜなら、各命令は他の命令の一つ一つに対して考慮されなければならないからである。
【0009】プロセッサが1つのサイクル内で解読し、発行し、実行しようとする命令の数によって、複雑さは更に増大する。これらのアクションによって依存性が導入される。複雑さを減少させる唯一の助けは、依存性ハードウェァのスコープと複雑さの減少を助けるために、依存性を幾つものサイクルにわたって増分変化量的に決定できるということである。
【0010】記憶競合を除外するひとつの手法は、レジスタと値との対応性を再設立するための、レジスタを追加導入することである。これらの追加されたレジスタは従来通り、ハードウェアによって動的に割り当てられ、そしてそれらのレジスタは「レジスタ名称変更(register renaming)」を使用するプログラムに必要な値に対応させられる。レジスタ名称変更を実現するために、通常プロセッサは生成される新しい値一つ一つに対して(すなわち、レジスタに書き込む命令一つ一つに対して)新しいレジスタを割り当てる。元のレジスタを識別する命令は、そのレジスタの値を読む目的で、新規に割り当てられたレジスタの値を代わりに取得する。従って、ハードウェアは命令中の元のレジスタ識別子を名称変更して、新しいレジスタおよび正しい値と識別する。レジスタ割り当てに関してはレジスタ参照のロケーシヨンに依って、幾つもの異なった命令中の同一のレジスタ識別子は、異なったハードウェア・レジスタにアクセスすることがある。
【0011】以下のコード・シーケンスを考える。式中、“op”はオペレーションを意味し、“Rn”は番号の付いているレジスタを表わし、“:=”は割り当てを表わす。
【0012】R3b:=R3aopR5a (1)
R4b:=R3b+1 (2)
R3c:=R5a+1 (3)
R7b:=R3copR4b (4)
レジスタヘの各割り当てによって、そのレジスタの新しい「インスタンス(instance)」、英字の添え字で表記さているもの、が生成される。第3命令でR3用の新しいインスタンスが生成されることによって、第2および第1命令の反および出力依存性がそれぞれ回避されるが、第4命令に正しくオペランドを供給することについては何も影響を与えない。第3命令におけるR3への割り当ては第1命令に於けるR3への割り当てに優先するものである。従って、次の命令で見られるR3Cが新しいR3となり、その状態は別の命令が値をR3に割り当てるまで続く。
【0013】名称変更を行なうハードウェアは新しいレジスタ・インスタンスを生成し、そのインスタンスの値が他のものによって変更されて、その値への参照が存在しなくなった時点でそのインスタンスを破壊する。これによって、反および出力依存性が解消され、さらに多くの命令パラレリズムが可能となる。レジスタは再利用されるが、再利用はパラレル実行要件と一致している。これは特に順不同の命令発行に役立つものである。なぜならば、記憶競合は正しい結果を生成するのに必ずしも必要ではない命令発行抑制をもたらすからである。例えば、前記の命令シーケンスに於いては、名称変更によって第3命令は直ちに発行されるが、名称変更がない場合、第3命令は第1命令が完了し第2命令が発行されるまでこの命令を遅らせなければならないのである。
【0014】依存性を軽減するもう一つの手法は単一のビット(スコアーボード・ビット(scoreboardbit)と呼ばれる)を各レジスタと対応させることである。スコアーボード・ビットはレジスタに処理待ちの更新が存在することを示すために使用される。レジスタに書き込む命令が解読されると、プロセッサは対応するスコアーボード・ビットを設定する。書き込みが実際に実行されるとスコアーボード・ビットは再設定される。処理待ちの更新が存在するか否かを示すスコアーボード・ビットは一つだけしか存在しないので、各レジスタには斯かる更新は一つしかあり得ない。解読された命令が、処理待ちの更新(設定されているスコアーボード・ビットによって示される)を既に持つレジスタを更新するような場合、スコアーボードは命令の解読を遅らせる。こうして、どの時点に於いてもレジスタ当たり一つの処理待ちの更新を受け付けることによって出力依存性が防止される。
【0015】一方、レジスタの名称変更は複数のビットを持つタグを使用して様々な未計算の値を識別する。この場合、これらの値のうち幾つかは同一のプロセッサ・レジスタ(すなわち、同一の、プログラムから見えるレジスタ)に振り向けられていることも可能である。従来の名称変更では、ハードウェアは、現在どのような値とも対応していない使用可能なタグのプールからタグを割り当てることが求められ、また、ハードウェアは値の計算が完了するとタグを解放してそのプールに戻す必要がある。更に、スコアーボード化では各レジスタは一つの処理待ち更新しか受け入れることができないので、プロセッサはどの更新が最新のものであるかということを考慮しない。
【0016】依存性を軽減する更なる手法は、アソシアティブ・ルックアップを使用する「リオーダー・バッファ(reorder buffer)」を用いてレジスタの名称変更手法を使用することである。アソシアティブ・ルックアップはリオーダー・バッファ項目が割り当てられると直ちにレジスタの識別子をそのリオーダー・バッファ項目に写像する。更に、出力依存性を防止するために、ルックアップは優先順位で行われ、その結果、レジスタが2回以上割り当てられた場合、最新の割り当て値だけが得られる。この結果が利用可能でない場合は、タグが得られる。一つのレジスタに対し、リオーダー・バッファ項目の数と同じ数のインスタンスがあつても構わない。従つて、命令間で記憶競合が発生することはない。異なったインスタンスの各値はリオーダー・バッファからレジスタ・ファイルに順次書き込まれる。最後のインスタンスの値がレジスタ・ファイルに書き込まれると、リオーダー・バッファはもはやレジスタに写像しない。その場合、レジスタ・ファイルにはこのレジスタのインスタンスのみが含まれ、これが最も新しいインスタンスとなる。
【0017】
【発明が解決しようとする課題】しかし、リオーダー・バッファを用いた名称変更は、レジスタ識別子を値に写像するために、リオーダー・バッファ中のアソシアティブ・ルックアップを必要とする。リオーダー・バッファでは、アソシアティブ・ルックアップは優先順位付けられていて、リオーダー・バッファは常に最新値を対象となるレジスタ(あるいはタグ)に供給するようになっている。リオーダー・バッファもまた、種々の値をレジスタ・ファイルに順次書き込むので、値がリオーダー・バッファ中に存在しない場合でも、レジスタ・ファイルには最新値が必ず格納されている。
【0018】依存性軽減の更なる手法では、「未来ファイル(futurefi1e)」を使用することによってアソシアティブ・ルックアップを削減できる。未来ファイルは前のパラグラフで述べたリオーダー・バッファの特性は持たないファイルである。未来ファイル書き込み用に与えられた値は対応するレジスタに振り向けられた最新の値ではないこともあり、それが実際に最新の値でなければ値は最新のもとのして扱われない。従って、未来ファイルは最新の更新を記憶していて、実際に書き込みを行なう前に、各書き込みが最新の更新に対応することを検査するものである。
【0019】命令が解読されると、それはオペランド値と一緒に未来ファイル中のタグにアクセスする。レジスタに一つ以上の処理待ちの更新がある場合、タグは解読された命令が必要とする更新値を識別する。ひとつの命令が一旦解読されると、他の命令は反依存性に制約されることなくこの命令のソース・オペランドに上書きすることができる。なぜならば、このオペランドは命令ウィンドウにコピーされるからである。結果が最新の値のタグを持たない場合、その結果が未来ファイルに書き込まれることを防止することによって出力依存性は処理される。反および出力依存性は両方共、命令の発行を遅延させることなく処理される。
【0020】名称変更で依存性が解消されない場合、依存性を管理するために「インターロツク(interlocks)」を使用しなければならない。インターロックは単に、命令が依存性から解放されるまでその命令の実行を遅延させるものである。命令の実行を抑制するには2つの方法がある。すなわち、命令の解読の抑制と、命令の発行の抑制である。
【0021】スコアーボード化以上にパーフォーマンスを改善するために、インターロックは「ディスパツチ・スタツク(dispatch stack)」を使用してデコーダから命令ウィンドウに移される。ディスパッチ・スタックとは命令ウィンドウの一種で、ウィンドウ中の各命令を依存性カウントと共に増加させるものである。ウィンドウ中の各命令ごとのソース・レジスタに対応する依存性カウントが存在する。このカウントはソース・レジスタの処理待ちの先行更新の数を示すもので、従って、全ての真の依存性が解消される前に終了しなければならない更新の数を示すものである。ウィンドウ中の各命令の行き先レジスタに対応する2個の同じ様な依存性カウントが存在する。これらのカウントで処理待ちのレジスタの使用の数(すなわち反依存性の数)および処理待ちのレジスタの更新の数(すなわち出力依存性の数)が示される。
【0022】一つの命令が解読され、ディスパッチ・スタックにロードされると、依存性カウントはその命令のレジスタ識別子と、当ディスパッチ・スタックに既に存在する全ての命令のレジスタ識別子とを比較することによって設定される。命令が完了すると、まだウィンドウ中に存在する命令の依存性カウントは、実行される命令のソースおよび行き先レジスタ識別子に基づいて減少する(カウントは完了された命令の数に応じて可変の数で減少する)。命令はその全てのカウントがゼロの場合、独立した命令となる。カウントを使用することによって、ディスパッチ・スタツク中の全ての命令を各サイクルの他の全ての命令と比較する必要がなくなる。
【0023】反依存性は命令の解読中にオペランドを命令ウィンドウ(例えば予約ステーシヨン)にコピーすることによって防止できる。こうすることによって、オペランドが以降のレジスタの更新の段階で上書きされることがなくなる。レジスタの名称変更とは別に、反依存性を解消させるためにどんな手法でもオペランドはコピーできる。オペランドをコピーする代わりに、反依存性をインターロックすることもできるが、これらのインターロックのために必要なコンパレータおよび/またはカウンタは、比較するソースおよび結果レジスタの組み合わせの数を考慮すると高額である。
【0024】オペランドそのものの代わりにタグをオペランドとして供給できる。このタグはハードウェアにとっては単に、命令がどの値を必要とするかを識別するための手段である。従って、オペランド値が生成されると、それは命令とマッチさせることができる。レジスタ当たり1個の処理待ちの更新だけしかあり得ない場合、レジスタ識別子がタグとして使用できる(スコアーボード化の場合のように)。レジスタ当たり複数の処理待ちの更新があり得る場合(名称変更の場合のように)、結果タグを割り当てて、そして一意性を保証するためのメカニズムが必要である。
【0025】スコアーボード・インターロツキングの代わりとなる手法は、レジスタの複数の処理待ち更新を、出力依存性のためにデコーダを遅延させないようにし、且つデコードの過程に於いてオペランド(あるいはタグ)をコピーすることによって反依存性を処理することである。ウィンドウ中の命令は出力依存性から解放されない限り発行されないので、各レジスタの更新は順序通りの実行で行われるのと同じ順序で実行される。但し、異なるレジスタの更新は例外で、お互いに順不同である。この手法はレジスタ名称変更と殆ど同じ機能を持つものであるが、同一のレジスタの更新が順不同に発生するように命令を発行する能力だけは持たない。
【0026】リオーダ・バツファーを用いる以外に、名称変更にとって代わる良い方法はないように見える。依存性に関する議論の根底を成すものは、プロセッサは順不同の発行を行い、間違って予報された分岐から回復するためのリオーダー・バッファを既に持つている、という前提である。順不同の発行により、依存性を待つためにデコーダを遅延させることが許容できないこととなる。プロセッサに命令ウィンドウがある場合、デコーダをインターロックしてプロセッサのルックアヘッド機能を制限することは矛盾しているのである。従って、二つの選択肢しかない。すなわち、ウィンドウ中で反および出力依存性インタロックを実現させるか、あるいはこれらの依存性を名称変更によって完全に除去することである。
【0027】
【課題を解決するための手段】本発明はスパースカラーRISCコンピュータ用の、レジスタ名称変更および命令発行を含む、命令スケジューングに関するものである。スケジューリング論理の一部であるレジスタ名称変更回路(RRC)によって、コンピュータの命令実行ユニツト(IEU)は依存性を防止しつつ複数の命令を同時に実行することが可能になる。従来のレジスタ名称変更と比較して、本発明ではレジスタ・アドレスは実際には名称変更されない。本発明のRRCは一時的に命令の結果をバッファに入れ、順不同の命令の実行の結果は全ての先行する命令の実行が終わるまでレジスタ・フアイルに転送されない。RRCはまた一時的にバッファに入れられたオペランド(結果)を依存命令に供給するために結果の前向き送りを行なう。RRCには3個のサブセクシヨンが含まれている。すなわち、データ依存性チェッカー(DDC)、タグ割り当て論理(TAL)、およびレジスタファイル・ポートMUX(RPM)である。
【0028】DDCの役割は命令のグループ中の命令間の依存性を検出することである。DDCは各命令のソース・レジスタのアドレスと、グループ中の以前の各命令の行き先レジスタのアドレスを比較することによって命令間の依存性を検出する。例えば、命令Aが命令Bによつて書き込まれたレジスタからの値を読み出す場合、命令Aは命令Bに依存し、命令Aは命令Bが完了するまで開始できない。DDCの出力はこれらの依存性を示す。
【0029】DDCの出力はTALに送られる。一つの命令が先行する複数の命令に依存することが起こり得るので、TALはこれらの先行する命令のうちどれが最後に実行されるものであるかを決定する必要がある。本発明では、各命令を自動的に、所定の一時的バッファ位置に写像する。従って、本発明は従来のリオーダー・バッファで使用されるような優先順位化されたアソシアティブ・ルックアップを必要とせず、従ってチップの面積/コスト、および実行速度を節約する。
【0030】同時に実行される複数の命令の順不同の結果は、命令によって指定されたファイル・レジスタではなく、一連の一時的バッファに格納される。例えば、DDCが、命令6のソースが命令2、3、および5によって書き込まれるレジスタ、〔INCOMPLETESENTENCE〕であると決定した場合、TALは命令6に代わって命令5の「タグ(tag)」を出力することによって、命令6は命令5が完了するまで待たなければならないことを表示する。命令5のタグは命令5の結果が格納されている一時的バツフア位置を示す。このタグはまた、命令5が済んだかどうかを示す1ビットの信号(「済みフラグ(doneflag)」と呼ばれる)を含む。各命令は3個のソース・レジスタを持つことができるので、TALは各命令ごとに3個のタグを出力する。命令が先行するどの命令にも依存しない場合、TALは一時的バッファのアドレスではなく、その命令の入力のレジスタ・ファイル・アドレスを出力する。
【0031】RRCの最後の要素はRPM、すなわちレジスタファイル・ポートMUXesである。RPMの入力はTALの出力であり、RPMの選択ラインは命令スケジューラ(または、イシュア)と呼ばれるIEUのもう一つの要素から来る。命令スケジューラはどの命令を実行するか(この決定は済みフラグにも基づくものである)を選択し、次にRPMを使用してその命令のタグを選択する。これらのタグはコンピュータのレジスタ・ファイルの読み出しアドレス・ポートに送られる。前述の例では、命令5が完了した後、命令スケジューラは命令6を開始し、命令5の結果(タグ)のアドレスがレジスタ・ファイルに送られるようにRPMを選択する。そして、レジスタ・ファイルは命令5の結果を命令6で使用できるようにする。
【0032】
【発明の実施の形態】以下、本発明の実施の形態を図面を参照しつつ説明する。
【0033】本発明の上記および他の特徴と利点は、添付図の中で説明されるように、以下の推奨実施例の更に具体的な説明で明らかになるであろう。
【0034】図1に本発明の命令実行ユニット(IEU)100の代表的ハイレベルブロック図を示す。IEU100の目的は最短時間で最大数の命令を実行することである。これを遂行するには二つの基本的な方法がある。すなわち、各命令が出来るだけ短時間で実行できるようにIEU100を最適化するか、複数の命令を同時に実行できるようにIEU100を最適化することである。
【0035】命令は「バケット」と呼ばれる4つのグループ中のFIFO(先入れ先出し方式レジスタ・スタツク記憶装置)命令101を通して、命令取り出しユニット(IFU、図示せず)からIEU100に送られる。IEU100は最大2個の命令バケットを同時に解読し、スケジユールできる。FIFO101はO−3とラベルされた4個のバケットに全部で16個の命令が格納できる。IEU100は命令ウィンドウ102を調べる。本発明の一実施例では、ウィンドウ102は8個の命令(バケット0および1)で構成されている。各サイクルで、IEU100はウィンドウ102から最大数の命令を発行しようとする。ウィンドウ102は命令バッファ・レジスタとして機能する。一旦、バケット中の命令が実行され、その結果がプロセッサのレジスタ・ファイル(ブロック117を参照)に格納されると、バケットは底部104から掃き出され、新しいバケットが上部106から落とされる。
【0036】命令を並列あるいは順不同に実行するためには、各命令が必要とする時に、必要なデータが使用可能であるように、また、各命令の実行の結果が、将来の命令においてそれが必要になった時に使用可能であるように配慮する必要がある。
【0037】レジスタ名称変更回路(RRC)はコンピュータのIEUのスケジュール論理の一部であるが、RRCはカレント命令間の依存性を検出し、命令のソース(入力)を名称変更することによってこの機能を行なうものである。
【0038】前述のように三種類の依存性が存在する。すなわち、入力依存性、出力依存性、反依存性、である。入力依存性は、例えばAと呼ばれる命令が、仮にBと呼ばれる先行の命令の結果に基づいてオペレーションを実行する場合に発生する。出力依存性は、AとBの出力が同じ場所に格納されるような場合に発生する。反依存性は、命令のストリ一ムに於いて命令Aが命令Bの前に現れ、Bの結果がAの入力の一つと同じ場所に格納されなければならない場合に発生する。
【0039】入力依存性の扱い方は、必要な入力が使用可能になるまで命令を実行しないことである。RRC112は、カレント命令間の入力依存性を検出するために、そして特定の命令のための全ての入力が使用可能になると命令スケジューラまたはイシュア118に合図するために、使用される。これらの依存性を検出するために、RRC112はデータ依存性回路(DDC)108を使用して、各命令の入力のレジスタ・ファイル・アドレスと各先行命令の出力のアドレスとを比較する。先行する命令の出力が格納されるべきレジスタから一つの命令の入力が得られる場合、後者の命令は前者の命令の実行が終わるまで待たねばならない。
【0040】RRC112のこのインプリメンテーションでは、8個の命令を同時に検査できるので、カレント命令はウィンドウ102からこれらの8個の命令のうちの一つとして定義される。当業者にとって、本発明はこれよりも多くの命令、あるいはこれよりも少ない命令を検査できるように容易に変更できるということは明らかであろう。
【0041】本発明の一実施例では、命令は0から3の入力および0または1の出力を持ち得る。多くの命令の入力および出力は、幾つかのレジスタ・ファイルのうち一つから取得されるか格納されている。各レジスタ・ファイルll7(例えば別個の、整数、浮動、およびブールレジスタ・ファイル)は32個の実エントリに加え、8個の一時バツファ116のグループを持つことができる。ある命令が完了すると(「完了(complete)」とは、オペレーションが完了し、オペランドはその行き先レジスタに書き込まれる用意があることを意味する)、その結果は一時バッファ116の予め指定されたロケーションに格納される。全ての先行する命令の結果がレジスタ・ファイル中の定められた場所に移された後、この完了した命令の結果はレジスタ・ファイル117の適切な場所に移される。このような、一時バッファ116からレジスタ・ファイル117への結果の移動は「退避(retirement)」と呼ばれ、終了論理で制御されるもので、当業者にとっては明らかなものであろう。複数の命令が同時に退避可能である。退避とは、コンピュータのプログラム・カウンタを含む、マシンの「正式な状態(officialstate)」を更新することであり、これもまた当業者にとっては明らかなものであろう。例えば、命令I0が命令I1の直前に完了すると、両方の命令の結果をレジスタ・ファイル117に直接格納することができる。しかし、その後命令I3が完了すると、その結果は命令I2が完了するまで一時バッファ116に格納されなければならない。IEU100に各命令の結果を一時バッファ116の予め指定された場所に格納させることによって、IEU100はプログラムでの順序とは異なった順序で命令を実行でき、しかも出力依存性および反依存性によって生じる問題も回避できる。
【0042】RRC112はビットマツプをバス120を経て命令スケジューラ118に送り、ウィンドウ102中のどの命令が発行の用意ができているかを表示する。命令解読論理(図示せず)はイシュア118にバス123を経て各命令のリソースの要件を通知する。IEU100中の各リソースごとに(すなわち、各機能ユニットは一つの加算器、乗算器、シフト器、等である)イシュアll8はこの情報を走査し、バス121を経て発行信号を送ることにより、発行するための最初の命令および以降の命令を選択する。発行命令はRRC112内の一組のレジスタファイル・ポートMUXes(RPMs)124を選択する。これらの入力は各命令の入力のアドレスである。
【0043】これらの結果はレジスタ・ファイルll7に送られる前に数サイクル分一時バッファ116に保存されるので、これらがレジスタ・ファイルll7に送られる前に一時バッファ116から取得するメカニズムが設定されている。このようにして、その情報は他の命令のオペランドとして使用可能となる。このメカニズムは「結果の前送り(resurt forwarding)」と呼ばれ、これなしにはイシュア118は順不同での命令の発行ができない。この結果の前送りはレジスタ・ファイル117に於いて行われ、RRC112によって制御されるものである。結果の前送りの実行に必要な制御信号、そして斯かる制御信号の生成に使用されるランダム論理は、当業者にとっては明らかであろう。
【0044】与えられた命令がカレント命令のうちどの命令にも依存しない場合、この命令の入力は既にレジスタ・ファイル117に存在するので、結果の前送りは不要となる。イシュア118がその命令の実行を決定すると、RRC112はレジスタ・ファイルl17にそのデータを出力するよう指示する。
【0045】RRC112は次の三つの部分が含まれる。すなわち、データ依存性チェッカー(DDC)108、タグ割り当て論理(TAL)122、およびレジスタファイル・ポートMUXes(RPM)124である。DDC108はカレント命令間の何処に入力依存性が存在するかを決定する。TAL122はイシュア118のために依存性を監視し、結果の前送りを制御する。RPM124はイシュア118によって制御され・TAL122の出力を適切なレジスタ・ファイル・アドレス・ポート119に差し向ける。各命令はバス110を経てDDC108に送られる。全てのソース・レジスタは、ウィンドウ102の命令ごとに、全ての以前の行き先レジスタと比較される。
【0046】各命令の行き先は1つだけであり、これは一実施例ではダブルレジスタとなる。ひとつの命令は先行する命令だけに依存し、最大3個のソース・レジスタを持つことができる。依存性の存在を検出するために、相互に検査される必要がある様々なレジスタ・ファイルのソースおよび行き先アドレスがある。上記の如く、下部の2個のバケットに対応する下部の8個の命令はDDC108によって検査される。全てのソースレジスタ・アドレスは全ての先行の行き先レジスタ・アドレスと比較されて、ウィンドウ102中の命令が存在するかどうかが調べられる。
【0047】例えば、一つのプログラムに下記の命令シーケンスがあるとする。
【0048】add R0,R1,R2(0)
add R0,R2,R3(1)
add R4,R5,R2(2)
add R2,R3,R4(3)
各命令0−3の最初の2個のレジスタはソース・レジスタであり、各命令の最後のレジスタは行き先レジスタである。例えばR0とR1は命令0のソース・レジスタであり、R2は行き先レジスタである。命令0はレジスタ0および1の内容を加算し、結果をR2に格納する。この例の命令1−3で、全ての依存性を評価するために必要な比較は次の通りである。
【0049】IlS1、I1S2 対 I0DI2S1,I2S2 対 I1D,I0DI3S1,I3S2 対 I2D,I1D,I0D上記を説明すれば次の通りである。IXRS1は命令Xの第1ソース(入力)のアドレスであり、IXRS2は命令Xの第2ソース(入力)のアドレスであり、IXDは命令Xの行き先(出力)のアドレスである。
【0050】更に、プロセツサには一時バッファがあり、そこに命令0の結果に干渉することなしに命令2の結果が格納できるので、RRCl12は、命令2は命令0に依存して出力されることを無視できる。前述の、命令0と1の結果がレジスタ・ファイル117に移されるまで、命令2の結果は一時バッファ116からレジスタファイルl17に移されないのである。
【0051】RRCl12によつて検査される命令の数は容易にスケール可能である。4個の命令でなく、8個の命令を同時に検査するためには、下記の更なる比較を行わなければならない。
I4Sl,I4Sl 対 I3D,I2D,I1D,I0DI5Sl,I5S2 対 I4D,I3D,I2D,I1D,I0DI6Sl,I6S2 対 I5D,I4D,I3D,I2D,I1D,I0DI7Sl,I7S2 対 I6D,I5D,I4D,I3D,I2D,I1DI0D依存性の検査を行なうために、RRC112が扱わねばならない特殊なケースが幾つかある。第一に、ある命令では同じレジスタを入力と出力の両方に使用する。従つて、RRC112はこのソース/行き先レジスタ・アドレスを全ての先行する命令の行き先レジスタ・アドレスと比較する必要がある。従って、命令7のためには下記の比較が必要である。
【0052】I7S1,I7S2,I7S/D 対 I6D,I5D,I4D,I3D,I2D ,I1D,I0D更に、別の特殊なケースは、64ビットの出力(長語オペレーション)を生成する命令がプログラムに含まれている場合である。これらの命令は、結果を格納するための2個のレジスタが必要である。本実施例ではこれらのレジスタは順次レジスタでなけれぱならない。従って、RRCll2が命令4の依存性を検査していて、命令1が長語オペレーションである場合、RRCll2は下記の比較を行なわなければならない。
I4S1,I4S2 対 I3D,I2D,I1D,I1D+1,I0D場合によっては、命令は行き先レジスタを持たない。従って、RRC112は行き先レジスタなしの命令と如何なる将来の命令との間のどんな依存性をも一切無視しなければならない。更に、命令は1個の有効なソース・レジスタだけを持つとは限らないので、RRC1l2は未使用のソース・レジスタ(通常はS2)と全ての先行する命令との間のどんな依存性をも一切無視しなければならない。
【0053】RRC112はまた複数のレジスタ・ファイルを扱うことができ、複数のレジスタ・ファイルが使用される場合、一つの命令のソース・レジスタが他の命令の行き先レジスタと同じアドレスを持ち、同じレジスタ・ファイルに存在する場合のみ依存性が発生する。RRCll2は特定のアドレスがどのレジスタ・ファイルからのものであるかという情報をそのアドレスの一部として扱う。例えば、4個のRRC112は5ビット・レジスタ・ファイルを使用するインプリメンテーションに於いて、RRC112は5ビットの比較のかわりに7ビットの比較を行なう(5ビットはアドレスで、2ビットはレジスタ・ファイル用である)。
【0054】どの命令が長語オペレーションであるか、あるいはどの命令に不正なソースまたは行き先レジスタが含まれているかを示す信号は命令解読論理(IDL、図示せず)からRRC112に送られる。またIDLはどのレジスタ・ファイルから各命令のソースと行き先を取得するか、またどのレジスタ・ファイルにそれらを送るかをRRCl12に通知する。
【0055】図2はDDC108のブロック図である。ウィンドウ102の8個の命令すべてのためのソース・アドレス信号はIFIFO101から来着する。更なる入力には、8個の命令すべてのための長語ロード・オペレーション・フラグ・レジスタ・ファイル解読信号、不正行き先レジスタ・フラグ、行き先アドレス信号、アドレッシング・モードフラグ、等が含まれている。
【0056】DDC208は28個の依存性ブロック204で構成されている。各ブロック204はKEY206で記述されている。各ブロック204はIXS1,IXS2,およびIXS/D、の3個の入力を受け取る。IXS1は命令Xの第一ソース(入力)のアドレスであり、IXS/Dは命令Xの第二ソース(入力)のアドレスであり、IXS/Dは命令Xのソース/行き先(入力)のアドレスである。各ブロック204はまた入力IYS/Dを受け取るが、これはある先行命令Yの行き先レジスタ・アドレスである。例えば、最上行208はI0S/Dを受け取るが、これは命令0の行き先レジスタ・アドレスである。各ブロック204はデータ依存性の結果を対応するバスライン114の一つに出力する。例えば、I2S/Dのアドレスは命令7、6、5、4および3のオペランドアドレスS1,S2、およびS/Dと比較されなくてはならない。
【0057】各ブロック204は三つの比較を行なう。これらの比較を理解するために図8に示される汎用的ブロック700を考察してみる。このブロックは命令Yのソース/行き先オペランドと命令Xの各オペランドとを比較する。この例に於いて、下記の三つの比較が行なわれなくてはならない。
【0058】IXS1=IYS/DIXS2=IYS/DIXS/D=IYS/Dこれらの比較は3個のコンパレータブロック702、704、および706でそれぞれ表わされる。コンパレータブロック702、704および706への1組の入力はIYS/Dフィールドのビットであって、このフィールドは番号708で表わされる。コンパレータブロック702はその入力の第二セットとしてIXS1のビットを持つ。同じく、コンパレータブロック704はその入力の第二セットとしてIXS1のビットを持つ。また、コンパレータブロック706はその入力の第二セットとしてIXS/Dのビットを持つ。
【0059】推奨実施例では、ブロック702,704、および706で実行される比較はランダム論理で実行できる。コンパレータブロック706のランダム論理の一例を図9に示す。命令Yのソース/行き先ビット[6:0]を参照番号802で右側からの入力として示す。同じく、命令Xのソース/行き先ビット[6:0]を参照番号804で上側からの入力として示す。最上位ビット(MSB)はビット6であり、最下位ビット(LSB)はビット0である。これら2個のオペランドからの、対応するビットは7個の排他的NORゲート(XNOR)806に送られる。XNOR806の出力は次に7個の入力ANDゲート808によってANDをとられる。対応するビットが同一であるならば、XNOR806の出力のすべてはロジック・ハイである。全てのビットが同一であるならば、7個のXNOR806の出力のすべてはロジック・ハイであり、ANDゲート808の出力はロジツク・ハイである。これは、IXS/DとIYS/Dとの間に依存性が存在することを示す。
【0060】コンパレータブロック702および704のランダム論理は図9に示したものと同じである。本発明ではデータ依存性検査を行なうために幾多の他のランダム論理回路が可能であり、これはこの実施例の精神から逸脱することなく、当業者にとって明らかであろう。
【0061】また、当業者にとって更に明らかになるであろうが、種々のインプリメンテーシヨン固有のケースの発生が可能であるが、そのためにはデータ依存性検査を行なう更なるランダム論理が必要となる。代表的な特殊なデータ依存性検査のケースは長語の処理である。
【0062】前述の如く、長語オペレーションがレジスタXに書き込むと、最初の32ビットはレジスタXに書き込まれ、二番目の32ビットはレジスタX+1に書き込まれる。従って、データ依存性チェッカーは比較を行なうに当たって両方のレジスタを検査する必要がある。推奨実施例では、レジスタXは偶数レジスタであり、レジスタX+1は奇数レジスタである。従って両者の違いはLSBの差だけである。両方のレジスタを同時に検査する最も簡単な方法はLSBを無視することである。ストア・ロング(STLG)またはロード・ロング(LDLG)オペレーションの場合、XとYがLSB(0)ビットだけの差で違うならば、図9の論理では、依存性が実際は存在していてもそれがあたかも全然ない状態を生み出す。従って、長語オペレーシヨンのためには、全ての依存性が確実に検出できるように、STLGおよびLDLGフラグは[0]ビットXNORの出力とORがとられなければならない。
【0063】図5にIXS1およびIYS/Dのデータ依存性検査フローチャートを示す。条件付きブロック502で示されるように、DDS108は最初にIXS1およびIXS/Dが同じレジスタ・ファイルに在るかどうかを検査する。もし同じレジスタ・ファイルに存在しないならば依存性はない。これを、ブロック506に示す。依存性が存在するならば、DDC108は、ブロック506に示すように、次にIXS1およびIYS/Dが同じレジスタに在るかどうかを決定する。同じレジスタに存在しない場合、フローは条件付きブロック508へ進み、そこでDDCl08はIYが長語オペレーションであるか否かを決定する。IYが長語オペレーションでない場合、依存性は存在せず、フローはブロック504に進む。IYが長語オペレーションである場合、フローは条件付き文501に進む。そこで、DDC108はIXS1およびIYS/D+1が同じレジスタに存在するか否かを決定する。同しレジスタに存在しない場合、依存性はなく、フローはブロックに進む。IXS1およびIYS/+1が同じレジスタに存在するならば、条件付きブロック512に進み、そこでDDC108はIYが有効な行き先を持っているか否かを決定する。有効な行き先がない場合、依存性は存在せず、フローはブロック504に進む。IYに有効な行き先がある場合、条件付きブロック514に進み、そこでDDC108はIXS1が有効なソースレジスタを持っているか否かを決定する。ここでも、有効なソースレジスタが検出されないならば依存性は存在せず、フローはブロック504に進む。有効なソースレジスタが検出されれば、DDC108はIXS1およびIYS/Dの間に依存性があることを検出したことになる。これはブロック516で示されている。
【0064】データ依存性検査については、同一承継人の出願に係る継続中の出願、関連特許申請、米国出願番号07/860,718号(代理人整理番号SP041)に更に詳しく説明されている。この出願の開示はここに参照文献として含まれているものとする。ある命令がその入力の一つを、他の幾つかの命令によって既に書き込まれているレジスタから取得することが可能であるので、本発明ではどの入力が真の依存性であるかを選択しなければならない。例えば、命令2および5がレジスタ4に書き込み、命令7がレジスタ4から読み出す場合、命令7には二つの依存性があり得る。この場合、プログラムでは命令5は命令2に後続するので、プログラマーの意図とすることは、命令7が命令2の結果ではなく、命令5の結果を使用することであると仮定される。従って、一つの命令が先行する幾つかの命令に依存する場合、RRC112はその命令は先行する命令のうち最高の番号を持つ命令に依存するものとして扱う。
【0065】TAL112は一旦、真の依存性が何処に存在するかを決定した後、各命令の入力を探す必要がある。本発明の推奨実施例では、入力は実際のレジスタ・ファイルまたは一時バッファ116の配列から取得できる。RRC112は、依存性を持たない命令の場合、その命令の全ての入力はレジスタ・ファイルに存在すると仮定する。この場合、RRC112はIFIFO102から取得されたIXS1、IXS2およびIXS/Dアドレスをレジスタ・ファイルに渡す。依存性のある命令の場合、RRC112はデータは一時バッファ116に格納されていると仮定する。RRC112は各命令がどの先行命令に依存するかが分かっているので、そして各命令は常に一時バッファ116中の同じ場所に書き込むので、RRC112は一時バッファ116の何処に命令の入力が保存されているかを決定することができる。RRC112はこれらのアドレスをレジスタ・ファイル読み出しポートl19に送り、レジスタ・ファイル117はその命令がデータを使用できるようにを一時バッファl16から出力する。
【0066】タグ割り当て例を下記に記す。
【0067】0:add r0,r1,r21:add r0,r2,r32:add r4,r5,r23:add r2,r3,r4上記のオペレーションの依存性は下記の通りである(依存性を#記号で記す)。
【0068】I1S2#I0S/DI3S1#I0S/DI3S1#I2S/DI3S2#I1S/D先ずI0に注目するならば、I0は依存性を持たないので、そのタグはその元のソース・レジスタ・アドレスに等しい。
【0069】I0Slタグ=I0Sl=r0I0S2タグ=I0S2=r1I0S/Dタグ=I0S/D+r2I1は1個の依存性を持つのでI1のタグは次の通りである。
【0070】IlS1タグ=IlS1=r0I1S2タダ=I0S/D=t0式中、(t0=一時バッファ中の命令0のスロット)
I1S/Dタグ=IlS/D=r3I2もまた依存性を持たない、独立したものである。
【0071】I2S1タグ=I2S1=r4I2S2タグ=I2S2=r5I3S/Dタグ=I2S/D=r2I3S1にはI0S/DおよびI2S/Dの二つの依存性が有り得る。TAL22は最後の依存性(最大の番号を持つ依存性)を選択しなければならないので、I2S/Dが選択される。
【0072】I3S1タグ=I2S/D=t2I3S2タグ=I1S/D=t1I3S/Dタグ=I3S/D=t4これらのタグは次にバス126を経てRPM124に送られ、イシュア118によって選択される。TAL122はタグを準備すると同時にDCL130の出力を監視し、それらの出力をバス120を使用してイシュア118に送る。それを行なうに当たり、TAL122はRPM124に送るタグを選ぶのと同じ方法でDCL130の適切な出力を選択してイシュア118に送る。
【0073】この例を更に説明するならば、TAL122は下記のレディー信号をイシュア118に送る。
【0074】I0S1INFO=1(命令0は独立した命令であるので、直ちに起動できる)。
【0075】I0S2INFO=1I0S/DINFO=1IlS1INFO=1IlS21NFO=DONE[0]
(I0が済んだ時DONE[0]=1)
I1S/DINFO=1I2S1INFO=1I2S2INFO=1I2S/DINFO=1I3S1INFO=DONE[2]
I3S2INFO=DONE[1]
I3S/DREAD=1(DONE信号はバス132を経てDCL130から送られる。本発明においては「済んだ(done)」とは命令の結果が一時バッファに在るか、さもなくば機能ユニットの出力に於いて使用可能であることを意味する。一方、「終了(terminate)」とは命令の結果がレジスタ・ファイルに存在することを意味する)
次に図3を参照しつつTAL122の代表的ブロック図を説明する。TAL122は8個のタグ割り当て論理ブロック304で構成されている。各TALブロック302は対応するデータ依存性結果、およびコンピュータの命令解読および制御論理(図示せず)から送られる更なる信号を複数のバス114を経て受け取る。BKTビット信号はタグの最下位ビットを形成する。DONE[X]フラグは命令0から6までのものであり、命令Xが済んだか否かを通知する。DBLREG[X]フラグは命令のうち一つが倍長ワードであるならば、どれが倍長ワードであるかを通知する。各TALブロック302はそれ自身の命令レジスタ・アドレスを入力として受け取る。その他の信号であるDBLREGおよびBKT信号は全てインプリメンテーション依存の制御信号である。各TALブロック302はIXS1、IXS2およびIXS/Dというラベルを持つ6ビットの、3個のタグ126を出力する。TAL122は各タグ信号の最下位の5ビットをRPMs124に出力し、最上位のタグをイシュア118に出力する。
【0076】図3の各ブロック302は3個の優先エンコーダ(PE)で構成されている。これらのPEはそれぞれS1、S2、およびS/D用である。しかし、一つの例外がある。すなわち、I0はタグの割り当てを必要としないのである。I0は常に独立しているので、その各タグは元のS1、S2、およびS/Dのアドレスと同一である。
【0077】典型的なPEを図10に示す。PE902は8個の入力904および8個の出力906を持つ。PE902の入力904はDDC108からの出力114であり、これらの出力は何処に依存性が存在するかを示すものである。例えば、ソース・レジスタ1(S1)の場合、I7S1タグ割り当てPE902の7個の入力はDDC108の7個の出力114であり、それらはI7S1が16Dに依存しているか否か、I7S1がI5Dに依存しているか否か、等、そしてI7S1がI0Dに依存しているか否か、までを通知する。参照番号908で示される第8入力は常にPE902からの出力であるので、常に高位でタイとなる。
【0078】上記のように、一つの命令が先行する幾つかの命令に依存する場合、PE902は依存性が存在する先行命令のうち最も古い(プログラム順で)命令だけを選択し、出力する。これは、最も古い先行命令への依存性があるか否かを示す信号をPE902の最優先順位の入力に接続し、2番目に古い先行命令への依存性があるか否かを示す信号をPE902の最優先順位が2番目の入力に接続する、というふうに、すべての先行命令を接続することによって行なわれる。PE902の最低優先順位の最も低い入力は常に高位にタイとなり、従って、PE902の出力のうち少なくとも1個のものが確定される。
【0079】出力906はMUX910の選択ラインとして使用されるMUX910には8個の入力912があり、それらに各命令のタグが付く。
【0080】これを理解するために、I7がI6およびI5に依存すると仮定する。I6の優先順位はI5より高いので、PE902の出力906に於いてI6に対応するビットはハイである。MUX91Oの対応する入力912にはS1用のI6のタグがある(PE902はI7S1の為のものである)。I7はI6に依存するので、I6の結果のロケーションは、I7が使用可能になるように、MUX910から出力しなければならない。従って、I6のタグが選択され出力ライン914に出力される。I6の済みフラグであるDONE[6]もまたMUX914から出力して、イシュアll8が、いつI7の入力がレディーであるか分かるようにしなければならない。このデータはバス120を経てイシュアl18に送られる。命令には最大3個までのソースがあるので、TAL122は各命令に対して最大3個までの依存性を監視し、各命令に関して3個のベクトル(合計24個のベクトル)をイシュアll8に送る。独立した命令の場合、TAL122はその命令は直ちに開始できることをイシュアl18に通知する。
【0081】RPMs124に送られるタグ出力のMSBは、アドレスがレジスタ・ファイル・アドレスであるか、一時バッファ・アドレスであるかを通知するのに使用される。独立した命令の場合、5個のLSB出力はソース・レジスタ・アドレスを示す。依存性を持つ命令の場合、第2MSBはアドレスが64ビット・バルブのためのものであることを示す。第3から第5MSB出力は一時バッファ・アドレスを指定するものである。そしてLSB出力はどのバケットがカレント・バケットであるかを示し、このバケットはTAL122中のBKT信号に等しい。
【0082】DDCl08と同じく、TAL122は多数のインプリメンテーション依存(すなわち、特殊なケース)を待つ。先ず、本発明の一実施例では、レジスタ・ファイルのレジスタ番号0は常に0に等しい。斯くして、一つの命令がレジスタ0に書き込み、別の命令がレジスタ0から読み出すことがあっても、これらの命令間には依存性はない。各命令に関し、TAL122は命令解読論理(ILD、図示せず)から3個の信号を受け取る。これらの信号はその命令のソースの一つがレジスタ0であるか否かを通知するものである。それらのソースのうち一つでも確定されると、TAL122はその命令のその特定の入力に関連する一切の依存性を無視する。
【0083】ある条件下で別の特殊なケースが発生するが、その条件とはバケット0中の命令がバケット1中のどの命令からも依存されないことが保証されているということである。BKTl_NODEP_と呼ばれる4ビットの信号がIEU制御論理(図示せず)からRRCl12に送られ、BKT1_NODEP[X]=1である場合、RRCl12は命令4、5、6、または7と命令Xとの間の依存性を一切無視すべきものとして扱う。
【0084】命令7のソース1(I7S1)のタグ割り当ての一例を図6、図7のフローチャートに示す。条件付きブロック602に示す如く、TAL122は最初にI7Slがレジスタ0であるか否かを決定する。I7の第1ソースオペランドがレジスタ0であるならば、タグはゼロに設定され、I7SlのINFOフラグもブロック604に示される如く1に設定される。I7の第1ソースオペランド(S1)がレジスタ0でない場合、条件付きブロック606に示すように、TAL122は次にI7SlがI6S/Dに依存するか否かを決定する。I7S1がI6S/Dに依存する場合、フローはブロック610に進む。ここで、ブロック610に示すように、I7Slのタグは{1,DBLREG[6],0,1,0,BKT}に等しいように設定され、I7S1のINFOフラグはDONE[6]に等しいように設定される。条件付きブロック606でテストされた条件のうちどちらかが満たされない場合、フローは条件付きブロック612に進む。ここで、TAL122はI7SlがI5S/Dに依存しているか否かを決定する。依存性がある場合、フローはブロック616に進み、ここでTAL122はI7S1のタグを[1,DBLREG[5],0,0,1,BTK]に設定し、I7S1のINFOフラグをDONE[5]に設定する。条件付きブロック612でテストされた条件が満たされない場合、フローはブロック618に進み、ここで、TAL122はI7S1がI4S/Dに依存しているか否かを決定する。
【0085】図6および図7の残りの部分を一見すれば明らかな如く、I7S1がI4S/D、I3S/D、I2S/D、I1S/D、およびI0S/Dに依存しているか否かに基づいて、同じようなタグの決定が行なわれる。これをセクション620、622、624、626、および628でそれぞれ示す。そして最後に、命令7が命令0から独立しているか、あるいは条件付きブロック630でテストされるように、バケット1の全ての命令が命令0から独立しているならば(すなわち、BKT1_NODEP[0]=1であるならば)、フローはブロック632に進み、ここでTAL122はI7Slのタグを{0,I7Sl}に設定し、I7SlのINFOフラグを1に設定する。上記の例で留意すべきことは、I7S1タグ信号にはレジスタ・ファイル117のレジスタ・ファイル・ポートMUXesが直接送られることである。17のS1入力がレディーになると、イシュアl18に通知するためにI7S1INFO信号がイシュア118に送られる。
【0086】図11にイシュアl18の代表的ブロック図を示す。推奨実施例では、確保する必要のある各リソース(機能ユニット)ごとに、イシュア118はスキャナーブロック1002を持っている。この例では、イシュア118はスキャナーブロックFUl、FU2、FU3、FU4、……、FUnを持っている。機能ユニットヘの要求は既知の方法で解読論理(図示せず)によって命令情報から発せられる。これらの要求はバス123を経てスキャナーブロック1002に送られる。各スキャナーブロック1002は命令I0からI7をスキャンし、そのサイクルでサービスされるように、対応する機能ユニットの最初の要求を選択する。
【0087】複数のレジスタ・ファイル(整数、浮動小数および/またはブール値)の場合、イシュア118は異なるレジスタ・ファイルに格納されたオペランドを持つ命令を発行することができる。例えば、ADD命令は浮動小数レジスタ・ファイルからの第一オペランド、および整数レジスタからの第二オペランドを持っことができる。一般に、異なるレジスタ・ファイルからのオペランドを持つ命令は高い発行優先順位を与えられる(すなわち、これらの命令は最初に発行される)。この発行手法により、プロセッサの実行時間および機能ユニットのリソースの節約が可能となる。
【0088】IEUl00に2個のALUが含まれている更なる実施例では、ALUのスキャンは更に複雑になる。実行速度を上げるために、1個のALUスキャナーブロックはI0からI7をスキャンし、もう1個のALUスキャナーブロックはI7からI0をスキャンする。このようにして2個のALU要求が選択される。この方法では、バケット1にあるALU命令の前にバケット1にあるALU命令が発行されることが可能であり、同時にスキャニングの効率の向上が計れる。
【0089】スキャナー出力1003はMUXing logic 1004によって選択される。MUX1004の1組のSELect入力1006はパス120を経てTAL122から3個の8ビットベクトル(各オペランドに1個)を受け取る。ベクトルは8個の命令のうちどれが依存性なしの命令で、発行可能な状態にあるかを通知する。イシュア118は命令を発行する前にこの情報を待たなければならない。イシュア118はこれらのベクトルを監視し、これら3個のベクトルの全てが特定の命令に対してハイになると、イシュア118はその命令がレディーであると関知する。必要な機能ユニットがレディーになると、イシュアはその命令を発行して、選択信号をレジスタ・ファイル・ポートMUXesに送り、対応する命令の出力をレジスタ・ファイル117に送ることができる。
【0090】本発明の推奨実施例では、イシュア118が済んだ後、イシュア118は各レジスタ・ファイルごとに2個の8ビットベクトルをRRC112に返しMUXOUTputs1008を通してパス121に送る。これらのベクトルはこのサイクルでどの命令が発行されたかを示し、RPMs124用のラインを選択するために用いられる。
【0091】各レジスタ・ファイルが同時に発行できる命令の最大数は使用可能なレジスタ・ファイル読み出しポートの数で制約されている。データ依存性に先行する未完了の命令があると、命令の発行が抑制されることがある。更に、必要な機能ユニットが別の命令に割り当てられていても命令の発行が抑制されることがある。
【0092】ロード・イミディエイト命令、ブール値オペレーション、および相対的条件分岐のような幾つかの命令は他に依存せずに発行できる。なぜならば、レジスタ・ファイル読み出しポート以外のリソースを必要としない、あるいは依存性を持つ可能性がないからである。
【0093】RRC112の最後のセクションはレジスタ・ファイル・ポートMUX(RPM)セクション124である。RPMs124の役割は、イシュア118がレジスタ・ファイル117からデータを取得して各命令が使用できるような方法を提供することである。RPMs124はバス126を経てタグ情報を受け取り、RPMs124用の選択ラインはバス121を経てイシュア118から、またコンピュータのIEU制御論理からも得られる。選択されたタグは、バス128を用いてレジスタ・ファイル117の所定の1組のポート119に送られる読み出しアドレスで構成されている。
【0094】RPMs124の数とデザインはレジスタ・ファイルの数、および各レジスタ・ファイル上のポートの数に依存する。図4にRPMs124の一実施例を示す。この実施例において、RPMs124は3個のレジスタ・ポート・ファイルMUXes、402,404、および406で構成されている。MUX402はTAL122によって生成されたソース・レジスタ・フィールドS1に対応する命令0−7のタグを入力としい受け取る。MUX404はTAL122によって生成されたソース・レジスタ・フィールドS2に対応する命令0−7のタグを入力として受け取る。MUX406はTAL122によって生成されたソース/行き先レジスタ・フィールドS/Dに対応する命令0−7のタグを入力として受け取る。MUXes402、404、および406の出力はバス128を通してレジスタ・ファイル117の読み出しアドレス・ポートに接続される。
【0095】RRC112およびイシュア118によって、プロセッサは命令を同時に、しかもプログラムに依る順序とは別の順序で実行できる。本発明で使用されるIEUは同一承継人の、関連特許出願、米国出願番号07/817,810号(代理人整理番号SP015/1397.0280001)に開示されている。この開示はここに参照文献として含まれているものとする。
【0096】本発明の様々な実施例を上述したが、これらはあくまでも例であり、本発明を制限するものではないことは無論である。従って、本発明の範囲および広がりは上記の実施例で制限されるものではなく、下記の特許請求範囲およびそれと同等のものによってのみ定義されるものである。
【出願人】 【識別番号】000002369
【氏名又は名称】セイコーエプソン株式会社
【出願日】 平成5年3月26日(1993.3.26)
【代理人】 【識別番号】100092495
【弁理士】
【氏名又は名称】蛭川 昌信 (外7名)
【公開番号】 特開2000−148487(P2000−148487A)
【公開日】 平成12年5月30日(2000.5.30)
【出願番号】 特願2000−8147(P2000−8147)