(57)【特許請求の範囲】
【請求項１】
コンピュータプログラムの命令を効率的に処理するインオーダ型のスーパースケーラ処理システムであって、
複数のパイプラインと、
コンピュータプログラムの複数の命令を受信し、及び該受信した複数の命令に基づき複数の発行グループを規定するよう構成された命令分散ユニットであって、更に、前記発行グループを前記パイプラインに送信するよう構成されており、該発行グループの各々が、前記複数のパイプラインのうちの異なるパイプラインにより同時に処理されるべき複数の命令を有しており、該命令分散ユニットが、前記発行グループの各命令が同発行グループの他の命令の何れに対してもデータ依存性を有さないことが確実となるよう構成されている、命令分散ユニットと、
前記複数の発行グループのうちの１つにおける複数の命令の前記パイプラインによる処理中に該１つの発行グループ中の複数の命令を分析するよう構成された制御機構であって、更に、前記１つの発行グループ中の前記複数の命令の何れかが利用不能なデータに依存するか否かを判定するよう構成され、及び前記利用不能なデータに依存する前記１つの発行グループ中の命令を停止させるよう構成され、及び前記１つの発行グループ中の他の命令の更なる処理を同時に可能とするよう構成されている、制御機構と
を備えている、インオーダ型のスーパースケーラ処理システム。
【請求項２】
コンピュータプログラムの命令を効率的に処理するインオーダ型のスーパースケーラ処理方法であって、
コンピュータプログラムから複数の命令を受信し、
該複数の命令に基づいて複数の発行グループを規定し、該複数の発行グループの各々が、コンピュータプロセッサ内で同時に実行することができる複数の命令を含み、この発行グループを規定するステップが、前記複数の発行グループの各命令が同発行グループの他の命令の何れに対してもデータ依存性を有さないことを確実にするステップを含み、
前記コンピュータプロセッサ内で前記複数の発行グループを複数のステージで処理し、
前記複数の発行グループのうちの１つの発行グループ中の１つの命令を停止させ、
該停止ステップで前記１つの命令が停止されている際に前記１つの発行グループ中の他の命令を別のステージで先行して処理することを可能とし、
前記停止ステップに基づいて前記１つの発行グループ中の他の命令を選択的に停止させて、前記コンピュータプログラムの前記複数の命令がプログラム順に実行を完了させることを確実にする、
という各ステップを有する、インオーダ型のスーパースケーラ処理方法。
【請求項３】
スーパースケーラ処理システムであって、
複数のステージを各々が有する複数のパイプラインと、
複数の命令を受信し、及び該受信した複数の命令に基づき１つの発行グループを規定するよう構成された命令分散ユニットであって、前記１つの発行グループが、プログラム順に前記複数のパイプラインにより順次実行されるべき複数の命令を含み、該複数の命令の各々が、前記複数のパイプラインのうちの異なるパイプラインの対応するステージにより同時に処理される、命令分散ユニットと、
前記複数の命令のうちの１つの命令が利用不能なデータに依存するとの判定に応じて該１つの命令の停止を生じさせるよう構成された制御機構であって、前記１つの命令の前記停止中に該１つの命令よりも若い前記発行グループ中の各命令を停止させるよう構成され、更に、前記１つの命令の前記停止中に、該１つの命令よりも古い前記発行グループ中の命令の、前記複数のパイプラインのうちの１つによる更なる処理を可能にするよう構成されている、制御機構と
を備えている、インオーダ型のスーパースケーラ処理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にコンピュータ処理技術に関し、特に複数の命令をインオーダ式に実行し、該命令の処理を必要に応じて独立して停止させる(stall)スーパースケーラ処理システム及び方法に関する。
【０００２】
【従来の技術】
最も初期のコンピュータプロセッサでは、コンピュータプログラムの未完了状態の命令を完全に実行し、その実行結果をレジスタ又はメモリ内の所定場所に書き込んだ後、プログラムの次の命令の実行を開始していた。複数の命令の実行は、一度に１つ行われていたため、データ依存性ハザード（即ちデータの依存性に起因する危険性）によるエラーを容易に防ぐことが可能であった。
【０００３】
本書で用いる「データ依存性」とは、実行中に、第１の命令が、第２の命令の実行に必要とされるデータを生成し又は読み出す状況をいう。かかる状況において、データ依存性は、該２つの命令間に存在すると言われ、それらの命令の実行のタイミングは、第１の命令の実行により生成される必要とされるデータが、第２の命令の実行中に利用可能となるように、制御されなければならない。第１の命令が第２の命令の前に必ず実行されることを確実にするステップを採らない場合には、データ依存性ハザードが存在する。「データ依存性ハザード」とは、別の命令によるデータに依存する命令が該別の命令よりも先に実行されてしまう（このため別の命令によるデータに依存する命令がその実行時に不正なデータを利用することになる）ためにエラーが生じ得る状況をいう。
【０００４】
上記のように、プロセッサがコンピュータプログラムの複数の命令を一度に１つ実行する場合には、データ依存性ハザードにより生じるエラーを防止することは比較的簡単である。これに関連して、別の命令からのデータに依存する各命令が該別の命令の後にプロセッサに入力される限り、データ依存性ハザードによるエラーが生じることはない。
【０００５】
しかし、多数のプロセッサの性能を向上させるために、パイプライン処理が開発された。パイプライン処理では、１つのパイプラインが、多数の命令を同時に処理する。これにより、パイプラインにおける１つの命令の実行を、該パイプラインにおける先行する命令の実行結果が利用可能となる前に、開始させることが可能となる。その結果として、パイプライン処理では、データ依存性ハザードに起因するエラーが生じ得る。
【０００６】
ほとんどのパイプラインプロセッサは、制御機構を使用して、データ依存性ハザードに起因するエラーを防止している。該制御機構は、プロセッサに入力された命令間に存在するデータ依存性を検出する。各命令の実行時に、制御機構は、実行中の命令（以下「未完命令」と称す）が、別の命令の実行により生成されるデータを必要とするか否かを判定する。未完命令が別の命令の実行により生成されるデータを必要とする場合には、制御機構は、少なくとも、必要とされるデータが利用可能となる時点まで、前記別の命令が実行されているか否かを判定する。必要とされるデータがまだ利用可能でない場合には、制御機構は、該データが利用可能になるまで未完命令の実行を停止させる（stall）（即ち一時的に止める）。
【０００７】
未完命令の停止処理は、通常、該未完命令を実行しているパイプラインに送信される停止信号をアサートすることにより達成される。該停止信号に応じて、パイプラインは、制御機構により該停止信号がデアサートされるまで未完命令の実行を停止するよう設計される。必要なデータが利用可能になると、制御機構が停止信号をデアサートし、これに応じてパイプラインが未完命令の実行を再開する。
【０００８】
命令の処理に要する時間を更に削減するために、スーパースケーラ処理としても知られる並列処理が開発された。並列処理では、複数の命令を同時に実行する複数のパイプラインが規定される。並列処理の１つのタイプがアウトオブオーダ（out-of-order：順序を外れた）処理である。アウトオブオーダ処理では、プロセッサの各パイプラインが他の１つ又は複数のパイプラインとは別個に異なる複数の命令を同時に実行する。
【０００９】
一般に、異なる命令の実行は異なる時間を要するものであり、このため、１つの命令が１つのパイプラインに入力されるのが別の命令が別のパイプラインに入力されるのよりも先であったとしても、該別の命令が前記１つの命令よりも先に実行完了することが可能である。したがって、命令は、必ずしもパイプラインに該命令が入力された順序と同じ順序で実行されるとは限らず、その結果として、データ依存性ハザードに起因するエラーを回避するために必要となる制御機構は、アウトオブオーダ型プロセッサの場合には比較的複雑なものとなる。更に、パイプラインの数が増えると、制御機構も劇的にその複雑性を増す。このため、多くの従来の並列プロセッサ、特に多数のパイプラインを有するプロセッサは、上述のアウトオブオーダ型の処理の代わりにインオーダ型の処理を採用している。
【００１０】
インオーダでの処理時に、異なるパイプラインにより処理される複数の命令は、システムクロック信号の特定のエッジでパイプラインの各ステージを段階的に進行する。ここで、パイプラインにおける複数の命令の処理は通常は複数ステージへと分割され、該パイプラインの各ステージが異なる命令を同時に処理する。
【００１１】
一例として、各パイプラインにより実行される処理は、レジスタステージ、実行ステージ、例外検出ステージ、及び書き込みステージへと分割することが可能である。レジスタステージにおいて命令の実行に必要なオペランドが取得される。オペランドが取得されると、命令の処理が実行ステージに入って、命令が実行される。命令の実行が完了すると、命令の処理は例外検出ステージに入り、実行時のオーバーラン等、例えばデータが信頼できないことを示す条件がチェックされる。例外検出ステージが終了すると、書き込みステージに入り、実行ステージの結果がレジスタ又はメモリ内の所与の場所に書き込まれる。
【００１２】
インオーダ処理の主要な特徴は、１つの発行グループの各命令が同時に各ステージを段階的に進行することである。本書で規定する「発行グループ」とは、単一のプロセッサ内において異なるパイプラインの同一のステージにより同時に（即ち、同一クロックサイクルで）処理される１組の命令である。一例として、各パイプラインの各ステージは、当業界で一般に行われているように一度に１つの命令を処理するものと仮定する。パイプラインの例外検出ステージにおける命令は第１の発行グループを構成し、パイプラインの実行ステージにおける命令は第２の発行グループを構成する。更に、パイプラインのレジスタステージにおける命令は第３の発行グループを構成する。発行グループの各々は、システムクロック信号のアクティブエッジに応じて、それぞれの次のステージへと進む。換言すれば、システムクロック信号のアクティブエッジに応じて、第１の発行グループは書き込みステージへ進み、第２の発行グループは例外検出ステージへと進み、第３の発行グループは実行ステージへと進む。
【００１３】
本書で用いる「アクティブエッジ」とは、システムクロック信号の任意のエッジであり、該エッジの発生により、パイプライン中の未停止状態の各命令が該パイプライン中の次の処理ステージへと誘導される。例えば、未停止状態の各命令を３クロックサイクル毎に次の処理ステージへ進めるようプロセッサが設計されているものと仮定する。本例では、アクティブエッジは、クロック信号の各３番目のアップエッジと規定することができる。なお、クロック信号のどのエッジを「アクティブエッジ」に指定するかは、設計パラメータに基づくものであり、プロセッサ毎に異ならせることが可能である。
【００１４】
インオーダ処理時には、１つの発行グループ中の各命令が別の発行グループ中の別の命令を通過させることが防止される。換言すれば、１つの発行グループの命令の後にパイプラインに入力される別の発行グループの命令が前記１つの発行グループの命令を処理するステージと同一のステージに入ることが防止される。したがって、如何なる時点においても、パイプラインの各ステージは、１つの発行グループのみからの命令をそれぞれ処理する。異なる発行グループからの命令を相互に通過させることが防止されるため、パイプラインを制御すると共にデータ依存性ハザードに起因するエラーを防止する制御機構は、アウトオブオーダ処理と比べて大幅に単純化される。
【００１５】
しかし、制御機構の複雑性の軽減は、一定の犠牲の下に達成されるものである。即ち、インオーダ処理は、幾つかの命令が考え得る最大速度でパイプラインを通過するのを妨げるものとなる。これに関し、１つの発行グループの１つの命令が別の発行グループの命令を通さないことを確実にするために、該１つの命令は、該１つの発行グループ中の全ての命令が次のステージに進むことができる状態になるまで、次のステージに進むことが許可されない。換言すれば、１つの発行グループの１つの命令が停止された場合には、該発行グループの全ての命令が停止され、この命令の停止処理は、該発行グループの命令の一部が現行ステージを完了して次のステージへ進むために利用できる十分なデータを有している場合であっても行われる。
【００１６】
【発明が解決しようとする課題】
したがって、インオーダ処理を採用する並列プロセッサの効率性を改善するシステム及び方法を提供する必要性は、当該業界においてこれまで取り組まれずに残存している。
【００１７】
【課題を解決するための手段】
本発明は、上述のように従来技術の不十分さ又は欠点を克服するものである。一般に、本発明は、発行グループ内の複数の命令の処理を実行可能にすると共に該発行グループ中の他の命令を独立して停止させることによりコンピュータプログラムからの命令を効率的に処理するシステム及び方法を提供する。
【００１８】
アーキテクチャ面では、本発明の処理システムは、複数のパイプライン、命令分散ユニット、及び制御機構を使用する。命令分散ユニットは、コンピュータプログラムの命令を受信し、該受信した命令に基づいて発行グループを規定する。各発行グループは、パイプラインへ順次送信され、該パイプラインにより同時に処理することが可能な複数の命令をそれぞれ含むものである。
【００１９】
制御機構は、発行グループ中の命令を、該命令がパイプラインにより処理される際に分析する。制御機構は、発行グループのうちの１つにおける何れかの命令を停止させるべきか否かを判定する。制御機構は次いで、１つの発行グループ中の停止させるべき１つの命令を処理しているパイプラインの各々にそれぞれ接続された接続部を介して停止信号をアサートし、該制御機構はまた、該１つの発行グループ中の他の命令を処理しているパイプラインの各々にそれぞれ接続された接続部を介して停止信号をデアサートする。アサートされた停止信号のうちの１つを受信した各パイプラインは、前記１つの発行グループ中の１つの命令を停止させ、またデアサートされた停止信号のうちの１つを受信した各パイプラインは、前記１つの発行グループ中の命令の処理を続行させることを可能にする。
【００２０】
本発明はまた、コンピュータプログラムの複数の命令を効率的に処理するための方法を提供するものと考えることができる。該方法は、コンピュータプログラムから複数の命令を受信し、同時に処理することが可能な複数の命令を各々が含む複数の発行グループを前記命令に基づいて規定し、該発行グループを複数のパイプラインへ順次送信し、該発行グループのうちの１つにおける各命令を同時に処理し、該１つの発行グループ中の１つの命令を停止させ、該停止ステップで該１つの命令を停止させた状態で前記１つの発行グループ中の他の命令を処理可能にする、という各ステップにより広義に概念化することが可能である。
【００２１】
本発明のその他の特徴及び利点については、当業者であれば以下の詳細な説明を図面を参照して検討することにより明らかとなろう。本書では、かかる特徴及び利点の全てを本発明の範囲内に含め、また特許請求の範囲により保護することが意図されている。
【００２２】
【発明の実施の形態】
図面を参照することにより本発明を一層良好に理解することができる。図面の各要素は、必ずしも互いに同一の尺度で表されておらず、本発明の原理を明確に図示することに重点がおかれている。更に、同様の符号は幾つかの図面を通して対応する部分を示している。
【００２３】
本発明は、命令を並列的に及びインオーダ式に効率的に処理する処理システム及び方法に関する。図１は、本発明の処理システム20を採用したコンピュータシステム15の好ましい実施形態を示している。該好ましい実施形態の処理システム20は、ハードウェアとして実施することが好ましいが、必要であれば、処理システム20の一部をソフトウェアで実施することも可能である。
【００２４】
図１に示すように、コンピュータシステム15は、ローカルインタフェース22を備えており、該ローカルインタフェース22は、処理システム20がコンピュータシステム15の他の構成要素と通信することを可能にする１つ又は２つ以上のバスを備えることが可能である。更に、入力デバイス25（例えば、キーボード及び／又はマウス）を使用してシステム15のユーザがデータを入力することが可能であり、またディスプレイ27及び／又はプリンタ29を使用してユーザに対するデータ出力を行うことが可能である。システムクロック31はクロック信号を生成し、該信号が当業界で公知の技術を介して使用されて、システム15により通信されるデータのタイミングが制御される。ディスク記憶装置32をローカルインタフェース22に接続して、不揮発性ディスク（例えば磁気ディスクや光ディスク等）との間でデータ転送を行うことが可能である。必要であれば、システム15をネットワークインタフェース33に接続して、該システム15がネットワーク35とデータ交換を行うことができるようにすることも可能である。
【００２５】
更に、システム15は、メモリ44に格納されたプログラム41、システムマネージャ42、及びコンパイラ46を有することが可能である。プログラム41は、処理システム20により処理され実行されることになる複数の命令を含む。システムマネージャ42は、入力デバイス25及び／又はネットワークインタフェース33からの入力を受信し、及び必要に応じてプログラム41の命令を処理システム20に送信するように設計されている。プログラム41の命令を処理システム20に送信する前に、該命令は、コンパイラ46により、処理システム20と互換性のある形式へと翻訳されることが好ましい。例えば、プログラム41の命令が高級コンピュータ言語（例えばC又はFORTRAN等）で書かれている場合には、コンパイラ46は、該命令を処理システム20と互換性のある機械言語へと翻訳するよう設計される。
【００２６】
好ましい実施形態では、コンパイラ46は、翻訳された複数の命令を含み、及び処理システム20へ直接送信することが可能な命令バンドル(instruction bundle：一組の命令)を規定する。図２は、本発明の原理による命令バンドル52を示している。同図に示すように、各命令バンドル52は、１つ又は２つ以上の命令を規定するデータを有すると共にヘッダ55を有している。該ヘッダ55は、命令バンドル52に含まれる命令のタイプを識別する識別子情報を有している。例えば、ヘッダ55は、命令バンドル52中の第１の命令がメモリ操作命令であり、命令バンドル52中の第２の命令が整数演算命令であり、及び命令バンドル52中の第３の命令が浮動小数点演算命令であることを示す情報を有することが可能である。該ヘッダ55はまた、ストップビット57を有することが可能であり、これについては以下で詳述することとする。
【００２７】
命令バンドル52を規定する際に、コンパイラ46は、データ依存性に関するチェックを行い、及び別の命令に対するデータ依存性を有する命令がそれ以外の命令と同一の命令バンドル52中に配置されることがないことを確実にするよう設計されるのが好ましい。更に、コンパイラ46は、命令バンドル52を特定の順序（以下「プログラム順序」と称す）で処理システム20に連続して送信するよう設計され、また、アサートされたストップビット57により境界が画定される命令バンドル52中の命令間にデータ依存性が存在しないことを確実にするよう設計されるのが好ましい。したがって、処理システム20は、デアサートされたストップビット57を有する複数の命令バンドル52からなるストリング（即ち一連の命令バンドル）を受信する場合に、該ストリング中の命令で該ストリング中の他の命令に依存するものが全く存在しないことを認識することになる。
【００２８】
上述のように命令を命令バンドル52という形で処理システム20に送信することは、システム20の最適な性能を向上させる一助となるものである、ということが理解されよう。しかし、上述の命令バンドル52という形で命令を処理システム20に送信することは必ずしも必要ではない。命令を処理システム20に送信する技術であればそれが如何なる技術であっても本発明の実施に適したものとなる。
【００２９】
図３に示すように、処理システム20は、処理システム20に送信される命令を受信するよう設計された命令分散ユニット（IDU）72を備えている。該IDU72は、該IDU72が受信した命令を用いて発行グループを規定し、及び１つの発行グループの命令をパイプライン75に送信し、これにより該１つの発行グループ中の各命令がアクティブクロックエッジでパイプライン75のうちの１つのみにより受信されると共に各パイプライン75が複数の命令のうちの１つだけを受信するように構成される。
【００３０】
パイプライン75は、受信した命令を更に処理し実行するよう設計される。並列のインオーダ型のプロセッサにおける従来方式のパイプラインと同様に、パイプライン75は、各ステージで受信した各命令を処理することが好ましい。図４は、パイプライン75の典型的な１組のステージを示している。ここで、各パイプライン75は、１つの命令を受信し、該１つの命令を、レジスタステージ77、実行ステージ79、例外検出ステージ81、及び最後に書き込みステージ83で、順次処理する。これらのステージについては、既に従来の技術の欄で一層詳細に説明しており、他のステージ及び／又は複数ステージの他の組み合わせを用いて命令を処理し実行することが可能であることに留意されたい。
【００３１】
発行グループを規定する際、IDU72は、各命令が該命令との互換性を有するパイプライン75にのみ送信されるよう設計されることが好ましい。ここで、パイプライン75の一部を、特定のタイプの命令しか扱わないよう設計することが可能である。例えば、１つ又は２つ以上のパイプライン75を、メモリ操作命令、整数演算命令、浮動小数点演算命令、及びその他の既知のタイプの命令しか扱わないよう構成することが可能である。したがって、IDU72は、受信した命令を分析して発行グループを規定し、これにより適当なタイプの命令が各パイプライン75に送信されるように設計される。好ましい実施形態では、IDU72は、各命令バンドル52のヘッダ55を分析して、どの命令がどのパイプライン75と互換性を有するかを判定することが可能である。
【００３２】
IDU72はまた、相互間でデータ依存性を有する２つの命令が同一の発行グループ中に配置されないことを確実にするよう設計される。したがって、クロック31により生成されるクロック信号のアクティブエッジで第１の処理ステージ（即ち、好ましい実施形態ではレジスタステージ77）に入る各命令は、同一のクロックエッジで第１のステージに入る他の命令とのデータ依存性を全く有さない。上述のように、連続する命令バンドル52がデータ依存性を有するか否かを命令バンドル52のストップビット57が示すため、IDU72は、該ストップビット57を使用して、発行グループを規定するプロセスを簡素化することが可能である。ここで、IDU72は、デアサートされたストップビット57を有する命令バンドル52のストリングにおける任意の命令を、該命令間のデータ依存性をチェックすることなく同一の発行グループに配置することが可能である。これは、該命令間にデータ依存性がないことをストップビット57のアサート／デアサートを介してコンパイラ46が保証しているからである。
【００３３】
更に、IDU72は、他の受信した他の命令に対する所与の命令の年齢(age)を表すデータを各命令に挿入するように設計される。ここで、命令の処理をオリジナルプログラム41が規定するのと同一の順序（「プログラム順」という）で完了すべきであることは周知である。プログラム順は、命令が処理システム20により受信される順序である。
【００３４】
各命令の古さ(age)は、そのプログラム順における位置に基づく。例えば、プログラム41において実行される第１の命令（即ち、処理システム20に送信されるプログラムの第１の命令）は、最も古い命令であり、該プログラムの他の命令は全て前記第１の命令よりも若い。第１の命令の後に実行される次の命令（即ち、第１の命令の後に処理システム20により受信されるプログラムの次の命令）は、第１の命令よりも若いがプログラム41の残りの命令よりも古い。更に、実行される最後の命令が最も若い命令である。スーパースケーラプロセッサが多数の命令を一度に処理する場合であっても、該命令は、非スーパースケーラプロセッサがプログラム41を１ステップずつ進めて命令を一度に１つずつ処理していく場合と同一の順序で処理（即ち、上記の例では書き込みステージ）を完了させなければならない。
【００３５】
若い命令が古い命令よりも先に処理を完了しないことを確実にするために、IDU72は、若い命令を含む発行グループの後にパイプライン75に送信されることになる発行グループに古い命令を割り当てないことが好ましい。更に、若い命令が最終的に古い命令よりも先に処理を完了しないことを確実にするための一助として、IDU72は、年齢(age)データを命令に挿入して、どの命令を最初に実行すべきかの判定をパイプライン75による処理時に行うことができるようにする。「プログラム順通り(in program order)」の処理を維持するために該年齢データを如何に使用するかについては以下で詳述することとする。
【００３６】
IDU72は、発行グループの規定を完了した際に、各発行グループをインオーダ式にパイプライン75へ順次送信するよう設計される。したがって、発行グループ中の各命令は、該発行グループの各々にそれぞれ対応するパイプライン75へクロック信号の同一のアクティブエッジで送信される。理想的には、各発行グループ中の各命令がクロック信号のアクティブエッジ間でそれぞれのステージにおいて完全に処理され、各発行グループが同一のクロックエッジで次のステージへと進むようにする。したがって、レジスタステージ77における発行グループの各命令が実行ステージ79に入るクロックエッジは、実行ステージ79及び例外検出ステージ81における各発行グループの命令が例外検出ステージ81及び書き込みステージ83にそれぞれ進むクロックエッジと同一である。更に、レジスタステージ77、実行ステージ79、及び例外検出ステージ81における各発行グループの命令がそれぞれの次のステージに進む際に、新たな発行グループの命令がレジスタステージ77に進む。その結果として、それらの発行グループの処理は、１つの発行グループからの命令が別の発行グループ中の命令と同一のステージに入ることがないという点でインオーダ式のものとなる。
【００３７】
しかし、特定の状況では、１つの命令を実行する際に予想よりも多くの時間を要することがある。例えば、別の発行グループ中の別の命令からのデータに依存する命令が、該別の命令からの必要なデータが利用可能になる前に実行ステージ79に入ることがある。かかる場合、実行ステージ79における命令は、前記必要なデータが利用可能になるまで停止され（即ち一時的に実行が阻止され）なければならない。かかる状況において、従来の知識により示唆されるところは次の通りである。即ち、停止信号を各パイプライン75の実行ステージ79に送信して実行ステージ79における発行グループを停止させ、これにより、必要なデータが利用可能になるまで実行ステージ79における命令が実行されるのを阻止すべきである。更に、現在実行ステージ79にある発行グループが該実行ステージ79を完了する前に別の発行グループが実行ステージ79に入るのを阻止するために、各パイプライン75の一層早期のステージ（即ちレジスタステージ77）にも停止信号を送信する必要がある。その結果として、実行ステージ79及びレジスタステージ77における各命令は、実行ステージ79における各命令の実行に必要なデータが利用可能になるまで停止状態になる。該必要なデータが利用可能になった場合には、前記停止信号をデアサートし、停止されていた発行グループを次のステージ79,81へと進行させなければならない。
【００３８】
しかし、本発明者は、かかる従来の知識が実行ステージ79中の命令の一部を不必要に停止させるものであることに気づいた。したがって、システム20は、各パイプライン75の実行ステージ79に独立した停止信号を送信するよう設計された制御機構85（図５）を備えることが好ましい。ここで、制御機構85は、図５に示すように、各パイプライン75の実行ステージ79を実行する部分に接続部88を介して接続され、各接続部88は異なるパイプライン75に接続される。
【００３９】
IDU72により挿入された年齢データに基づいて、制御機構85は、実行ステージ79における命令を「プログラム順通り」に分析し、該分析された命令が利用不能なデータに依存するか否かを判定する。したがって、制御機構85は、発行グループ中の最も古い命令を分析した後、その次に古い命令に移行し、これを命令の全てが分析されるまで又は利用不能なデータに依存する命令が見つかるまで行う。
【００４０】
ここで、制御機構85は、分析中の命令が利用不能なデータに依存しないものであると判定した場合に、分析中の命令を処理するパイプライン75に接続された接続部88上の停止信号をデアサートする。次いで制御機構85は次に古い命令を分析する。制御機構85は、パイプライン75のうちの１つの実行ステージ79における１つの命令が利用不能なデータに依存すると判定した場合に、該利用不能なデータに依存する命令を処理するパイプライン75に接続された接続部88を介して停止信号をアサートするよう構成される。更に、「プログラム順」を確実に維持するために、制御機構85は、次いで残りのパイプライン75（即ち、現在分析中の命令よりも若い命令を処理するパイプライン75）に接続された接続部88上に停止信号をアサートする。
【００４１】
したがって、実行する準備が整っており且つ利用不能なデータに依存する命令の何れよりも古い（IDU72により挿入された年齢データにより規定される）実行ステージ79における命令を実行すること、及び該命令をクロック信号のアクティブエッジで他のステージ（即ち、例外検出ステージ81及び書き込みステージ83）へと移行することが可能となる一方、利用不能なデータに依存する命令と、利用不能なデータに依存する命令の何れよりも若い（IDU72により挿入された年齢データにより規定される）命令とが、実行ステージ79において停止される。
【００４２】
制御機構85は、停止されている命令の監視を引き続き行う。停止されている命令が、実行に必要なデータへのアクセスを有しており、且つ利用不能なデータに依存する実行ステージ79中の他の全ての命令よりも古い場合に、該停止されている命令のパイプライン75に加えられている停止信号がデアサートされ、このため、該停止されている命令がクロックサイクルの次のアクティブエッジで次のステージ81,83に進行する（即ち１ステップ進む）ことが可能となる。
【００４３】
インオーダ処理を維持するため、実行ステージ79における命令の何れか１つが停止されている場合には、実行ステージ79に先立つ各ステージにおける発行グループを停止させる必要がある。したがって、接続部88上の信号は、図５に示すORゲート91に入力されることが好ましい。接続部88の何れかがアサートされると、ORゲート91の出力もアサートされる。ORゲート91の出力は、接続部96上の信号と共にORゲート93に入力される。制御機構85は、レジスタステージ77における命令の何れか１つを停止させる必要がある状況を検出した場合に接続部96上に信号をアサートするよう設計される。ORゲート91の出力又は接続部96上の信号の何れか一方がアサートされると、ORゲート93の出力がアサートされる。
【００４４】
ORゲート93の出力は、各パイプライン75のうちレジスタステージ77を実行する部分に接続部99を介して接続される。接続部99上の信号がアサートされると、レジスタステージ77における命令が停止される。したがって、レジスタステージ77における発行グループは、レジスタステージ77における命令又は実行ステージ79における命令を停止させるべきことを制御機構85が検出した場合に必ず停止される。したがって、実行ステージ79における各命令がその実行を完了して実行ステージ79から出るまで、レジスタステージ77における命令が実行ステージ79に進むことはない。その結果として、処理システム20のインオーダ的な性質が維持される。
【００４５】
なお、特定の状況では、実行ステージ79よりも後のステージの発行グループを停止させる必要があることに留意されたい。このため、制御機構85は、例外検出ステージ81及び書き込みステージ83に送信される停止信号をアサートするよう設計される。好ましい実施形態では、制御機構85は、接続部106,105（図６）上に信号をアサートして、例外検出ステージ81及び書き込みステージ83における発行グループをそれぞれ停止させるよう設計される。
【００４６】
前述したように、システム20のインオーダ特性を保持するために、停止された命令を有するステージよりも前のステージにおける発行グループを停止させる必要がある。したがって、接続部105を介して加えられたアサートされた停止信号は、パイプライン75の前のステージ77,79,81の各々にORゲート91,93,107,111を介して提供され、また接続部106を介して加えられたアサートされた停止信号は、パイプライン75の前のステージ77,79の各々にORゲート91,93,107,111を介して提供される。何れかのステージ77,79,81,83がアサートされた停止信号を有さない場合には、該何れかのステージ77,79,81,83が現在の命令をクロック信号の次のアクティブエッジで次のステージへ１ステップ進めることが可能となる。
【００４７】
なお、ORゲート91,93,107,111は本発明の本質的な特徴ではないことに留意されたい。ここで、ORゲート91,93,107,111は、後のステージにおける命令が停止されている場合に前のステージにおける命令を停止させることを可能にし、これによりシステム20のインオーダ処理を維持するものである。しかし、これと同一の機能は、異なる多くの構成及び装置により達成可能なものであり、ORゲート91,93,107,111を不要にすることが可能である。更に、必要であれば、ORゲート91,93,107,111を制御機構85の回路内に組み込むことが可能である。
動作
処理システム20及びそれに関連する方法について、その好ましい用途及び動作を以下で説明する。
【００４８】
コンピュータプログラム41からの複数の命令は、コンパイラ46によりコンパイルされて処理システム20（図１）に送信される。処理システム20内のIDU72（図３）は、前記命令を受信して該命令を複数の発行グループへと分割する。該発行グループは複数の命令セットであり、該命令セットは該命令セットのうちの他の命令との間でのデータ依存性を有さない複数の命令から構成される。次いで、該発行グループは、システムクロック31により生成されたクロック信号のアクティブエッジに応じてパイプライン75のステージ77,79,81,83を１ステップずつ順次進行する。したがって、停止状態が存在しない場合には、ステージ77,79,81,83の何れかにおける命令が、クロック信号の同一エッジで次のステージへと進み、別の発行グループからの命令がパイプライン75の何れかにおいて現在処理されているステージ77,79,81,又は83と同一のステージに、１つの発行グループからの任意の命令が入ることは決してない。
【００４９】
制御機構85は、パイプライン75により処理されている命令を監視し、当業界で周知の技術を介して、停止を生じさせるべきか否かを判定する。図７にブロック115,118で示すように、制御機構85は、書き込みステージ83における各命令を規定するデータをチェックし、書き込みステージ83における命令の何れかを停止させるべきか否かを判定する。書き込みステージ83における命令の何れかを停止させるべき場合には、制御機構85は、ブロック119で接続部105上に停止信号をアサートする。また、書き込みステージ83における命令の何れかを停止させるべきでない場合には、制御機構85は、ブロック121で接続部105上の停止信号をデアサートした後、ブロック122,123に示すように、例外検出ステージ81における命令をチェックして、それらの命令の何れかを停止させるべきか否かを判定する。例外検出ステージ81における命令の何れかを停止させるべき場合には、制御機構85は、ブロック124で接続部106上に停止信号をアサートする。また、例外検出ステージ81における命令の何れかを停止させるべきでない場合には、制御機構85は、ブロック125で接続部106上の停止信号をデアサートする。
【００５０】
ブロック125を実行した後、制御機構85は、ブロック132に示すように、実行ステージ79における命令をチェックし、接続部88上に停止信号を適宜アサートする。ここで、制御機構85は、図８のブロック141,145に示すように、実行ステージ79における第１の命令を「プログラム順通り」にチェックする（即ち、最も古い命令をチェックする）。命令を停止させるべき場合（例えば、命令を正しく実行するために必要なデータがまだ利用可能でない場合）には、制御機構85は、ブロック147,149に示すように、該命令を処理するパイプライン75に接続された接続部88上に信号をアサートすると共に、ブロック145でチェックされた命令よりも若い命令を処理するパイプライン75に接続された各接続部88上に信号をアサートする。また、命令を停止させるべきでない場合には、制御機構85は、ブロック152に示すように、チェックされた命令を処理しているパイプライン75に接続された接続部88上の信号をデアサートする。次いで制御機構85は、ブロック145,152,155,157に示すように、停止させる必要のある命令が見つかるまで、実行ステージ79における各命令毎に上記と同様の操作を行う。
【００５１】
その結果として、クロック信号の各アクティブエッジ毎に、実行に必要なデータへのアクセスを有し、且つ利用不能なデータに依存する全ての命令よりも古い、実行ステージ79における命令を実行すること及び該命令を次のステージ（即ち、好ましい実施形態では例外検出ステージ81）へ進めることが可能となる。しかし、実行に必要なデータへのアクセスをまだ有しておらず、又は利用不能なデータに依存する何れかの命令よりも若い、実行ステージ79における命令は、停止される（即ち、次のステージに移行することが阻止される）。
【００５２】
ここで図７を再び参照する。制御機構85はまた、ブロック165,167に示すように、レジスタステージ77における命令をチェックし、これらの命令の何れかを停止させるべきか否かを判定する。レジスタステージ77における命令の何れかを停止させるべき場合には、制御機構85は、ブロック169で接続部96上に停止信号をアサートする。また、レジスタステージ77における命令の何れかを停止させるべきでない場合には、制御機構85は、ブロック172で接続部96上の停止信号をデアサートする。
【００５３】
したがって、書き込みステージ83における命令の何れかを停止させるべき場合には、ステージ77,79,81,83の全てにおける各命令が停止される。例外検出ステージ81における命令の何れかを停止させるべき場合は、該例外検出ステージ81、実行ステージ79、及びレジスタステージ77における各命令が停止される。更に、実行ステージ79における命令の何れかを停止させるべき場合には、それらの命令と、それらの命令の何れよりも若い実行ステージ79における各命令とが停止される。更に、レジスタステージ77における各命令もまた停止される。最後に、レジスタステージ77における命令の何れかを停止させるべき場合には、レジスタステージ77における命令の各々が停止される。ブロック175に示すように、クロック信号の次のアクティブエッジが発生すると、上述の処理が繰り返される。
【００５４】
説明のため、各パイプライン75のステージ77,79,81,83の各々における命令をそれぞれチェックした後、実行ステージ79における１つの命令のみが利用不能なデータに依存することが判明したと仮定する。その結果として、該１つの命令又は該１つの命令よりも若い命令を処理する実行ステージ79に接続された接続部88上の信号がアサートされる。換言すれば、該１つの命令と、該１つの命令よりも若い実行ステージ79における複数の命令とが停止される。その結果として、接続部99上の信号もまたアサートされることになる。しかし、接続部105,106上の他の信号の各々と残りの接続部88上の信号とはデアサートされる。
【００５５】
その結果として、例外検出ステージ81における命令の各々は、クロック信号の次のアクティブエッジで書き込みステージ83に進み、実行ステージ79における命令の各々（停止されている命令は除く）は、前記と同一のクロック信号のアクティブエッジで例外検出ステージ81に進む。しかし、該クロック信号のアクティブエッジが発生しても、レジスタステージ77における命令は該レジスタステージ77に残留し、また実行ステージ79における停止されている命令は該実行ステージ79に残留する。
【００５６】
更に、上述した１つの命令（即ち、利用不能なデータに依存する実行ステージ79における１つの命令）を実行するのに必要なデータが利用可能になったと仮定する。この命令が図８のブロック141で制御機構85によりチェックされた後、この命令を処理するパイプライン75に接続された接続部88上の信号がブロック152でデアサートされる。更に、この命令よりも若い実行ステージ79における命令を処理するパイプライン75に接続された接続部88上の信号もまたデアサートされる（これらの命令の各々は利用不能なデータに依存しないものとする）。その結果として、接続部99上の信号もまたデアサートされる。例外検出ステージ81における命令が、クロック信号の次のアクティブエッジで書き込みステージ83に進む場合には、先に停止されている実行ステージ79における命令が例外検出ステージ81に進む。更に、レジスタステージ77における命令が実行ステージ79に進み、新たな発行グループがレジスタステージ77に進む。
【００５７】
上述した例示から分かるように、実行可能な実行ステージ79における命令は、該命令の実行及び他のステージへの進行が可能となり、一方、実行の準備が整っていない実行ステージ79における命令（例えば、利用不能なデータに依存する命令、及び利用不能なデータに依存する実行ステージにおける別の命令よりも若い各命令）は、実行ステージ79において停止される。更に、パイプライン75によりデータを処理する時点で、１つの発行グループからの１つの命令が、パイプライン75の何れか１つにおける別の発行グループからの命令を処理しているステージと同一タイプのステージに入ることはない。換言すれば、システム20の処理は、インオーダ式である。その結果として、制御機構85の複雑性を大幅に増大させることなくシステム20の効率が最大限になる。
【００５８】
好ましい実施形態では、プログラム41が処理システム20に命令を提供しているが、本発明の原理から逸脱することなく様々なソースから命令を供給することが可能であることが理解されよう。例えば、コンピュータディスク上に命令を配置し、ディスク記憶装置32を介して該ディスクと処理システム20とのインタフェースをとることが可能である。別の例として、命令はネットワーク35から提供することが可能である。更に、命令は、システム15とインタフェースされる前にコンパイルすることが可能であり、又は処理システム20と互換性のある形式で書き込むことが可能であり、これによりコンパイルの必要がなくなる。したがって、ローカルメモリ44に格納されたプログラム41から命令を受信することは、本発明の本質的な特徴とみなすべきではない。
【００５９】
更に、利用不能なデータに依存する命令を停止させるものとして本発明を説明してきた。しかし、当業界で知られているように、命令を停止させる別の理由が存在する場合がある。本発明の原理を用いてかかる別の理由から命令を停止させることが可能であることは当業者には明らかであろう。したがって、分析中の命令を何らかの理由から停止させることになる場合には必ず、図７及び図８のブロック118,123,167,145で「YES」の判定が行われることが好ましい。分析された命令が利用不能なデータに依存することは、命令を停止させるべき場合の単なる一例にすぎない。
【００６０】
更に、上述した方法により、実行ステージ79における命令の一部が、実行ステージ79を完了して次のステージ81に進む一方、実行ステージ79における他の命令を停止させることが可能となる。しかし、これらの原理は実行ステージ79のみに限定されるものではない。ここで、本発明の原理を他のステージ77,81,83に適用して、ステージ77,81,83のうちの１つにおける命令の一部のみを停止させる一方、同ステージにおける他の命令を次のステージに進めることが可能である、ということが、当業者であれば本開示を読み進めることにより明らかとなろう。したがって、必要であれば、実行ステージ79における命令を分析し停止させるために使用される方法と同一の方法を使用して、他のステージ77,81,及び／又は83の何れかにおける命令の分析及び停止を行うことが可能である。
【００６１】
上述した本発明の実施形態、特に、「好ましい」実施形態の何れも、単に考え得る実施例にすぎず、本発明の原理を明確に理解するためだけに記載されていることを強調しておく。本発明の思想及び原理から実質的に逸脱することなく上述の発明の実施形態に多数の変更及び変形を加えることが可能である。かかる変形及び変更の全てを本発明の範囲に含ませると共に特許請求の範囲により保護することが意図されている。
【００６２】
以下においては、本発明の種々の構成要件の組み合わせからなる例示的な実施態様を示す。
【００６３】
１．コンピュータプログラムの命令を効率的に処理するインオーダ型のスーパースケーラ処理システムであって、
複数のパイプライン(75)と、
コンピュータプログラム(41)の複数の命令を受信し、及び該受信した命令に基づき複数の発行グループを規定するよう構成された命令分散ユニット(72)であって、更に、前記発行グループを前記パイプライン(75)に送信するよう構成されており、該発行グループの各々が、前記パイプライン(75)により同時に処理されるべき複数の命令を有している、命令分散ユニット(72)と、
前記複数の発行グループのうちの１つにおける複数の命令の前記パイプライン(75)による処理中に該１つの発行グループ中の複数の命令を分析するよう構成された制御機構(85)であって、更に、前記１つの発行グループ中の前記命令の何れかが利用不能なデータに依存するか否かを判定するよう構成され、及び利用不能なデータに依存する前記１つの発行グループ中の命令を停止させるよう構成され、及び前記１つの発行グループ中の他の命令の更なる処理を同時に可能とするよう構成されている、制御機構(85)と
を備えている、インオーダ型のスーパースケーラ処理システム。
２．前記制御機構(85)が、利用不能なデータに依存すると判定された前記命令よりも若いと前記制御機構(85)により判定された前記１つの発行グループ中の各命令を停止させるよう構成されている、前項１に記載のインオーダ型のスーパースケーラ処理システム。
３．コンピュータプログラムの命令を効率的に処理する処理システムであって、コンピュータプログラム(41)の複数の命令を受信し、及び該受信した命令に基づいて発行グループを規定するように構成された命令分散ユニット(72)であって、更に前記発行グループを送信するよう構成され、該発行グループの各々が前記システムにより同時に処理されるべき複数の命令を有している、命令分散ユニット(72)と、
少なくとも第１のステージ及び第２のステージを各々有する複数のパイプライン(75)であって、前記第１のステージが、一度に１つの発行グループのみからの複数の命令を処理し、前記第２のステージが、一度に１つの発行グループのみからの複数の命令を処理する、複数のパイプライン(75)と、
前記発行グループのうちの１つにおける各命令を停止させるか否かを判定するよう構成された制御機構(85)であって、更に、停止させるべき前記１つの発行グループ中の命令を処理している前記パイプライン(75)の前記第１のステージの各々にそれぞれ接続された第１の接続部(88)上に停止信号をアサートするよう構成され、更に、前記１つの発行グループ中の他の命令を処理している前記パイプライン(75)の前記第１のステージにそれぞれ接続された第２の接続部(88)上の停止信号をデアサートするよう構成されている、前記制御機構(85)とを備えており、前記制御機構(85)が、前記第１及び第２の接続部(88)上の前記停止信号のアサート及びデアサートをそれぞれ同時に行う、処理システム。
４．前記パイプライン(75)の各々が、前記接続部(88)のうちの１つを介して送信されたデアサートされた停止信号の受信時にのみ１つの命令を前記第１のステージから前記第２のステージへと１ステップ進めるよう構成され、更に、前記パイプライン(75)の各々が、前記接続部(88)のうちの１つを介して送信されたアサートされた停止信号に応じて前記第１のステージにおける１つの命令を停止させるよう構成されている、前項３に記載の処理システム。
５．コンピュータプログラムの命令を効率的に処理するインオーダ型のスーパースケーラ処理方法であって、
コンピュータプログラム(41)から複数の命令を受信し、
同時に処理することが可能な複数の命令を各々含む複数の発行グループを前記命令に基づいて規定し、
該発行グループを複数のパイプライン(75)に順次送信し、
前記発行グループのうちの１つにおける各命令を同時に処理し、
前記１つの発行グループ中の１つの命令を停止させ、
該停止ステップで前記１つの命令が停止されている際に前記１つの発行グループ中の他の命令の処理を可能にする、
という各ステップを有する、インオーダ型のスーパースケーラ処理方法。
６．前記１つの発行グループ中の命令が利用可能なデータに依存するか否かを判定し、
前記停止されている命令が利用不能なデータに依存するという前記判定ステップにおける判定に応じて前記停止ステップを実行する、
という各ステップを更に有する、前項５に記載のインオーダ型のスーパースケーラ処理方法。
７．前記停止ステップで停止された前記命令よりも若い命令が、前記停止ステップで停止された前記命令よりも前にその実行が完了しないことを確実にするステップを更に有している、前項５に記載のインオーダ型のスーパースケーラ処理方法。
８．コンピュータプログラムの複数の命令を効率的に処理するインオーダ型のスーパースケーラ処理方法であって、
コンピュータプログラム(41)から複数の命令を受信し、
前記複数の命令に基づいて発行グループを規定し、該発行グループの各々が、コンピュータプロセッサ(20)において同時に実行することが可能な複数の命令を有しており、
前記コンピュータプロセッサ(20)において複数のステージで前記発行グループを処理し、
前記発行グループのうちの１つにおける複数の命令が、別の発行グループ中の複数の命令と同一のステージで同時に処理されないことを確実にし、
前記１つの発行グループ中の１つの命令を停止させ、
該停止ステップにより前記命令が停止されている際に前記１つの発行グループ中の他の命令を別のステージへ進行させることを可能にする、
という各ステップを有する、インオーダ型のスーパースケーラ処理方法。
９．前記１つの発行グループ中の命令が利用不能なデータに依存するか否かを判定し、
前記停止された命令が利用不能なデータに依存するという前記判定ステップでの判定に応じて前記停止ステップを実行する、
という各ステップを更に有する、前項８に記載のインオーダ型のスーパースケーラ処理方法。
10．前記１つの発行グループ中の前記命令の何れが前記停止ステップで停止された前記命令よりも若いかを判定し、
前記停止ステップで停止された前記命令よりも若いと判定された前記１つの発行グループ中の前記命令の各々を停止させる、
という各ステップを更に有する、前項８に記載のインオーダ型のスーパースケーラ処理方法。
【図面の簡単な説明】
【図１】本発明に係る処理システムを採用したコンピュータシステムを示すブロック図である。
【図２】図１に示す処理システムに送信される典型的な命令バンドルを示すブロック図である。
【図３】図１に示す処理システムを更に詳細に示すブロック図である。
【図４】図１に示す処理システムの各処理ステージを説明するフローチャートである。
【図５】図３に示す処理システムのパイプラインに接続される制御機構を詳細に示すブロック図である。
【図６】図５に示す制御機構、及び該制御機構と図３に示すパイプラインとの間の接続を一層詳細に示すブロック図である。
【図７】図６に示す制御機構のアーキテクチャ及び機能を示すフローチャートである。
【図８】図７に示す制御機構のアーキテクチャ及び機能の一部を一層詳細に示すフローチャートである。
【符号の説明】
20    コンピュータプロセッサ
41    コンピュータプログラム
72    命令分散ユニット
75    パイプライン
85    制御機構
88    第１の接続部／第２の接続部
【符号の説明】
●●●●
【図１】
0003773769.tif 000002
【図２】
0003773769.tif 000003
【図３】
0003773769.tif 000004
【図４】
0003773769.tif 000005
【図５】
0003773769.tif 000006
【図６】
0003773769.tif 000007
【図７】
0003773769.tif 000008
【図８】
0003773769.tif 000009