(57)【特許請求の範囲】
【請求項１】
命令クラスに基づき、複数の命令をそれぞれが同種の命令からなる命令の小グループに分ける大域命令スケジューラと、
前記大域命令スケジューラに結合され、前記分けられたそれぞれの命令クラスの命令の小グループを実行するために前記各命令の小グループに対応するとともにそれらの小グループの命令を受け取るよう構成された第１、第２の実行パイプであって、それぞれが、
前記命令の小グループの対応する一つのグループを受け取るローカル命令バッファと、
前記命令の小グループの対応する一つのグループを実行するため、前記ローカル命令バッファに結合する少なくとも一つの実行ユニットと、
前記少なくとも一つの実行ユニットで生成されたローカル・レジスタ・オペランド値を格納するため、前記少なくとも一つの実行ユニットに結合するローカル・レジスタ・バッファと、
前記命令の対応する小グループをスケジューリングするとともに、前記ローカル・レジスタ・オペランド値が前記少なくとも一つの実行ユニットによってソース・オペランド値として使用可能である場合に、前記少なくとも一つの実行ユニットに該ローカル・レジスタ・オペランド値を付与させるよう構成されたローカル命令スケジューラと
を有するよう構成された第１、第２の実行パイプと、
前記第１、第２の実行パイプ間で前記ローカル・レジスタ・オペランド値を転送するため、該第１、第２の実行パイプに接続されたパイプ間バイパスと、
前記第１の実行パイプの一つのローカル・レジスタ・オペランド値が第２の実行パイプのソース・オペランド値として使用可能である場合に、前記第１の実行パイプから第２の実行パイプに当該一つのローカル・レジスタ・オペランド値を転送させるために、前記パイプ間バイパスに結合するアービタと、
前記アービタに結合するとともに大域レジスタ・オペランド値を格納する大域レジスタファイルと、
を有し、さらに、
前記アービタは前記大域レジスタ・オペランド値の一つが前記第１の実行パイプのソース・オペランド値として使用可能である場合に、該大域レジスタ・ファイルから該第１の実行パイプに当該一つの大域レジスタ・オペランド値を転送させるよう構成され、かつ
前記大域レジスタ・ファイルは前記パイプ間バイパスを介して大域レジスタ・ファイルから第１の実行パイプに一つの大域レジスタ・オペランド値を転送することができるよう該パイプ間バイパスに結合していることを特徴とする分散データ・フロー（ＤＤＦ）プロセッサ。
【請求項２】
オペランド依存の有無に基づいて、複数の命令を命令の小グループに分ける大域命令スケジューラと、
前記大域命令スケジューラに結合され、前記分けられたそれぞれの命令の小グループを実行するために前記各命令の小グループに対応するとともにそれらの小グループの命令を受け取るよう構成された第１、第２の実行パイプであって、それぞれが、
前記命令の小グループの対応する一つのグループを受け取るローカル命令バッファと、
前記命令の小グループの対応する一つのグループを実行するため、前記ローカル命令バッファに結合する少なくとも一つの実行ユニットと、
前記少なくとも一つの実行ユニットで生成されたローカル・レジスタ・オペランド値を格納するため、前記少なくとも一つの実行ユニットに結合するローカル・レジスタ・バッファと、
前記命令の対応する小グループをスケジューリングするとともに、前記ローカル・レジスタ・オペランド値が前記少なくとも一つの実行ユニットによってソース・オペランド値として使用可能である場合に、前記少なくとも一つの実行ユニットに該ローカル・レジスタ・オペランド値を付与させるよう構成されたローカル命令スケジューラと
を有するよう構成された第１、第２の実行パイプと、
前記第１、第２の実行パイプ間で前記ローカル・レジスタ・オペランド値を転送するため、該第１、第２の実行パイプに接続されたパイプ間バイパスと、
前記第１の実行パイプの一つのローカル・レジスタ・オペランド値が第２の実行パイプのソース・オペランド値として使用可能である場合に、前記第１の実行パイプから第２の実行パイプに当該一つのローカル・レジスタ・オペランド値を転送させるために、前記パイプ間バイパスに結合するアービタと、
前記アービタに結合するとともに大域レジスタ・オペランド値を格納する大域レジスタファイルと、
を有し、さらに、
前記アービタは前記大域レジスタ・オペランド値の一つが前記第１の実行パイプのソース・オペランド値として使用可能である場合に、該大域レジスタ・ファイルから該第１の実行パイプに当該一つの大域レジスタ・オペランド値を転送させるよう構成され、かつ
前記大域レジスタ・ファイルは前記パイプ間バイパスを介して大域レジスタ・ファイルから第１の実行パイプに一つの大域レジスタ・オペランド値を転送することができるよう該パイプ間バイパスに結合していることを特徴とする分散データ・フロー（ＤＤＦ）プロセッサ。
【請求項３】
第１、第２の実行パイプを備えた分散データ・フロー（ＤＤＦ）プロセッサにおける命令スケジューリング及び実行方法において、
大域命令スケジューラによって、命令クラスに基づき、複数の命令をそれぞれが同種の命令からなる命令の小グループに分けるステップと、
前記各命令の小グループに対応するとともにそれらの小グループの命令を受け取るよう構成された第１、第２の実行パイプに、前記大域命令スケジューラによって分けられたそれぞれの命令の小グループを転送するステップと、
前記各実行パイプに設けられたローカル命令スケジューラが当該実行パイプ内に転送された前記命令の小グループをスケジューリングするステップと、
前記第１の実行パイプによって生成されたローカル・レジスタ・オペランド値を該第１のソース・オペランド値として使用するステップと、
前記第２の実行パイプによって生成されたローカル・レジスタ・オペランド値が第１の実行パイプにおいて第２のソース・オペランド値として使用可能である場合に、該ローカル・レジスタ・オペランド値を、前記第１、第２の実行パイプを結合しているパイプ間バイパスを介して第１の実行パイプに転送するステップと、
大域レジスタ・ファイルからの大域レジスタ・オペランド値が第１の実行パイプにおいて第３のソース・オペランド値として使用可能である場合に、該大域レジスタ・オペランド値を、前記大域レジスタ・ファイルと結合しているパイプ間バイパスを介して第１の実行パイプに集めるステップと、
から成る分散データ・フロー（ＤＤＦ）プロセッサにおける命令スケジューリング及び実行方法。
【請求項４】
第１、第２の実行パイプを備えた分散データ・フロー（ＤＤＦ）プロセッサにおける命令スケジューリング及び実行方法において、
大域命令スケジューラによって、オペランド依存の有無に基づき、複数の命令を命令の小グループに分けるステップと、
前記各命令の小グループに対応するとともにそれらの小グループの命令を受け取るよう構成された第１、第２の実行パイプに、前記大域命令スケジューラによって分けられたそれぞれの命令の小グループを転送するステップと、
前記各実行パイプに設けられたローカル命令スケジューラが当該実行パイプ内に転送された前記命令の小グループをスケジューリングするステップと、
前記第１の実行パイプによって生成されたローカル・レジスタ・オペランド値を該第１のソース・オペランド値として使用するステップと、
前記第２の実行パイプによって生成されたローカル・レジスタ・オペランド値が第１の実行パイプにおいて第２のソース・オペランド値として使用可能である場合に、該ローカル・レジスタ・オペランド値を、前記第１、第２の実行パイプを結合しているパイプ間バイパスを介して第１の実行パイプに転送するステップと、
大域レジスタ・ファイルからの大域レジスタ・オペランド値が第１の実行パイプにおいて第３のソース・オペランド値として使用可能である場合に、該大域レジスタ・オペランド値を、前記大域レジスタ・ファイルと結合しているパイプ間バイパスを介して第１の実行パイプに集めるステップと、
から成る分散データ・フロー（ＤＤＦ）プロセッサにおける命令スケジューリング及び実行方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ・プロセッサ・アーキテクチャの分野に関する。具体的には、本発明はコンピュータ・プロセッサにおける分散制御の分野に関する。
【０００２】
【従来の技術】
単一の実行ユニットを有するプロセッサを備えたコンピュータの処理速度は、主として２つの要因によって左右される。第１の要因は、命令サイクル・タイムである。第２の要因は、アーキテクチャ／マイクロアーキテクチャおよびその実施態様の並列性または複雑さ、すなわち、各命令について実行ユニットが実行できる計算の総量である。したがって、このようなプロセッサの有効な処理速度は、サイクル・タイムを減らすか、マイクロプロセッサの並列性を高めるか、あるいはその両方によって向上させることができる。
【０００３】
しかし、上記の２つの要因は両立しないことが多い。一方の要因を最適化すると、他方の要因を犠牲にしなければならないことがある。たとえば、アーキテクチャを強化して、２次元配列の浮動小数点数を乗算する命令を組み込むと、その命令のサイクル・タイムが増える。逆に、平均サイクル・タイムを最小限にするためには、命令セットに単純な命令だけを組み込まなければならない。パイプライン方式は複雑な命令に伴うサイクル・タイムの増加を軽減することができるが、パイプライン方式によって命令待ち時間も増える。
【０００４】
性能を向上させるために、複数の命令を同時に実行することが可能な複数の実行ユニットを有するデータ・フロー・プロセッサなど様々なプロセッサ・アーキテクチャが探求されてきた。商業的に実用化されているものとしては、ＬＳＩロジックの「ライトニング」やヒュンダイ・エレクトロニクスの「サンダー」ＳＰＡＲＣプロセッサなどがある。従来のソフトウェア命令は一般に順次プログラム順に作成、実行されるが、実際には命令のオペランド相互依存が１００％であることはめったにないこと、すなわち、前の命令がすべて実行されるまではどの命令も実行できないということはめったにないという所見から、データ・フロー・プロセッサの基本アーキテクチャが発展した。命令オペランド相互依存は一般には５０％未満である。したがって、いくつかの独立した命令を１つのサイクルで別々の実行ユニットによって同時に処理することが可能である。さらに、命令オペランド相互依存は、並列指向ソフトウェア・プログラミング言語およびコンパイラ技法を用いることによって減少させることができる。
【０００５】
図１は、複数の実行ユニットを有する従来のデータ・フロー・プロセッサ・アーキテクチャを示すブロック図である。データ・フロー・プロセッサ１００は、命令キャッシュ・メモリ１１０、先取りバッファ１２０、予測レジスタ・ファイル１３５を有する集中命令スケジューラ１３０、複数の実行ユニット１４１、１４２、．．．１４９、およびレジスタ・ファイル／メモリ１９０を備えている。先取りバッファ１２０は、命令キャッシュ・メモリ１１０と集中命令スケジューラ１３０の間に結合されている。レジスタ・ファイル／メモリ１９０は集中命令スケジューラ１３０に結合されている。複数の実行ユニット１４１、１４２、．．．１４９はそれぞれ、集中命令スケジューラ１３０に結合されている。
【０００６】
データ・フロー・プロセッサ１００によって各命令が処理されるとき、命令は保留、発行済み、完了、およびリタイアの４つの状況の１つをとる。命令が保留中であるとは、使用可能な実行ユニットや１つまたは複数のソース・オペランドを待つ間、命令が命令キャッシュ１１０から取り出され、先取りバッファ１２０に格納されている場合である。発行済み状態では、集中命令スケジューラ１３０によって実行ユニット１４１に対して命令が出され、命令のソース・オペランドが使用可能である。次に、命令は完了、すなわち実行ユニット１４１によって実行される。最後に命令はリタイアされる。リタイアされると、適切な実行ユニット、たとえば１４１がリタイアされた命令の状況と結果値を集中命令スケジューラ１３０の先取りレジスタ・ファイル１３５に返して、プロセッサ１００のそれに対応する命令状況を更新する。集中命令スケジューラ１３０は、実行ユニット１４１などの資源を実行ユニットの自由プールに返し、リタイアされた命令の宛先オペランド値をレジスタ・ファイル１９０に転送する。
【０００７】
集中命令スケジューラ１３０には複数の実行ユニット１４１、１４２、．．．１４９があるため、理論的には、データ・フロー・プロセッサ１００は最大Ｎ個の発行済み命令を持つことができる。この場合、Ｎは実行ユニットの総数に各実行ユニット内のステージ数を掛けた数である。したがって、オペランド相互依存がない理想的な命令のセットでは、Ｎ個の発行済み命令を同時に実行することもできる。実際には、通常、Ｎ個の発行済み命令の間にはいくらかのオペランド依存があり、発行済みのいくつかの命令の実行は、それより古い他の命令がすべて完了してソース・オペランド値が使用可能になるのを待つ間、遅らせなければならない。先取りレジスタ・ファイル１３５は、別々の実行ユニットに対して出された命令の間のオペランド相互依存を満たすために必要なオペランド値の一時保管場所の役割を果たす。レジスタ・ファイル１３５は、プログラマにとって可視のファイルまたは永続レジスタ・ファイルとは異なる。たとえば、プログラマ可視ファイルには、対応するレジスタ設定命令が実行中に打ち切られた場合に無効化される可能性のある一時レジスタ値が含まれていることがある。それに対して、レジスタ・ファイル１３５は、プログラマにとって透過、すなわち見えないファイルであり、集中命令スケジューラ１３０がアクセスすることが可能なレジスタの専用プールとして使用される。したがって、中程度の量の並行処理を行うことができ、それによってデータ・フロー・プロセッサ１００は、単一の実行ユニットを有する従来のプロセッサと比較してより高い命令スループットを実現することができる。
【０００８】
残念ながら、この中程度の処理速度の高速化に伴って、すべての命令をスケジュールし、すべての実行ユニット１４１、１４２、．．．１４９の状況を追跡するためのプロセッサ１００の制御回路が指数関数的に複雑化する。集中命令スケジューラ１３０によって維持されるこの制御情報とオペランド情報は、実行ユニット１４１、１４２、．．．１４９の数の増加や先取りバッファ１２０内の保留中の命令数の増加につれて大幅に増える。したがって、従来のデータ・フロー・プロセッサ１００は、単一命令スケジューラ１３０がこの大量の制御情報とデータ情報を維持できる能力によって厳しく制限されている。さらに、プロセッサ１００のスケーラビリティは、実行ユニット１４１、１４２、．．．１４９を制御するために必要な集中命令スケジューラ１３０の回路の複雑化によって制限される。
【０００９】
【発明の要旨】
本発明は、分散データ・フロー（ＤＤＦ）プロセッサの複数の実行パイプを制御する多重レベル命令スケジューリング・システムを提供する。この多重レベルスケジューリング・システムは、単純な大域命令スケジューラと複数のローカル命令スケジューラを備えている。各ローカル命令スケジューラにはそれぞれの実行パイプの１つが関連づけられている。大域命令スケジューラは、実行パイプに命令を分配することだけを行う。したがって、その回路は従来の集中命令スケジューラに比べて単純であり、他の制御機能はローカル命令スケジューラにゆだねられる。同様に、各ローカル命令スケジューラは、分配された命令の分担分のスケジューリングおよび数の減少した命令とそれに対応する実行パイプの実行ユニットとのマッチだけを行うため、ローカル命令スケジューラも集中命令スケジューラに比べて単純である。多重レベル・スケジューリング・システムが単純化される結果、ＤＤＦプロセッサは容易に拡張可能になる。
【００１０】
大域命令スケジューラは、たとえば浮動小数点、整数、またはブールなどの命令クラスやオペランド依存などの適切な基準に基づいて、各実行パイプに命令を分配する。実行パイプに命令が分配されると、それぞれのローカル命令スケジューラはその命令の実行をスケジューリングすることだけを担当する。命令のソース・オペランド値が入手可能な場合、命令は実行パイプの使用可能な実行ユニットとマッチさせられる。命令のソース・オペランド値は、３通りの方法の１つで取り出される。
【００１１】
第１に、ローカル命令スケジューラは、ローカルで生成されたレジスタ・オペランド値が、実行パイプに分配されたより若い命令によって使用されるように、ローカル・レジスタ・バッファに格納されるようにする。したがって、ローカルで生成されたレジスタの結果値はローカルで、すなわち実行パイプ内で迅速に使用可能になり、外部アクセスの必要がない。言い換えると、パイプ間オペランド依存が、ローカル命令スケジューラによってローカルで迅速に解決される。
【００１２】
第２に、ローカル・レジスタ・バッファに命令のソース・オペランド値が入っていない場合、アービタに対してパイプ間オペランド要求が行われる。パイプ間オペランド相互依存の解決を行うアービタは、その要求をすべての実行パイプまたは一部の実行パイプに同報通信することができる。あるいは、アービタは大域命令スケジューラに問い合わせて、必要なソース・オペランドを持つ別の実行パイプの識別子を取り出す。他の実施態様では、各命令の必要なオペランドのソース、すなわち実行パイプの識別子が、命令とともに送られ、それによってその後のソース・オペランド値の生成が簡単になる。オペランド値を別の実行パイプから入手可能な場合、第１の実行パイプと第２の実行パイプを結合するパイプ間バイパスを介してソース・オペランドの転送が開始される。
【００１３】
第３に、ソース・レジスタ・オペランド値が他のどの実行パイプでも見つからない場合、レジスタ・オペランド値は大域レジスタ・ファイルから取り出される。次に、要求されたオペランド値は、第１の実行ユニットを大域レジスタ・ファイルに結合するパイプ間バイパスを介して転送される。
【００１４】
すべてのソース・オペランド値が実行パイプに転送されると、命令が実行パイプ内の使用可能な実行ユニットとマッチさせられる。最終的に、命令はその実行パイプ内で実行を完了し、リタイアされる。実行パイプによって生成された結果のオペランド値は、大域レジスタ・ファイルに書き込まれる。さらに、ローカル命令スケジューラは、実行の完了を大域命令スケジューラに通知し、それによって命令の処理が完了する。
【００１５】
本発明の分散データ・フロー（ＤＤＦ）プロセッサには、従来のデータ・フロー・プロセッサより優れたいくつかの利点がある。そのいくつかは、大域命令スケジューラとローカル命令スケジューラのスケジューリングを単純化する階層多重レベル・スケジューリングによる利点である。単純化された大域命令スケジューラは、実行パイプからの命令状況情報を処理するだけで済み、オペランド値を扱う必要がなくなる。したがって、ＤＤＦプロセッサは容易に拡張可能で、それに伴って大域およびローカル命令スケジューラの回路が複雑化することなく、追加の実行パイプを付加することができる。
【００１６】
この複数実行パイプ・アーキテクチャは、マルチタスク、システム例外／トラップ処理、および、たとえば命令分岐予測技法のような先取り実行などのソフトウェア最適化技法に役立つ。たとえば、ＤＤＦプロセッサは、個々のタスクを別々の実行パイプで実行することによってマルチタスクを行うことができる。同様に、それぞれの累積確率に基づいて、別々の実行パイプで実行する複数の計算パスを選択することによって、先取り実行を行うことができる。
【００１７】
複数実行パイプ・アーキテクチャの他の利点としては、実行パイプ間の制御／クロック同期論理回路の減少がある。たとえば、各バイパスを介したパイプ間交信が同期化されると同時に、各実行パイプはそれぞれの固有のクロック速度で、固有の同期またはクロック方法を用いて動作することができる。さらに、様々な実行パイプのクロック速度をそれぞれの機能に応じて最適化することができる。
【００１８】
【発明の実施の形態】
以下の説明では、多くの詳細によって本発明を十分に理解することができる。これらの詳細には、開発者が分散データ・フロー（ＤＤＦ）プロセッサを実現するための手助けとなる機能ブロックとスケジューリング基準例が含まれている。さらに、本発明のＤＤＦプロセッサについて、特定の実施形態を参照しながら説明するが、本発明はデータ・フローと非データ・フローの両方のアーキテクチャおよび環境に適用可能である。他の実施形態では、本発明が不必要に不明瞭にならないように、周知の回路および構造については説明しない。
【００１９】
図２は、本発明の１つの実施形態に従ったＤＤＦプロセッサ・アーキテクチャを示すブロック図である。ＤＤＦプロセッサ２００は、命令キャッシュ・メモリ２１０、複数の先取りバッファ２２１、２２２、．．．２２９、大域命令スケジューラ２３０、複数の実行パイプ２４１、２４２、．．．２４９、１つまたは複数のパイプ間バイパス２５１、．．．２５９、アービタ２６０、および大域レジスタ・ファイル／メモリ２９０を備えている。各命令パイプは、固有のローカル命令バッファ、ローカル命令スケジューラ、実行ユニット、および一時ローカルレジスタ・バッファを備えている。たとえば、命令パイプ２４１は、ローカル命令バッファ２４１ａ、ローカル命令スケジューラ２４１ｂ、実行ユニット２４１ｃ、およびローカル・レジスタバッファ２４１ｄを備えている。同様に、命令パイプ２４２はローカル命令バッファ２４２ａ、ローカル命令スケジューラ２４２ｂ、実行ユニット２４２ｃ、およびローカル・レジスタバッファ２４２ｄを備えている。したがって、実行パイプ２４１の動作の説明は他の実行パイプ２４２、．．．２４９にも等しく適用可能である。
【００２０】
命令キャッシュ２１０と大域命令スケジューラ２３０の間に、先取りバッファ２２１、２２２、．．．２９２が結合されている。大域命令スケジューラ２３０にはローカル命令バッファ２４１ａ、２４２ａ、．．．２４９ａを介して実行パイプ２４１、２４２、．．．２４９がそれぞれ接続されている。実行パイプ２４１、２４２、．．．２４９は相互に接続されており、１つまたは複数のパイプ間バイパス２５１、．．．２５９によってレジスタ・ファイル２９０にも接続されている。アービタ２６０が、バイパス２５１、．．．２５９、大域命令スケジューラ２３０、およびレジスタ・ファイル２９０に接続されている。
【００２１】
本発明の他の態様に従うと、ＤＤＦプロセッサ２００は、複数の命令を処理するための階層多重レベル・スケジューリング構造を備えている。大域命令スケジューラ２３０は、実行パイプ２４１、２４２、．．．２４９に命令を割り振って分配することを必要とする最上位レベルのスケジューリングを行う。それに対して、ローカル命令スケジューラ２４１ｂ、２４２ｂ、．．．２４９ｂは、命令を実行ユニットとマッチさせ、それぞれ実行パイプ２４１、２４２、．．２４９に命令のソース・レジスタ・オペランド値を入手することを必要とする、より低いレベルのスケジューリングを行う。
【００２２】
１つの実施形態では、以下のようにして命令が処理される。まず、大域命令スケジューラ２３０が先取りバッファ２２１、２２２、．．．２２９を介して命令キャッシュ２１０から命令を取り出す。次に、大域命令スケジューラ２３０は、それらの命令を実行パイプ２４１、２４２、．．．２４９に分配する。別々の実行パイプに分配された命令間のオペランド依存を最小限にするために、命令クラスまたはオペランド依存による分配など適切な資源（実行パイプ）割り振り基準を実施することができる。一般に、浮動小数点、整数、およびブール命令はそれぞれ浮動小数点、整数、およびブール・オペランドに対して実行されるため、命令クラスによる分配は有効である。好ましい実施形態では、命令は大域命令スケジューラ２３０によってその命令のソース・オペランドに関する情報とともに分配される。
【００２３】
それぞれの実行パイプに命令が分配された後は、大域命令スケジューラ２３０は命令間のオペランド相互依存の解決は行わない。実行パイプ２４１、２４２、．．．２４９、たとえばパイプ２４１に命令が分配されると、それぞれのローカル命令スケジューラ２４１ｂ、２４２ｂ、．．．２４９ｂ、たとえばスケジューラ２４１ｂが、命令のローカル・スケジューリングを担当する。命令は次に、大域命令スケジューラ２３０によって、それぞれのローカル命令バッファ２４１ａ、２４２ａ、．．．２４９ａ、たとえばバッファ２４１ａにロードされる。次に、ローカル命令スケジューラ２４１ｂはローカル・バッファ２４１ａから実行可能になっている命令を取り出し、実行ユニット２４１ｃに命令をディスパッチする。
【００２４】
実行パイプ２４１内の命令は、必ずしも大域命令スケジューラ２３０によって分配された順序で実行されるわけではないことに留意されたい。これは、命令スケジューラ２４１ｂによるローカル・スケジューリングが、実行パイプ２４１内の空き実行ユニット２４１ｃの可用性と、ローカル命令バッファ２４１ａ内の命令のソース・オペランドの可用性とに基づいて行われるためである。たとえば、バッファ２４１ａ内の古い方の（プログラムの順でより早い方の）命令がソース・オペランドを待っている間に、バッファ２４１ａ内のより若い（プログラムの順でより遅い）命令が、必要なソース・オペランド値がすべて揃って、実行可能になることがある。その場合、近い実行ユニットが使用可能であれば、若い方の命令がディスパッチされる。
【００２５】
本発明の他の態様に従うと、レジスタ・オペランド値への迅速なアクセスを容易にするため、ローカル命令スケジューラ２４１ｂは、ローカルで生成されたレジスタ・オペランド値をローカル・レジスタ・バッファ２４１ｄに格納し、実行パイプ２４１に分配されたより若い命令がソース・オペランド値として使用できるようにする。その結果、ローカルで生成されたレジスタの結果値はすべてローカルで、すなわち実行パイプ２４１内で入手可能になり、実行パイプ２４１の外部へのアクセスが不要になる。言い換えると、パイプ間オペランドの相互依存はローカル命令スケジューラ２４１ｂによって解決される。プログラムの正常実行時には、レジスタ・バッファ２４１ｄ内のそれぞれのレジスタは再使用の前に名前変更されるため、ローカル命令スケジューラ２４１ｂによるレジスタ・バッファ２４１ｄに格納されているオペランド値の無効化は不要である。
【００２６】
大域レジスタ・ファイル２９０と複数のローカル・レジスタ・バッファ２４１ｄ、２４２ｄ、．．．２４９ｄを備えた階層レジスタ・ファイル・システムは、以下のような理由で従来の技術より優れている。単一の集中レジスタ・ファイルは、大容量高速大域メモリを多数の実行ユニットと相互接続することによってきわめて広いシリコン面積を要し、入出力ポートの多いきわめて複雑な回路を必要とするため、理想的ではない。この拡大は、大域メモリのサイズや実行ユニットの数が増大するに従って指数関数的に増える。
【００２７】
それに対して、本発明のように、実行ユニットの小さなサブセットの近くに配置された少数の高速レジスタ・バッファを専用化することにより、シリコン面積における著しい不利を生ずることなく、最も頻繁にアクセスされるオペランドへのアクセスの高速化が可能になる。これは、統計的にソース・オペランドの大多数（たとえば＞９０％）が、プログラム順で１０行未満の命令行しか離れていない他の命令によって生成されるためである。したがって、単一の大域レジスタ・ファイルの代わりに、ローカル・レジスタ・バッファ２４１ｄ、２４２ｄ、．．．２４９ｄが大量オペランド・アクセスを効率的に処理し、ＤＤＦプロセッサ２００の回路全体が複雑化しない。その結果、階層レジスタ・ファイル・システムは容易に拡張可能である。前記の階層レジスタ・ファイル構成は、複数の実行ユニットを有する他のプロセッサ・アーキテクチャ、たとえば複数の実行ユニットを有する単一のパイプライン・プロセッサにも同様に適用可能であることに留意されたい。
【００２８】
実行パイプ２４１内の命令の１つまたは複数のソース・オペランドがローカル・レジスタ・バッファ２４１ｄ内に見つからない場合（その確率は低い）、実行パイプ２４１がアービタ２６０に対してパイプ間オペランド要求を行う。パイプ間オペランド相互依存の解決を行うアービタ２６０は、必要なソース・オペランドを持っている実行パイプの識別子を求める要求を出す。オペランド値が別の実行パイプにある場合、そのソース・オペランドを持っている実行パイプ、たとえばパイプ２４２の識別子を大域命令スケジューラ２３０から受け取ると、アービタ２６０はパイプ間バイパス２５１、．．．２５９のうちの適切な１つを介してそのソース・オペランドの転送を開始する。通例、パイプ間バイパスは類似したクラスの実行ユニットを有する実行パイプを相互接続するために必要なものである。たとえば、実行パイプ２４１、２４２、．．．２４９の第１の対と第２の対が、それぞれ浮動小数点実行パイプと整数実行パイプであるとすれば、第１のバイパスが浮動小数点実行パイプの対を相互接続し、第２のバイパスが整数実行パイプの対を相互接続することができる。
【００２９】
したがって、アービタ２６０の主たる機能は、パイプ間オペランド値トラフィックを調整することである。ある種の実施形態では、アービタ２６０は、たとえば大域命令スケジューラ２３０に問い合わせることによって、必要なソース・オペランド値のある場所（実行パイプ）を判断することもできる。
【００３０】
ソース・オペランド値がどの実行パイプ２４１、２４２、．．．２４９にも見つからない場合（その確率はさらに低い）、大域レジスタ・ファイル２９０へのアクセス要求が出される。要求されたレジスタ・オペランド値は、大域レジスタ・ファイル２９０から実行パイプ２４１に転送される。必要なソース・オペランド値をその命令がすでにすべて入手していれば、これでその命令と実行パイプ２４１の実行ユニットとのマッチを行うことができるようになる。
【００３１】
同一パイプ２４１内から、パイプ間バイパス２５１を介して他の実行パイプ２４２、．．．２４９から、または大域レジスタ・ファイル２９０から、実行パイプ２４１内の各命令のソース・オペランドがすべて取り出されると、ローカル命令スケジューラ２４１ｂはその命令を実行ユニット２４１ｃのうちの空き実行ユニットとのマッチを行い、その実行ユニットに命令をディスパッチする。実行パイプ２４１のローカル・レジスタ・バッファ２４１ｄを使用することにより、実行パイプ２４１内で生成されたレジスタ値へのローカル・アクセスを高速化することができる。最後に、命令は実行パイプ２４１内で実行を完了し、リタイアされる。実行パイプ２４１によって生成された結果のオペランド値は、次に大域レジスタ・ファイル２９０に書き込まれる。さらに、ローカル命令スケジューラ２４１ｂは実行の完了を大域命令スケジューラ２３０に通知し、それによって命令の処理が完了する。
【００３２】
分散データ・フロー（ＤＤＦ）プロセッサ２００には、従来のデータ・フロー・プロセッサ１００より優れたいくつかの利点がある。利点のいくつかは、大域命令スケジューラ２３０とローカル命令スケジューラ２４１ｂ、２４２ｂ、．．．２４９ｂによってスケジューリングを単純化する階層多重レベル・スケジューリングによるものである。また、ＤＤＦプロセッサ２００の複数の先取りバッファ２２１、２２２、．．．２２９と複数の実行パイプ２４１、２４２、．．．２４９によって実現される、本質的な並列性と同時性による利点もある。
【００３３】
前述のように、大域命令スケジューラ２３０は実行パイプ２４１、２４２、．．．２４９への命令の分配だけを行うため、大域命令スケジューラ２３０の制御回路は従来の集中命令スケジューラ１３０よりも単純である。さらに、各実行パイプをビジーにしておくのに必要な命令の数は、集中命令スケジューラ１３０をビジーにしておくために必要な命令数と比較して少ないため、ローカル命令スケジューラ２４１ｂ、２４２ｂ、．．．２４９ｂの制御回路はそれに対応して単純である。したがって、ＤＤＦプロセッサ２００は容易に拡張可能であり、比較的簡単に、すなわち、大域命令スケジューラ２３０の回路の複雑さが指数関数的に増すことなく、追加の実行パイプを付加することができる。
【００３４】
また、ＤＤＦプロセッサ２００の複数先取りバッファおよび複数実行パイプ・アーキテクチャは、マルチタスク、システム例外／トラップ処理、たとえば命令分岐予測技法のような先取り実行など、ソフトウェアとシステムの最適化技法とにも役立つ。たとえばＤＤＦプロセッサ２００は、各タスクを先取りバッファ２２１、２２２、．．．２２９の個別の１つに分離し、実行パイプ２４１、２４２、．．．２４９の個別の１つで個々のタスクを並行して実行することにより、マルチタスクを行うことができる。マルチタスクをサポートするために複数組のプロセッサ状態が必要になる可能性があるが、実行ユニット２４１ｃ、２４２ｃ、．．．２４９ｃそれぞれの専用のローカル・レジスタ・バッファ２４１ｄ、２４２ｄ、．．．２４９ｄや、データの共有と複数実行タスク／パスの間の連絡のためのパイプ間バイパス２５１、．．．２５９などのハードウェアはすでに存在している。
【００３５】
同様に、ＤＤＦプロセッサ２００では、それぞれの累積確率に基づいて個別の実行パイプでの実行のために複数の計算パスを選択することによって、先取り実行を行うことができる。先取り実行は、マルチタスクの場合と同様、選択された各パスを先取りバッファ２２１、２２２、．．．２２９の個別の１つに分離し、個々のタスクを実行パイプ２４１、２４２、．．．２４９の１つで並行して実行することによって行われる。
【００３６】
これらのマルチタスクや先取り実行などの最適化技法によって、プロセッサ２００では同時に複数のコンテキストを実現することができ、それによって、従来の単一パイプライン・アーキテクチャでは通常、必要悪である、コンテキスト切換えが減少する。コンテキスト切換えオーバーヘッドの減少によって、特にタスクまたはプログラムがページ・フォルトなどの待ち時間の短いイベントを待っているとき、プロセッサ２００の全体の使用効率が向上して有利である。
【００３７】
複数実行パイプ・アーキテクチャのハードウェア上の利点としては、実行パイプ２４１、２４２、．．．２３９の実行ユニット間で必要な制御およびクロック同期が減少することと、より非同期的なアーキテクチャに伴う回路の単純さがある。たとえば、各バイパスを介したパイプ間連絡が同期化されると同時に、個々の実行パイプがそれぞれの固有のクロック速度と固有の同期またはクロック方法で動作することができる。さらに、様々な実行パイプのクロック速度をそれぞれの機能に応じて最適化することができる。
【００３８】
本発明の精神から逸脱することなく、他の変更も可能である。たとえば、上記の分散データ・フロー・アーキテクチャは、パイプライン化など他のソフトウェア技法およびハードウェア技法と組み合わせて実施することができる。したがって、本発明の範囲は以下の請求の範囲によって決定されるものとする。
【図面の簡単な説明】
【図１】  プロセッサの従来のデータ・フロー・アーキテクチャを示すブロック図である。
【図２】  本発明に従った、プロセッサの分散データ・フロー・アーキテクチャを示すブロック図である。
【符号の説明】
２１０  命令キャッシュ／メモリ
２２１  先取りバッファ
２３０  大域命令スケジューラ
２４１ａ  ローカル命令バッファ
２４１ｂ  ローカル命令スケジューラ
２４１ｃ  実行ユニット
２４１ｄ  ローカル・レジスタ・バッファ
２５１  パイプ間バイパス
２６０  アービタ
２９０  大域レジスタ・ファイル／メモリ
【図１】
0003771957.tif 000002
【図２】
0003771957.tif 000003