(57)【特許請求の範囲】
【請求項１】
スーパースカラープロセッサの中央処理ユニットであって、
各々が命令を実行するように適合された複数の関数ユニットと、
複数のパイプラインステージを含み、かつ各プロセッササイクルで複数の命令及び１以上の状態ベクトルを受け取るグループ化論理回路であって、前記状態ベクトルのそれぞれは、前記グループ化論理回路において以前のプロセッササイクルで受け取った命令の状態を表しており、前記グループ化論理回路が、前記状態ベクトルに基づいて、前記機能的ユニットの１つによって実行されるべき現プロセッササイクルで受け取った命令の各々をディスパッチし、前記現プロセッササイクルで受け取った命令の状態を表す現在の状態ベクトルを供給する、前記グループ化論理回路とを有することを特徴とするスーパースカラープロセッサの中央処理ユニット。
【請求項２】
前記グループ化論理回路が、前記複数の命令が同時にディスパッチできるか否かを求めるべく、前記複数の命令の間のデータの従属性をチェックすることを特徴とする請求項１に記載のスーパースカラープロセッサの中央処理ユニット。
【請求項３】
前記グループ化論理回路が、前記複数の命令内でのリソースの競合に対するチェックを行うことを特徴とする請求項１に記載のスーパースカラープロセッサの中央処理ユニット。
【請求項４】
前記グループ化論理回路は、１つのプロセッササイクルでの命令グループと、１つ前のプロセッササイクルで受け取られた複数の命令との間のデータの従属性をチェックすることを特徴とする請求項１に記載のスーパースカラープロセッサの中央処理ユニット。
【請求項５】
前記中央処理ユニットの状態が、レジスタで表されており、
前記状態が、前記複数の命令内の命令の宛先レジスタの表現を含むことを特徴とする請求項１に記載のスーパースカラープロセッサの中央処理ユニット。
【請求項６】
第１のプロセッササイクルの間に受け取られた前記複数の命令の全ての命令が、前記第１のプロセッササイクルに続くプロセッササイクルで受け取られた第２の複数の命令の任意の命令のディスパッチの前に、ディスパッチされることを特徴とする請求項１に記載のスーパースカラープロセッサの中央処理ユニット。
【請求項７】
前記関数ユニットが、各プロセッササイクルで命令を受け取りかつ次のプロセッササイクルで前記命令を完了することのできるパイプラインされた関数ユニットを含むことを特徴とする請求項１に記載のスーパースカラープロセッサの中央処理ユニット。
【請求項８】
前記関数なユニットが、前記関数ユニットによって実行される１つの命令を完了するために複数のプロセッササイクルを必要とする関数ユニットを含むことを特徴とする請求項１に記載のスーパースカラープロセッサの中央処理ユニット。
【請求項９】
前記グループ化論理回路が、第１のプロセッササイクルのすぐ前の複数のプロセッササイクルで受け取られた複数の命令に対して求められた複数の前記状態ベクトルに基づいて、前記第１のプロセッササイクルで受け取られた複数の命令に対する特定の現在の状態ベクトルを求め、
前記プロセッササイクルの個数は、前記複数のパイプラインステージの個数と等しいことを特徴とする請求項１に記載のスーパースカラープロセッサの中央処理ユニット。
【請求項１０】
所定の命令に対して、前記グループ化論理回路が、複数のプロセッササイクルにわたって、ディスパッチするための命令のグループ化を行い、このグループ化にはイントラグループの従属性のチェックとインターグループの従属性のチェックとが含まれることを特徴とする請求項１に記載のスーパースカラープロセッサの中央処理ユニット。
【請求項１１】
前記イントラグループの従属性のチェックが、２以上のプロセッササイクルにわたって行われることを特徴とする請求項１０に記載のスーパースカラープロセッサの中央処理ユニット。
【請求項１２】
前記イントラグループの従属性のチェックが、前記インターグループの従属性のチェックとは独立して行われることを特徴とする請求項１０に記載のスーパースカラープロセッサの中央処理ユニット。
【請求項１３】
プロセッサで実行するための命令をグループ化する方法であって、
複数のプロセッササイクルのそれぞれにおいて、複数の命令及び１以上の状態ベクトルを受け取る過程であって、前記状態ベクトルのそれぞれは、以前のプロセッササイクルで受け取った命令の状態を表している、該過程と、
前記状態ベクトルに基づいて、前記機能的ユニットの１つによって実行されるべき現プロセッササイクルで受け取った命令の各々をディスパッチする過程と、
後に行われるディスパッチのために、前記現プロセッササイクルで受け取った命令の状態を表す現在の状態ベクトルを供給する過程とを有することを特徴とする方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータアーキテクチャに関し、より詳しくはスーパースカラープロセッサの中央処理ユニットに関する。
【０００２】
【従来の技術】
並列処理は、現代のコンピュータの構成に於いて非常に発展してきた。このような構成のうちで、２つの異なるアーキテクチャが知られており、各々、ＶＬＩＷアーキテクチャと、スーパースカラーアーキテクチャとして知られている。スーパースカラープロセッサは、同時に１つもしくはそれ以上の命令をディスパッチすることのできるコンピュータである。そのようなプロセッサは、通常、ディスパッチされた命令を別個に実行することのできる複数の機能的なユニットを含んでいる。そのようなプロセッサでは、制御論理回路が、「グループ化ロジック」回路として知られており、この制御論理回路が、特定のリソースの配置及びデータの従属性（ｄｅｐｅｎｄｅｎｃｙ）の制約に基づいて、命令（命令グループ）がディスパッチされるか否かを決定する。コンピュータの設計者の仕事は、利用できるリソースを最適に用いる命令グループをディスパッチするように、そのような制約をダイナミックに評価することのできるグループ化ロジック回路を提供することである。すなわち、１つのフローティングポイント乗算ユニットを有するコンピュータでは、リソースの配置の制約は、１つのフローティングポイント乗算命令しか、任意の与えられたプロセッササイクルの間に、ディスパッチされないということである。このプロセッササイクルは、プロセッサのパイプラインされたユニットに対する基本的なタイミングの単位であり、通常は、ＣＰＵクロックのクロック周期である。データの従属性の制約のある例は、「書き込み後の読み出し（ｒｅａｄ−ａｆｔｅｒ−ｗｒｉｔｅ）」ハザードを回避するということである。この制約によって、以前にディスパッチされしかもまだリタイヤしていない書き込み命令の宛先であるレジスタからのオペランドを必要とする命令を、ディスパッチすることが防止される。
【０００３】
スーパースカラープロセッサとは異なり、ＶＬＩＷプロセッサでは、実行時間中にシステムのリソースをダイナミックに配置することはない。そのかわり、リソースの配置とデータの従属性の解析は、プログラムのコンパイルの間に実行される。ＶＬＩＷプロセッサは、長い命令ワードをデコードして、様々な独立した関数ユニットを動作させるための制御情報を出力する。コンパイラの仕事は、デコードされたときにコンピュータの並列化されたハードウェア内に於けるプログラム固有の並列化を効率よく活用することのできる命令のシーケンスを発生させることによって、プログラムの性能を最適化することである。ハードウェアには、命令のシーケンス及びディスパッチに対する制御は与えられていない。
【０００４】
しかしながら、ＶＬＩＷコンピュータは、命令実行中に各マシーンに対してそのプログラムを再コンパイル（ｒｅｃｏｍｐｉｌｅ）しなければならないという重大な欠点を有する。そのような再コンパイルは、各マシーンによって必要とされる制御情報が命令ワード内にデコードされているために、必要とされる。一方、スーパースカラーコンピュータは、既存の実行可能プログラム（すなわち「バイナリ」）を実行できるように設定されている。スーパスカラコンピュータでは、既存の実行可能なプログラムの命令は、実行時間中に、コンピュータの特定のリソースの利用可能性と、データの完全性の要求とに基づいて、コンピュータによってディスパッチされる。コンピュータの利用者の立場から見れば、既存のバイナリには大きな資本が投下されているので、新たなバイナリをコピーするための費用を必要とせずに、性能を高めることができるということが、重要な利点である。
【０００５】
従来技術では、与えられたプロセッササイクルの命令グループ内に含まれるべき命令を決定するために、スーパースカラーコンピュータが、直前のプロセッササイクルでリソースの配置及びデータの従属性のチェック作業を実行する。このような方法に於いては、コンピューターの設計者は、そのようなリソースの配置及びデータの従属性のチェック作業が、そのプロセッササイクル内で確実に完了するようにしなければならない。別個に実行される関数ユニットの個数が増加するにつれて、そのようなリソースの配置及びデータの従属性のチェック作業は、比例関係以上に急速に増加する。したがって、スーパースカラーコンピュータの構成では、リソース及びデータの完全性の解析を１つのプロセッササイクル内で行うことができるか否かが、さらに並列処理化を進めることができるか否かを限定する１つの要因となっている。
【０００６】
【発明が解決しようとする課題】
本発明の目的は、リソース及びデータの完全性の解析を１つのプロセッササイクル内で行うようにすることで、さらに並列処理化を進めることである。
【０００７】
【課題を解決するための手段】
本発明は、１つのプロセッササイクルの間に同時にディスパッチできる命令を決定するためのグループ化論理回路を含む。本発明の中央処理ユニットは、そのようなグループ化論理回路と、各々がそのグループ化論理回路によってディスパッチされた１つもしくは複数の指定された命令を実行できるように適合された複数の関数ユニットを含む。このグループ化論理回路は、複数のパイプラインステージを含み、リソースの配置及びデータの従属性のチェックが、複数のプロセッササイクルにわたって実行される。したがって、本発明は、複数の命令を同時にディスパッチすることを可能とし、一方グループ化論理回路の複雑さによる中央処理ユニットのプロセッササイクルの期間の限定を、回避する。
【０００８】
ある実施例では、グループ化論理回路は、命令グループを受け取った直後にイントラグループ（ｉｎｔｒａ−ｇｒｏｕｐ）のデータの従属性をチェックする。この実施例では、最初の（第１の）プロセッササイクルの間に受け取られた命令のグループ内の全ての命令が、最初のプロセッササイクルに続くプロセッササイクルで受け取られた第２のグループの命令のいずれの命令のよりも先にディスパッチされる。
【０００９】
本発明は、添付の図面を参照しながら行われる以下の詳細な説明によってよりよく理解される。
【００１０】
【発明の実施の形態】
本発明のある実施例が、図１のブロック図に例示されており、この図には、本発明の１つの例としての４ウェイ・スーパースカラープロセッサの中央処理ユニット（ＣＰＵ）１００が表されている。この４ウェイ・スーパースカラープロセッサは、プロセッササイクルごとに、４つまでの命令を、フェチ（ｆｅｔｃｈ）し、ディスパッチ（ｄｉｓｐａｔｃｈ）し、実行（ｅｘｅｃｕｔｅ）し、かつリタイア（ｒｅｔｉｒｅ）する。図１に表されているように、中央処理ユニット１００は、２つの算術論理演算ユニット１０１及び１０２と、ロード／記憶ユニット１０３（９層ロードバッファ１０４と８層記憶バッファ１０５とを含む）と、フローティングポイント加算器１０６と、浮動小数点乗算器１０７と、浮動小数点除算器１０８とを含む。この実施例は、グループ化論理回路１０９は、１プロセッササイクルごとに４つまでの命令をディスパッチする。完了ユニット１１０は、命令が完了するとその命令をリタイアする。レジスタファイル（図示されていない）は、複数の整数レジスタ及び浮動小数点レジスタを含み、オペランドのフェッチもしくは結果のライトバックの間にこのレジスタファイルをアクセスする関数ユニットが競合することを防止するための十分な数のポートが設けられている。更に、この実施例では、ローディングは非ブロック形式で行われ、すなわち、ＣＰＵ１００は、１つもしくは複数のディスパッチされたロード命令が完了していない場合でも実行を続ける。ロード命令のデータが主メモリから戻されたとき、これらのデータは第２レベルのキャッシュメモリ内に記憶されるようにパイプライン形式に配置されることができる。この実施例では、浮動小数点加算器１０６と浮動小数点乗算器１０７は、各々、４ステージパイプラインを有する。同様に、ロード／記憶ユニット１０３は、２ステージパイプラインを有する。パイプライン形式ではないが、浮動小数点除算器１０８は、１命令あたり複数のプロセッササイクルを必要とする。
【００１１】
以下の説明を明瞭にするために、グループ化論理１０９に関連するＣＰＵ１００の状態は、以下に説明される状態変数Ｓ（Ｐ）によって表される。もちろん、ＣＰＵ１００の状態は他の変数をも含み、これら他の変数には、そのプロセッサの状態ワードに含まれるものがある。当業者には、プロセッサの状態の使用及び実施が容易に理解される。すなわち、時刻ｔでのＣＰＵ１００の状態Ｓ（ｔ）は、次の式によって表される。
Ｓ（ｔ）＝｛ＡＬＵ１（ｔ），ＡＬＵ２（ｔ），ＬＳ（ｔ），ＬＢ（ｔ），ＳＢ（ｔ），ＦＡ（ｔ），ＦＭ（ｔ），ＦＳＤ（ｔ）｝（式１）
【００１２】
ここで、ＡＬＵ１（ｔ）とＡＬＵ２（ｔ）は、各々、時刻ｔでの算術論理演算ユニット１０１と１０２の状態であり、ＬＳ（ｔ）とＬＢ（ｔ）は、各々、時刻ｔでの記憶バッファ１０５とロードバッファ１０４の状態であり、ＦＡ（ｔ）、ＦＭ（ｔ）、及びＦＤＳ（ｔ）は、各々、時刻ｔでの浮動小数点加算器１０６、浮動小数点乗算器１０７、及び浮動小数点除算器１０８の状態である。
【００１３】
任意の時刻で、各関数ユニットの状態は、ソースレジスタと、その関数ユニットにディスパッチされかつまだリタイアされていない命令によって指定された宛先レジスタとによって表される。すなわち、
ＡＬＵ１＝｛ＡＬＵ１．ｒｓ１（ｔ），ＡＬＵ１．ｒｓ２（ｔ），ＡＬＵ１．ｒｄ（ｔ）｝（式２）
【００１４】
ここで、ｒｓ１（ｔ）、ｒｓ２（ｔ）、及びｒｄ（ｔ）は、各々、第１ソースレジスタと、第２ソースレジスタと、時刻ｔで算術論理演算ユニット１０１内で実行されている命令の宛先レジスタとを表している。
【００１５】
同様に、算術論理演算ユニット１０２の状態は、以下のように定義される。
ＡＬＵ２＝｛ＡＬＵ２．ｒｓ１（ｔ），ＡＬＵ２．ｒｓ２（ｔ），ＡＬＵ２．ｒｄ（ｔ）｝（式３）
【００１６】
浮動小数点加算器１０６のようなパイプラインされた関数ユニットに対しては、その状態は、ソースレジスタ、及び各々がパイプラインされた命令の宛先レジスタからなり、比較的複雑である。すなわち、パイプラインされたユニット、すなわち、ロード／記憶ユニット１０３、ロードバッファ１０４，記憶バッファ１０５、浮動小数点加算器１０６、及び浮動小数点乗算器１０７に対して、それらの各々の時刻ｔでの状態、ＬＳ（ｔ）、ＬＢ（ｔ）、ＳＢ（ｔ）、ＦＡ（ｔ）、及びＦＭ（ｔ）は、各々次のように表される。
ＬＳ＝｛ＬＳ．ｒｓ１ｉ（ｔ），ＬＳ．ｒｓ２ｉ（ｔ），ＬＳ．ｒｄｉ（ｔ）｝（ここで、ｉ＝｛１，２｝）（式４）
ＬＢ＝｛ＬＢ．ｒｓ１ｉ（ｔ），ＬＢ．ｒｓ２ｉ（ｔ），ＬＢ．ｒｄｉ（ｔ）｝（ここで、ｉ＝｛１，２，．．．，９｝）（式５）
ＳＢ＝｛ＳＢ．ｒｓ１ｉ（ｔ），ＳＢ．ｒｓ２ｉ（ｔ），ＳＢ．ｒｄｉ（ｔ）｝（ここで、ｉ＝｛１，２，．．．，８｝）（式６）
ＦＡ＝｛ＦＡ．ｒｓ１ｉ（ｔ），ＦＡ．ｒｓ２ｉ（ｔ），ＦＡ．ｒｄｉ（ｔ）｝（ここで、ｉ＝｛１，．．．，４｝）（式７）
ＦＭ＝｛ＦＭ．ｒｓ１ｉ（ｔ），ＦＭ．ｒｓ２ｉ（ｔ），ＦＭ．ｒｄｉ（ｔ）｝（ここで、ｉ＝｛１，．．．，４｝）（式８）
【００１７】
最後に、浮動小数点除算器１０８の状態ＦＳＤ（ｔ）は、以下の式によって表される。
ＦＤＳ＝｛ＦＤＳ．ｒｓ１ｉ（ｔ），ＦＤＳ．ｒｓ２ｉ（ｔ），ＦＤＳ．ｒｄｉ（ｔ）｝（式９）
【００１８】
状態変数Ｓ（ｔ）は、集中化された配置もしくは分散化された配置のいずれかで、１つのレジスタもしくは内容参照可能メモリなどの記憶素子によって表すことができる。例えば、分散化された配置では、ある与えられた関数ユニットに関する状態Ｓ（ｔ）の一部が、その関数ユニットの制御論理によって実施される。
【００１９】
従来技術では、グループ化論理回路は、時刻ｔでの現在の状態Ｓ（ｔ）から、時刻（ｔ＋１）での次のプロセッササイクルの命令をディスパッチするために必要な情報を含む次の状態Ｓ（ｔ＋１）を求める。例えば、書き込み後の読み出しハザードを回避するために、グループ化論理回路は、次の状態Ｓ（ｔ＋１）から、完了したばかりの命令の結果を記憶するために指定されたレジスタからフェッチされるオペランドを含む命令を除外する。他の例では、グループ化論理回路は、状態Ｓ（ｔ＋１）の中に、ただ１つの浮動小数点「ＡＤＤ」命令を各プロセッササイクルごとに含み、その理由はただ１つの浮動小数点加算器（すなわち、浮動小数点加算機１０６）のみが利用できるからである。上述されたように、複雑さが増すにしたがって、グループ化論理回路を通して伝達されるために必要な時間が、プロセッササイクルに対する臨界的なパスとなりえる。すなわち、本発明に基づけば、グループ化論理回路１０９は、τプロセッササイクルにわたって、現在の状態Ｓ（ｔ）に基づく将来の状態Ｓ（ｔ＋τ）を伝達するためにパイプラインされている。この将来の状態Ｓ（ｔ＋τ）は、時刻（ｔ＋τ）でのディスパッチを行うための命令グループを決定する。パイプライングループ化ロジック１０９は、以下に例示されるように、（１）状態Ｓ（ｔ＋τ）が十分な確度で状態Ｓ（ｔ）の対応する値から求められること、及び、（２）その値が正確には予測されない状態変数に対して、状態Ｓ（ｔ＋τ）の全ての可能な結果を提供すること、及び性能に関するわずかな不利を伴って伝統的なアプローチを（すなわち、そのような命令がディスパッチされていた可能性のある場合に、その命令をディスパッチしないこと）を用いることが、比較的容易であるということ、により実現可能である。
【００２０】
状態Ｓ（ｔ＋τ）を予測する方法が以下に説明される。以下の説明は、次の状態Ｓ（ｔ＋１）のほとんどの要素が、現在の状態Ｓ（ｔ）から正確に求められ、状態Ｓ（ｔ）の残りの要素が、特定の非決定論的な条件が適切に処理される場合に、適切に求められるということを説明する。帰納法を用いることによって、将来の状態Ｓ（ｔ＋τ）が（ここでτは１より大きい数）が同様に状態Ｓ（ｔ）から求められるということが表される。
【００２１】
浮動小数点加算器１０６もしくは浮動小数点乗算器１０７内の１つの命令が４つのプロセッササイクルの後に完了し、ロード／記憶ユニット１０３内の１つの命令が２つのプロセッササイクルの後に完了するので、時刻（ｔ＋１）での状態ＦＡ、ＦＭ、及びＬＳは、プロセッササイクルの直前の時刻ｔに於ける対応する状態Ｓ（ｔ）から求めることができる。特に、時刻（ｔ＋１）と時刻ｔとの間の、浮動小数点加算器１０６と、浮動小数点乗算器１０７と、ロード／記憶ユニット１０３との、各々のソースレジスタおよび宛先レジスタとの間の関係は、以下の式で表される。
ｒｓ１ｉ（ｔ＋１）＝ｒｓ１（ｉ−１）（ｔ）（ここで、１＜ｉ≦ｋ）（式１０）
ｒｓ２ｉ（ｔ＋１）＝ｒｓ２（ｉ−１）（ｔ）（ここで、１＜ｉ≦ｋ）（式１１）
ｒｄｉ（ｔ＋１）＝ｒｄ（ｉ−１）（ｔ）（ここで、１＜ｉ≦ｋ（式１２）
【００２２】
ここで、ｋは、対応するパイプラインの深さを表している。
【００２３】
命令を実行するために必要とされる時間が１プロセッササイクルを越える、浮動小数点除算器１０８の状態ＦＳＤ（ｔ＋１）は、以下の式に表されるように状態ＦＳＤ（ｔ）から求められる。
ＦＳＤ（ｔ＋１）＝ＦＳＤ（ｔ）（最後のステージ），又は＝０（それ以外の場合）（式１３）
【００２４】
浮動小数点除算器１０８がその最後の状態にあるか否かは、浮動小数点除算器１０８の命令の実行が開始されたために経過した複数のプロセッササイクルの経緯（ｔｒａｃｋ）を保持するハードウェアカウンタもしくは状態レジスタから求められる。
【００２５】
ロードバッファ１０４と記憶バッファ１０５では、各々の待ち時間のヘッドに於ける継続中の読み出しもしくは書き込み動作が１つのプロセッササイクル内で完了する必要はないので、時刻（ｔ＋１）での状態ＬＢ（ｔ＋１）は、時刻ｔでのすぐ前の状態ＬＢ（ｔ）からは正確には求められない。しかしながら、状態ＬＢ（ｔ＋１）は同じ状態にあるか、もしくは１ステージだけのパイプラインの動きを反映するので、状態ＬＢ（ｔ＋１）を求める２つの方法が用いられる。第１の方法は、伝統的なアプローチであり、ＬＢ（ｔ）と同様にＬＢ（ｔ＋１）を予測するものである。このアプローチでは、ロードバッファ１０４が満たされた状態のとき、ロードバッファ１０６のパイプラインが進行するまで、命令はディスパッチされない。予測が正しくない場合、すなわちロード命令が時刻ｔのプロセッササイクルの間に完了した場合、この伝統的なアプローチは、１プロセッササイクルの不利を導く。その理由はロード命令が時刻（ｔ＋１）でディスパッチされるからである。代わりに、２つの結果、すなわちロードバッファ１０４は１ステージ進み、ロードバッファ１０４が同じ状態に留まることに対して、より攻撃的なアプローチが用いられる。この攻撃的なアプローチでは、グループ化ロジック１０９は、時刻（ｔ＋１）でロード命令が実際に完了したことを表す制御信号によってイネーブルたとき、ロード命令をディスパッチするよう準備が整っている。この攻撃的な方法は、伝統的なアプローチよりも複雑な論理回路を必要とする。
【００２６】
すなわち、当業者には、ＣＰＵ１００の状態Ｓ（ｔ＋１）が状態Ｓ（ｔ）から予測されることがわかる。したがって、予測された状態Ｓ（ｔ＋１）に基づいて時刻（ｔ＋１）でディスパッチされる命令の個数と命令の形式の両方（すなわち、時刻ｔ＋１での命令グループ）が、時刻（ｔ＋１）での実際の状態ＳＡ（ｔ＋１）に基づいて更に処理が行われた場合を前提として、時刻ｔで状態Ｓ（ｔ）から求められる。
【００２７】
上述された方法は、時刻（ｔ＋τ）での状態Ｓ（ｔ＋τ）を、時刻ｔでの状態Ｓ（ｔ）から求める場合にも敷衍することができる。時刻（ｔ＋τ）での命令グループは、時刻ｔと時刻（ｔ＋τ）との間の各命令グループに対して、その命令グループからの全ての命令が、次の命令グループからの任意の命令がディスパッチされる前に、ディスパッチされる場合に（すなわち命令グループがマージされない場合に）、時刻ｔから求められる。
【００２８】
異なる命令グループからの命令はマージされないので、イントラグループの従属性とインターグループの従属性とは並列にチェックできる。命令は、命令キャッシュメモリもしくは命令バッファからフェッチされる。命令バッファは、好ましくは、命令キャッシュメモリに対する全てのアクセスが（例えば、分岐命令が）整列しておらず、かつプログラムの基本的ブロック内の複数のエントリーポイントが可能であるシステム内にあることが好ましい。
【００２９】
１つの命令グループに対する４つの候補命令が特定されると、イントラグループのデータの従属性のチェックが開始される。上述された命令グループのマージに対する、すなわち、命令グループの命令の全てに対する、次の命令グループがディスパッチされる前にディスパッチされなければならない、という制約のために、イントラグループの従属性のチェックはパイプライン形式で行われる。すなわち、イントラグループの従属性のチェックは、２以上のプロセッササイクルにわたって行われ、全てのインターグループの従属性のチェックは、イントラグループの従属性のチェックとは別個に行われる。イントラグループの従属性のチェックのために、各命令グループは以下の式で表される。
ＩｎｔｒａＳ（ｔ）＝｛ｒｓ１ｉ（ｔ），ｒｓ２ｉ（ｔ），ｒｄｉ（ｔ），ｒｅｓｉ（ｔ）｝（ここで、０≦ｉ＜Ｗ−１）（式１４）
【００３０】
ここで、Ｗはマシンの幅であり、ｒｅｓｉは、命令Ｉのリソースの利用を表している。４ステージパイプライン２００の例が図２に表されている。図２では、命令グループが指定されるとすぐに、第１のステージ２０１で、イントラグループの従属性のチェックが実行される。その後、ステージ２０２では、命令グループ内でのリソースの配置が決定される。ステージ２０３では、前の命令グループのリソースの配置を考慮に入れたリソースの配置の決定が、ステージ２０１と２０２での決定とともにマージされる。例えば、現在の命令グループが浮動小数点除算器１０８に対して指定された命令を含む場合、浮動小数点除算器１０８を用いる以前の命令が、現在の命令グループがディスパッチされる時刻までに完了されていた場合に、ステージ２０３がこの時刻までに求められる。最後に、ステージ２０４で、非決定論的な条件が、例えば、記憶バッファ１０５での条件が考慮される。ディスパッチ可能な命令が、ステージ２０４の終わりでＣＰＵ１００内に与えられる。
【００３１】
上述された説明は本発明のある例を表すものであり、限定を意図するものではない。本発明の技術的視点を逸雑せずに、さまざまな変型及び変更が可能である。本発明は添付の特許請求の範囲によって定義される。
【００３２】
【発明の効果】
本発明によれば、リソース及びデータの完全性の解析が１つのプロセッササイクル内で行われ、並列処理化を促進される。
【図面の簡単な説明】
【図１】本発明の１つの例である４ウェイ・スーパースカラープロセッサのＣＰＵ１００のブロック図。
【図２】図１の４ウェイ・スーパースカラープロセッサの４ステージパイプライン・グループ化論理回路１０９の模式図。
【符号の説明】
１０９  グループ化論理回路
１０３  ロード／記憶ユニット
１０６  浮動小数点加算器
１０７  浮動小数点乗算器
１０８  浮動小数点除算器
１１０  完了ユニット
【図１】
0003851707.tif 000002
【図２】
0003851707.tif 000003