(57)【特許請求の範囲】
【請求項１】
それぞれ命令実行のための所定の処理を可能とする複数の実行リソースを含み、上記複数の実行リソースによってパイプライン処理を可能とするデータ処理装置であって、
上記実行リソースは、上記パイプライン処理を実行する実行パイプラインと命令のカテゴリとが互いに対応され、同一カテゴリの命令については、当該命令のフローの順序に従ってインオーダ方式で処理し、互いに異なるカテゴリの命令については当該命令のフローの順序にかかわらずにアウトオブオーダ方式で処理することを特徴とするデータ処理装置。
【請求項２】
上記データ処理装置は、命令をフェッチ可能な命令フェッチユニットを含み、
上記命令フェッチユニットは、フェッチされた命令をラッチ可能なグローバル命令キューと、
上記グローバル命令キューにラッチされた命令から生成されたレジスタライト情報を管理し、先行命令とのハザード要因であるフロー依存を各実行リソース毎に異なるスコープの先行命令のレジスタライト情報に基づいてチェック可能な情報キューと、を含む請求項１記載のデータ処理装置。
【請求項３】
上記情報キューは、先行命令のレジスタ読出しを後続命令の上記レジスタと同一のレジスタへの書込みが追い越さないように制御する請求項２記載のデータ処理装置。
【請求項４】
上記複数の実行リソースにおける各実行リソース毎に各実行リソースによる処理に伴うレジスタリード及びレジスタライトの対象となるローカルレジスタが配置されて成る請求項１記載のデータ処理装置。
【請求項５】
書込む値を生成した実行リソースに対応するローカルレジスタ、及び書込んだ値を読出す実行リソースに対応するローカルレジスタにレジスタ書込みが行われる請求項４記載のデータ処理装置。
【請求項６】
上記実行リソースには、上記命令に基づく演算実行を可能とする演算実行ユニットと、データのロード及びストアを可能とするロードストアユニットと、が含まれ、
上記ローカルレジスタには、演算命令用のローカルレジスタファイルと、ロードストア命令用のローカルレジスタファイルとが含まれ、
上記演算命令用のローカルレジスタファイルは、上記演算実行ユニット内に配置され、上記ロードストア命令用のローカルレジスタファイルは、上記ロードストアユニット内に配置されることによって、レジスタ読み出しの局所性が確保されて成る請求項４記載のデータ処理装置。
【請求項７】
上記情報キューは、先行命令のレジスタ書込みを後続命令の上記レジスタと同一のレジスタへの書込みが追い越さないように制御される請求項２記載のデータ処理装置。
【請求項８】
上記情報キューは、先行命令のレジスタ書込みが上記レジスタと同一のレジスタへの後続命令のレジスタ書込みに追い越された場合には先行命令のレジスタ書込みが抑止される請求項２記載のデータ処理装置。
【請求項９】
上記命令のカテゴリとして、ロードストア、演算、分岐の各カテゴリを含む請求項１記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ等のデータ処理装置に関し、効率的なパイプライン制御を可能にする技術に関する。
【背景技術】
【０００２】
従来、プロセッサ等のデータ処理装置においては、プロセス微細化の進展による利用可能なトランジスタ数の継続的な増加を活用して、回路の大規模化による高性能化を実現してきた。また、プロセッサアーキテクチャは単一の命令フローを前提とするフォンノイマン型が主流であり、単一の命令フローから大規模な命令発行論理によって最大限の並列性を抽出して処理することが高性能化に欠かせないものであった。
【０００３】
例えば、現在ハイエンドプロセッサの方式として一般的なアウトオブオーダ方式では、単一の命令フローを大容量のバッファに保持してデータ依存関係をチェックし入力データが揃った命令から実行し、実行後に再び本来の命令フローの順序に従ってプロセッサ状態を更新する。この際に、レジスタオペランドの逆依存や出力依存による命令発行制限をなくすために大容量レジスタファイルを用意して、レジスタリネーミングを行う。この結果、先行して実行した結果を後続命令が本来より早く使用することが可能となり性能向上に寄与するものの、プロセッサ状態の更新までアウトオブオーダにしてしまうことはできない。プログラムを一旦止めて後で再開するというプロセッサの基本的な処理ができなくなってしまうためである。したがって、先行して実行した結果は大容量のリオーダバッファに蓄えられ本来の順序でレジスタファイル等に書き戻される。このように単一命令フローのアウトオブオーダ実行は、大容量バッファと複雑な制御を必要とする効率の低い方式である。例えば、非特許文献１では、第２５頁の図２のように整数発行キュー（Integer issue queue）を２０エントリ、浮動小数点発行キュー（Floating-point issue queue）を１５エントリ、整数レジスタファイル（Integer register file）を80本2セット、浮動小数点レジスタファイル（Floating-point register file）を７２本用意し、大規模なアウトオブオーダ発行を可能にしている。
【０００４】
尚、アウトオブオーダ方式について記載された他の文献としては、特許文献１，２を挙げることができる。
【０００５】
一方、比較的論理規模の小さいインオーダ方式では、命令発行論理だけでなくプロセッサ全体が同期して動作することが基本であるため、ある命令の実行が滞った場合に依存関係の有無に関係なく後続命令の処理を停止させる必要がある。このため、プロセッサの各部から実行可能性の情報を集めて、プロセッサ全体としての実行可能性を判断し、その判断結果をプロセッサの各部伝えて、プロセッサ全体が同期して動作することを保証している。
【０００６】
尚、インオーダ方式について記載された文献の例としては、特許文献３を挙げることができる。
【０００７】
【非特許文献１】R. E. Kessler, “THE ALPHA 21264 MICROPROCESSOR,” IEEE Micro, vol.19, no.2, pp.24-36, MARCHAPRIL 1999.
【特許文献１】特開２００４−３０３０２６号公報
【特許文献２】特開平１１−３５３１７７号公報
【特許文献３】特開２００７−１６４３５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
近年、プロセス微細化の進展に伴い、回路の遅延要因としてゲート遅延より配線遅延が支配的になっており、論理回路高速化のためには配線遅延に配慮した方式を考案する必要がある。このため、プロセッサ等のデータ処理装置においても、こうした微細プロセスに最適なパイプライン構造の構築が必要になってきている。配線遅延に配慮した方式とは、具体的には処理の局所性を高めると共に、情報・データ転送量の削減が可能な方式である。
【０００９】
また、プロセス微細化の進展に伴って低減されてきた電力も、微細化に伴うリーク電流の指数関数的増大によって低減されなくなっている。したがって、微細化によって使用できるトランジスタが増加しても、その増加に伴って電力も増加するため、従来のように回路の大規模化によって高性能化すると、性能向上を上回る電力増大によって電力効率が低下してしまう。また、これまで順調に進んできたチップに対する電力制約緩和もサーバ系では１００Ｗ、据置型の組込系では数Ｗ、携帯機器向け組込系では数百ｍＷで頭打ちとなっている。こうした電力制約の下で最高の性能を発揮するのは、電力効率が最高のチップである。したがって、従来にも増して高効率な方式が必要とされている。
【００１０】
しかしながら、前述の大規模アウトオブオーダ方式は、大規模ハードウェアを必要とするため、処理の局所性を高めることも、電力効率を高めることもできない。また、インオーダ方式も、プロセッサ全体が同期して動作する必要があるため、処理の局所性を高めることが困難であり、配線遅延に配慮した方式とは言えない。但し、アウトオブオーダ方式は、命令実行中はインオーダ方式のような全体の同期が不要であり処理の局所性がある。
【００１１】
本発明の目的は、インオーダ方式のような比較的小規模のハードウェアで、アウトオブオーダ方式のように全体の同期が不要な方式を実現し、処理の局所性を高めると共に、電力効率を高めることにある。
【００１２】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１３】
本願において開示される発明のうち代表的なものについて簡単に説明すれば下記のとおりである。
【００１４】
すなわち、データ処理装置は、それぞれ命令実行のための所定の処理を可能とする複数の実行リソース（ＥＸＵ，ＬＳＵ）を含み、上記複数の実行リソースによってパイプライン処理が可能とされる。上記実行リソースは、同一の実行リソースで処理される命令については、当該命令のフローの順序に従ってインオーダ方式で処理し、互いに異なる実行リソースで処理される命令については当該命令のフローの順序にかかわらずにアウトオブオーダ方式で処理する。このような処理が行われることで、実行リソース内の局所的な処理が単純化されて小規模なハードウェアで実現され、実行リソースを跨ぐ大局的な処理の同期が不要となって、処理の局所性および電力効率が高まる。
【発明の効果】
【００１５】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００１６】
すなわち、インオーダ方式のような比較的小規模のハードウェアで、アウトオブオーダ方式のように全体の同期が不要な方式を実現し、処理の局所性を高めると共に、電力効率を高めることができる。
【発明を実施するための最良の形態】
【００１７】
１．代表的な実施の形態
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１８】
〔１〕本発明の代表的な実施の形態に係るデータ処理装置（１０）は、それぞれ命令実行のための所定の処理を可能とする複数の実行リソース（ＥＸＵ，ＬＳＵ）を含み、上記複数の実行リソースによってパイプライン処理が可能とされる。そして上記実行リソースは、同一の実行リソースで処理される命令については、当該命令のフローの順序に従ってインオーダ方式で処理し、互いに異なる実行リソースで処理される命令については当該命令のフローの順序にかかわらずにアウトオブオーダ方式で処理する。このような処理により、実行リソース内の局所的な処理が単純化されて小規模なハードウェアで実現され、実行リソースを跨ぐ大局的な処理の同期が不要となって、処理の局所性および電力効率が高まる。
【００１９】
〔２〕上記データ処理装置は命令をフェッチ可能な命令フェッチユニット（ＩＦＵ）を含む。このとき上記命令フェッチユニットは、先行命令とのハザード要因であるフロー依存を各実行リソース毎に異なるスコープの先行命令のレジスタ書込み情報でチェック可能な情報キュー（ＷＩＱ，ＲＷＩＱ）を含む。これにより、アウトオブオーダ実行の結果として各実行リソースの進捗が異なるようになり、各実行リソース毎に先行命令が異なるような状況においてもフロー依存をチェックすることが可能となる。
【００２０】
〔３〕上記情報キューは、先行命令のレジスタ読出しを後続命令のレジスタ書込みが追い越さないように制御する。具体的には後続命令のレジスタ書込み以前に先行命令のレジスタ読出し番号をチェックし、逆依存関係が検出されたら、後続命令のレジスタ書込みを遅延させ、先行命令のレジスタ読出しを先行させる。これにより、逆依存関係にある命令の実行結果の整合性が保たれる。
【００２１】
〔４〕上記複数の実行リソースにおける各実行リソース毎にローカルレジスタを配置することができる。これにより、レジスタ読出しの局所性を確保することができる。
【００２２】
〔５〕書込んだ値を読出す実行リソースに対応するローカルレジスタにのみレジスタ書込みが行われる。これにより、逆依存チェックが不要となると共に消費電力が低減される。
【００２３】
〔６〕上記実行リソースには、上記命令に基づく演算実行を可能とする演算実行ユニットと、データのロード及びストアを可能とするロードストアユニットとが含まれる。このとき、上記ローカルレジスタには、演算命令用のローカルレジスタファイルと、ロードストア命令用のローカルレジスタファイルとを設けることができる。レジスタ読出しの局所性を確保するため、上記ローカルレジスタファイルは、上記演算実行ユニット内に配置され、上記ローカルレジスタファイルは、上記ロードストアユニット内に配置される。
【００２４】
〔７〕先行命令のレジスタ書込みを後続命令のレジスタ書込みが追い越さないように制御することで、逆依存関係にある命令の実行結果の整合性を保つようにしても良い。
【００２５】
〔８〕先行命令のレジスタ書込みが同一レジスタへの後続命令のレジスタ書込みに追い越された場合には先行命令のレジスタ書込みを抑止することによって、逆依存関係にある命令の実行結果の整合性を保つようにしても良い。
【００２６】
２．実施の形態の説明
次に、実施の形態について更に詳述する。
【００２７】
《本実施形態の比較例》
ここでまず、実施形態の比較例となる従来プロセッサの構成、動作等を図１、図２及び図６に基づいて説明する。
【００２８】
図６には、プロセッサの動作例を説明するための第１のプログラムが例示される。
【００２９】
第１のプログラムは、図６（Ａ）においてＣ言語で記述されるように、Ｎ個の要素を持つ２つの配列ａ［ｉ］とｂ［ｉ］を加算し、配列ｃ［ｉ］に格納するプログラムである。この第１のプログラムをアセンブラで記述した場合について説明する。アセンブラプログラムではポストインクリメントタイプのロード及びストア命令を有するアーキテクチャを想定している。
【００３０】
図６（Ｂ）に示されるように、まず初期設定として４つの即値転送命令「ｍｏｖ  ＃＿ａ，ｒ０」、「ｍｏｖ  ＃＿ｂ，ｒ１」、「ｍｏｖ  ＃＿ｃ，ｒ２」及び「ｍｏｖ  ＃Ｎ，ｒ３」によって、３つの配列の先頭アドレス＿ａ、＿ｂ、＿ｃ、及び配列の要素数Ｎを、それぞれレジスタｒ０、ｒ１、ｒ２、及びｒ３に格納する。次に、ループ部では、ポストインクリメントロード命令「ｍｏｖ  ＠ｒ０＋，ｒ４」及び「ｍｏｖ  ＠ｒ１＋，ｒ５」によって、ｒ０及びｒ１の指す配列ａ及びｂのアドレスから配列要素をｒ４及びｒ５にロードすると同時に、ｒ０及びｒ１をインクリメントして次の配列要素を指すようにする。次に、デクリメント・テスト命令「ｄｔ  ｒ３」によって、ｒ３に格納された要素数Ｎをデクリメントし、その結果がゼロかどうかをテストし、ゼロであればフラグをセットし、ゼロでなければフラグをクリアする。その後、加算命令「ａｄｄ  ｒ４，ｒ５」によって、ｒ４及びｒ５にロードされた配列要素を加算し、ｒ５に格納する。そして、ポストインクリメントストア命令「ｍｏｖ  ｒ５，＠ｒ２＋」によって、配列ｃの要素アドレスに配列要素の加算結果であるｒ５の値をストアする。最後に、条件分岐命令「ｂｆ  ＿Ｌ００」によって、フラグをチェックし、クリアされていれば、残り要素数Ｎがまだゼロではないので、ラベル＿Ｌ００の指すループの先頭に分岐する。
【００３１】
図２には、アウトオブオーダ方式のプロセッサのパイプライン構造が概略的に例示される。
【００３２】
全命令共通の命令キャッシュアクセスＩＣ１及びＩＣ２、並びにグローバル命令バッファＧＩＢ、演算及びロードストア命令用のレジスタリネーミングＲＥＮ及び命令発行ＩＳＳ、演算命令用のローカル命令バッファＥＸＩＢ、レジスタリードＲＲ、並びに、演算ＥＸ、ロードストア命令用のローカル命令バッファＬＳＩＢ、レジスタリードＲＲ、ロードストアアドレス計算ＬＳＡ、データキャッシュアクセスＤＣ１、並びに、ロード命令用のデータキャッシュアクセス第２ステージＤＣ２、ストア命令用のストアバッファアドレス及びデータ書込みＳＢＡ及びＳＢＤ、分岐命令用の分岐ＢＲ、レジスタライトバックのある命令に共通の物理レジスタライトバックＷＢ、並びに、論理レジスタへの書戻しによる命令リタイヤＲＥＴの各ステージから成る。尚、ポストインクリメントによるアドレスレジスタ更新結果はアドレス計算ＬＳＡに続くデータキャッシュアクセスＤＣ１ステージで物理レジスタへライトバックされる。命令フェッチは４命令ずつとし、命令発行はロードストア、演算、分岐の各カテゴリ毎に１サイクルに１命令発行可能であるとする。
【００３３】
図３には、第１のプログラムを図２に例示されたアウトオブオーダ方式のプロセッサで実行した場合のループ部のパイプライン動作が例示される。
【００３４】
まず先頭のロード命令「ｍｏｖ  ＠ｒ０＋，ｒ４」の実行では、命令キャッシュアクセスＩＣ１及びＩＣ２、グローバル命令バッファＧＩＢ、レジスタリネーミングＲＥＮ、命令発行ＩＳＳ、ローカル命令バッファＬＳＩＢ、レジスタリードＲＲ、アドレス計算ＬＳＡ、データキャッシュアクセスＤＣ１及びＤＣ２、物理レジスタライトバックＷＢ、並びに、命令リタイヤＲＥＴの各ステージの処理によって命令が実行される。２番目のロード命令「ｍｏｖ  ＠ｒ１＋，ｒ５」の実行では、先行するロード命令とリソースが競合するため、レジスタリネーミングＲＥＮ後に１サイクルのバブルステージが発生するが、他は先頭ロード命令と同様に処理される。３番目のデクリメント・テスト命令「ｄｔ  ｒ３」の実行では、命令発行ＩＳＳまでは1番目のロード命令と同様に処理され、その後ローカル命令バッファＥＸＩＢ、レジスタリードＲＲ、演算ＥＸ、並びに、物理レジスタライトバックＷＢの各ステージの処理をした後、先行命令との順序関係を回復するために４サイクルのバブルステージを挟んで命令リタイヤＲＥＴステージの処理が実行される。４番目の加算命令「ａｄｄ  ｒ４，ｒ５」の実行では、先行する２つのロード命令に対してフロー依存があるため、レジスタリネーミングＲＥＮ後に４サイクルのバブルステージが発生した後、命令発行ＩＳＳ、ローカル命令バッファＥＸＩＢ、レジスタリードＲＲ、演算ＥＸ、物理レジスタライトバックＷＢ、並びに、命令リタイヤＲＥＴの各ステージの処理によって命令が実行される。５番目のポストインクリメントストア命令「ｍｏｖ  ｒ５，＠ｒ２＋」では、命令フェッチが４命令ずつであるため、先行4命令に対して1サイクル遅れの命令キャッシュアクセスＩＣ１及びＩＣ２、グローバル命令バッファＧＩＢ、並びに、レジスタリネーミングＲＥＮステージの後、先行するロード命令とリソースが競合するため１サイクルのパイプラインバブルが発生し、その後、命令発行ＩＳＳ、ローカル命令バッファＬＳＩＢ、レジスタリードＲＲ、アドレス計算ＬＳＡ、データキャッシュアクセスＤＣ１、ストアバッファアドレス及びデータ書込みＳＢＡ及びＳＢＤ、並びに、命令リタイヤＲＥＴの各ステージの処理によって命令が実行される。尚、レジスタｒ５はレジスタリードＲＲステージで読もうとするとフロー依存で待たされてしまうが、ストアバッファデータ書込みＳＢＤステージで受取れば待たされない。ループ最後の条件分岐命令「ｂｆ  ＿Ｌ００」の実行では、グローバル命令バッファＧＩＢステージ直後の分岐ＢＲステージによって命令が処理される。分岐処理は1ループ６命令の小ループで全命令をグローバル命令キューＧＩＱに保持可能なため、グローバル命令キューＧＩＱに保持した1ループ分の命令を繰返し実行することにより実現する。この結果、ＢＲステージの直後には分岐先命令であるループ先頭命令「ｍｏｖ  ＠ｒ０＋，ｒ４」のグローバル命令キューＧＩＱステージが実行される。
【００３５】
以上のような動作の結果、各命令実行時のレジスタリネーミングＲＥＮステージからリタイヤＲＥＴステージまでのサイクル数は９〜１１サイクルになる。この間レジスタライト毎に異なる物理レジスタが割当てられ、ループ処理の開始は３サイクル毎であるため、１ループ目の物理レジスタが開放されるのは４ループ目の途中である。また、論理レジスタＲ５は２番目のロード命令と４番目の加算命令によるライトバックが行われるため、１ループ内でレジスタＲ５用に２個の物理レジスタを割当てる。この結果、６本の論理レジスタをマッピングするために必要な物理レジスタ数は１ループ当り７本であり、１〜４ループ目までは異なる物理レジスタが必要であるため合計２８本となる。
【００３６】
図４には、第１のプログラムをアウトオブオーダ方式のプロセッサで実行した場合のループ部の動作が例示される。図２に例示したパイプライン動作の命令発行ＩＳＳステージ又は分岐ＢＲステージで各命令の実行サイクルを代表させている。ロード命令ではアドレス計算ＬＳＡ、データキャッシュアクセスＤＣ１及びＤＣ２の３ステージ、分岐命令では分岐ＢＲ、グローバル命令バッファＧＩＢ、及びレジスタリネーミングＲＥＮステージのそれぞれ３ステージがレイテンシとして見えるため、ロード命令及び分岐命令のレイテンシは３となる。まず、１サイクル目には先頭のロード命令「ｍｏｖ  ＠ｒ０＋，ｒ４」、３番目のデクリメント・テスト命令「ｄｔ  ｒ３」、及びループ最後の条件分岐命令「ｂｆ  ＿Ｌ００」が実行される。２サイクル目には２番目のロード命令「ｍｏｖ  ＠ｒ１＋，ｒ５」が、３サイクル目には５番目のポストインクリメントストア命令「ｍｏｖ  ｒ５，＠ｒ２＋」が実行される。そして、４サイクル目には２ループ目の処理が開始され、１サイクル目と同じ動作となる。更に５サイクル目には１ループ目の４番目の加算命令「ａｄｄ  ｒ４，ｒ５」と２ループ目の２番目のロード命令「ｍｏｖ  ＠ｒ１＋，ｒ５」が実行され、６サイクル目は３サイクル目と同じ動作となる。その後は、１ループ当り３サイクルの動作が繰り返される。
【００３７】
図５には、ロードレイテンシを図４の３から９に伸ばした場合のループ部の動作が例示される。大規模データを扱う場合高速な小容量メモリには収まらないため、長いレイテンシを仮定することは現実的である。ロードレイテンシ増に伴い、４番目の加算命令「ａｄｄ  ｒ４，ｒ５」の実行開始が図４に比べて６サイクル遅れている。この結果、レジスタリネーミングＲＥＮステージからリタイヤＲＥＴステージまでのサイクル数は図３の場合より６サイクル長い１５〜１７サイクルになり、物理レジスタが開放されるのは６ループ目の途中である。したがって、６本の論理レジスタをマッピングするために必要な物理レジスタ数は２ループ分１４本増えて合計４２本となる。以上のように、従来のアウトオブオーダ方式では、プログラムや実行レイテンシに依存するものの、論理レジスタの４〜７倍程度の物理レジスタを必要とする。
【００３８】
《実施形態》
図１には、本発明にかかるデータ処理装置の一例とされるプロセッサのブロック構成が概略的に例示される。
【００３９】
図１に示されるプロセッサ１０は、特に制限されないが、命令キャッシュＩＣ、命令フェッチユニットＩＦＵ、データキャッシュＤＣ、ロードストアユニットＬＳＵ、命令実行ユニットＥＸＵ、及びバスインタフェースユニットＢＩＵを含む。命令キャッシュＩＣ近傍には、命令フェッチユニットＩＦＵが配置され、その中には、フェッチした命令を最初に受取るグローバル命令キューＧＩＱ、分岐処理制御部ＢＲＣ、グローバル命令キューＧＩＱにラッチされた命令から生成したレジスタライト情報を保持してレジスタライトが完了するまで管理するライト情報キューＷＩＱが含まれる。また、データキャッシュＤＣ近傍には、ロードストアユニットＬＳＵが配置され、その中には、ロードストア命令を保持するロードストア命令キューＬＳＩＱ、ロードストア命令用のローカルレジスタファイルＬＳＲＦ、ロードストア命令用のアドレス加算器ＬＳＡＧ、ストア命令のアドレス及びデータを保持するストアバッファＳＢが含まれる。更に、命令実行ユニットＥＸＵには、演算命令を保持する実行命令キューＥＸＩＱ、演算命令用のローカルレジスタファイルＥＸＲＦ、演算命令用の演算器ＡＬＵが含まれる。そして、バスインタフェースユニットＢＩＵはプロセッサ１０と外部バスとのインタフェースとして機能する。
【００４０】
図７には、上記プロセッサ１０のパイプライン構成が概略的に例示される。
【００４１】
まず、全命令共通の命令キャッシュアクセスＩＣ１及びＩＣ２、並びに、グローバル命令バッファＧＩＢステージがあり、演算命令用には、ローカル命令バッファＥＸＩＢ、ローカルレジスタリードＥＸＲＲ、並びに、演算ＥＸがある。また、ロードストア命令用には、ローカル命令バッファＬＳＩＢ、ローカルレジスタリードＬＳＲＲ、アドレス計算ＬＳＡ、データキャッシュアクセスＤＣ１の各ステージがあり、ロード命令用には、データキャッシュアクセス第２ステージＤＣ２、ストア命令用には、ストアバッファアドレス及びデータ書込みＳＢＡ及びＳＢＤの各ステージがある。更に、分岐命令用には分岐ＢＲの各ステージがあり、レジスタライトバックのある命令に共通のレジスタライトバックＷＢステージがある。
【００４２】
命令キャッシュアクセスＩＣ１及びＩＣ２ステージでは、命令フェッチユニットＩＦＵが命令キャッシュＩＣから４命令ずつ命令をフェッチし、それをグローバル命令バッファＧＩＢステージのグローバル命令キューＧＩＱに格納する。グローバル命令バッファＧＩＢステージでは、格納した命令からレジスタライト情報を生成し、次サイクルでライト情報キューＷＩＱに格納する。また、ロードストア、演算、並びに、分岐の各カテゴリの命令が１命令ずつ抽出され、それぞれローカル命令バッファＬＳＩＢ及びＥＸＩＢ、並びに、分岐ＢＲステージで、それぞれロードストアユニットＬＳＵの命令キューＬＳＩＱ、命令実行ユニットＥＸＵの命令キューＥＸＩＱ、並びに、命令フェッチユニットＩＦＵの分岐制御部ＢＲＣに格納される。そして、分岐ＢＲステージでは、分岐命令を受取った場合には直ちに分岐処理が開始される。
【００４３】
演算命令用パイプラインでは、命令実行ユニットＥＸＵがローカル命令バッファＥＸＩＢステージで演算命令を１サイクルに最大１命令ずつ命令キューＥＸＩＱに受け取って最大１命令ずつデコードすると共に、命令フェッチユニットＩＦＵがライト情報キューＷＩＱをチェックしてデコード中の命令の先行命令に対するレジスタ依存の有無を検出する。次のローカルレジスタリードＥＸＲＲステージでは、レジスタ依存がなければレジスタリードを行い、依存があればステージをストールしてパイプラインバブルを発生させる。その後、演算ＥＸステージで演算器ＡＬＵを用いて演算を行い、レジスタライトバックＷＢステージでレジスタに格納する。
【００４４】
ロードストア命令用のパイプラインでは、ロードストアユニットＬＳＵがローカル命令バッファＬＳＩＢステージでロードストア命令を１サイクルに最大１命令ずつ命令キューＬＳＩＱに受け取って最大１命令ずつデコードすると共に、命令フェッチユニットＩＦＵがライト情報キューＷＩＱをチェックしてデコード中の命令の先行命令に対するレジスタ依存の有無を検出する。次のローカルレジスタリードＬＳＲＲステージでは、レジスタ依存がなければレジスタリードを行い、依存があればステージをストールしてパイプラインバブルを発生させる。その後、アドレス計算ＬＳＡステージでアドレス加算器ＬＳＡＧを用いてアドレス計算を行う。そして、ロード命令であれば、データキャッシュアクセスＤＣ１及びＤＣ２ステージでデータキャッシュＤＣからデータをロードし、レジスタライトバックＷＢステージでレジスタに格納する。ストア命令であれば、データキャッシュアクセスＤＣ１ステージでアクセスの例外チェック及びデータキャッシュＤＣのヒットミス判定を行い、ストアバッファアドレス及びデータ書込みＳＢＡ及びＳＢＤの各ステージで、それぞれストアアドレス及びストアデータをストアバッファへ書込む。
【００４５】
図８には、上記プロセッサ１０におけるグローバル命令キューＧＩＱ及びライト情報キューＷＩＱの構造が例示される。
【００４６】
図８に示されるように、グローバル命令キューＧＩＱは、１６命令分の命令キューエントリＧＩＱ０〜１５、書込み位置を指定するグローバル命令キューポインタＧＩＱＰ、演算、ロードストア、及び分岐の各カテゴリの命令の進捗に合せて進められ、読出し位置を指定する演算命令ポインタＥＸＰ、ロードストア命令ポインタＬＳＰ、分岐命令ポインタＢＲＰ、及びこれらのポインタをデコードする命令キューポインタデコーダＩＱＰ−ＤＥＣから成る。
【００４７】
一方  ライト情報キューＷＩＱは、ライト情報デコーダＷＩＤ０〜３、１６命令分の書込み情報エントリＷＩ０〜１５、新たな書込み情報セット位置を指定するライト情報キューポインタＷＩＱＰ、ローカル命令バッファステージＥＸＩＢ及びＬＳＩＢにある演算命令及びロードストア命令の位置を指定するロードストア命令ローカルポインタＬＳＬＰ及び演算命令ローカルポインタＥＸＬＰ、次に利用可能になるロードデータをロードする命令を指すロードデータライトポインタＬＤＷＰ、並びに、これらのポインタをデコードするライト情報キューポインタデコーダＷＩＰ−ＤＥＣから成る。
【００４８】
グローバル命令キューＧＩＱは、グローバル命令キューポインタＧＩＱＰのデコードによって生成されるグローバル命令キュー選択信号ＧＩＱＳに従って、命令キャッシュＩＣからフェッチした４命令ＩＣＯ０〜３を命令キューエントリＧＩＱ０〜３、ＧＩＱ４〜７、ＧＩＱ８〜１１、又はＧＩＱ１２〜１５にラッチし、ラッチ直後のサイクルで、ラッチした４命令をライト情報キューＷＩＱのライト情報デコーダＷＩＤ０〜３へ出力する。尚、フェッチした４命令ＩＣＯ０〜３の有効性を示す命令キャッシュ出力有効信号ＩＣＯＶを同時に受取り、この信号がアサートされていたらグローバル命令キューＧＩＱにラッチする。また、演算命令ポインタＥＸＰ、ロードストア命令ポインタＬＳＰ、及び分岐命令ポインタＢＲＰの３つのポインタのデコードによって生成される演算命令選択信号ＥＸＳ、ロードストア命令選択信号ＬＳＳ、及び分岐命令選択信号ＢＲＳに従って、各カテゴリの命令を１命令ずつ抽出して、演算命令ＥＸ−ＩＮＳＴ、ロードストア命令ＬＳ−ＩＮＳＴ、及び分岐命令ＢＲ−ＩＮＳＴとして出力する。
【００４９】
ライト情報キューＷＩＱでは、まず、ライト情報デコーダＷＩＤ０〜３がグローバル命令キューＧＩＱにラッチされた４命令を受取り、それらの命令のレジスタライト情報を生成する。そして、受取った命令の有効信号ＩＶがアサートされていたら、ライト情報キューポインタＷＩＱＰのデコードによって生成されるライト情報キュー選択信号ＷＩＱＳに従って、生成されたレジスタライト情報をＷＩ０〜３、ＷＩ４〜７、ＷＩ８〜１１、又はＷＩ１２〜１５にラッチする。ライト情報キューポインタＷＩＱＰはライト情報キューＷＩＱにラッチされた命令の中では最も古い命令を指しており、この最も古い命令から４命令のレジスタライト情報が不要になって消去されるとライト情報キューＷＩＱに空きができ、新たな４命令のライト情報のラッチが可能となる。そして、新たにライト情報をラッチしたら、次の４エントリを指すようにライト情報キューポインタＷＩＱＰを進める。
【００５０】
一方、演算命令ローカルポインタＥＸＬＰ及びロードストア命令ローカルポインタＬＳＬＰはこれから実行する命令を指定しており、前記の最も古い命令から、これらのポインタが指定する命令の直前の命令までが、これから実行する命令に先行する命令であり、フロー依存のチェック対象命令となる。そこで、ライト情報キューポインタデコーダＷＩＰ−ＤＥＣは、ライト情報キューポインタＷＩＱＰと演算命令及びロードストア命令のローカルポインタＥＸＬＰ及びＬＳＬＰとからフロー依存のチェック対象範囲のエントリを全て選択するための演算命令及びロードストア命令用マスク信号ＥＸＭＳＫ及びＬＳＭＳＫを生成する。
【００５１】
図９には演算命令用マスク信号ＥＸＭＳＫの生成論理が例示される。
【００５２】
入力信号はライト情報キューポインタＷＩＱＰが２ビット、演算命令ローカルポインタＥＸＬＰが４ビットの計６ビットであり、出力は１６命令分の書込み情報エントリＷＩ０〜１５に対応する演算命令用マスク信号ＥＸＭＳＫが１６ビットとなっている。ポインタはデコードを容易にするために２ビット単位で００、０１、１１、１０の順にサイクリックに更新する。２ビットのうち１ビットを見れば隣接番号かどうかが分かるため範囲信号生成に適したエンコーディングである。尚、ライト情報キューポインタＷＩＱＰは４つおきに進むため、００、０１、１１、１０のときはエントリ０、４、８，１２を指している。また、演算命令ローカルポインタＥＸＬＰは演算命令のみを指し、他の命令をスキップして進んでいく。
【００５３】
右端は６４通りの出力信号値に付けた番号である。また、表を見易くするために演算命令用マスク信号ＥＸＭＳＫが「１」の場合のみ記載し、「０」の場合は空欄にしている。＃１では２つのポインタが共に「０」で一致しているため先行する命令がないことを示しており、演算命令用マスク信号ＥＸＭＳＫは全て「０」である。そして、ライト情報キューポインタＷＩＱＰが「０」のまま、＃２〜１５のように演算命令ローカルポインタＥＸＬＰが進むと、先行命令が増えていき、それに応じて演算命令用マスク信号ＥＸＭＳＫがアサートされていく。同様に、＃２０では２つのポインタが共に４で一致しているため先行する命令がなく、そこからライト情報キューポインタＷＩＱＰが４のまま、＃２１〜３１、１６〜１９のように演算命令ローカルポインタＥＸＬＰが途中でラップアラウンドして進むと、先行命令が増えていき、それに応じて演算命令用マスク信号ＥＸＭＳＫがアサートされていく。＃３２以降も同様である。そして、ライト情報キューポインタＷＩＱＰ及びロードストア命令ローカルポインタＬＳＬＰからロードストア命令用マスク信号ＬＳＭＳＫを生成する論理も同一である。
【００５４】
以上のように演算命令用マスク信号ＥＸＭＳＫ生成論理は一見複雑そうに見えるが、論理回路は例えば図１０に示されるようになり、２入力ＮＡＮＤ換算で５０ゲートと小規模な論理で済む。尚、ＥＸＭＳＫの上のバーは論理反転を表す。比較のために演算命令ローカルポインタＥＸＬＰから演算命令ローカル選択信号ＥＸＬＳを生成する４ビットデコーダ論理を図１１に例示する。２入力ＮＡＮＤ換算で２８ゲートである。４ビットデコーダは制御部で随所に使われるが、上記マスク信号生成論理は２箇所のみであり、特に支障がない論理規模である。
【００５５】
以上のようにして生成した演算命令用マスク信号ＥＸＭＳＫによって、図８に示されるライト情報キューＷＩＱの１６エントリから演算命令ローカルポインタＥＸＬＰの指す演算命令に先行する命令のライト情報を取り出して論理和を取り、演算命令用ライト情報ＥＸ−ＷＩとして出力する。同様に、ロードストア命令用マスク信号ＬＳＭＳＫによって、ライト情報キューＷＩＱの１６エントリからロードストア命令ローカルポインタＬＳＬＰの指すロードストア命令に先行する命令のライト情報を取り出して論理和を取り、ロードストア命令用ライト情報ＬＳ−ＷＩとして出力する。
【００５６】
同時にグローバル命令バッファＧＩＢステージで、グローバル命令キューＧＩＱから出力された演算命令ＥＸ−ＩＮＳＴ及びロードストア命令ＬＳ−ＩＮＳＴをラッチ８１，８２でラッチして、ローカル命令バッファＬＳＩＢ及びＥＸＩＢステージに同期させ、演算命令及びロードストア命令のレジスタリード情報デコーダＥＸ−ＲＩＤ及びＬＳ−ＲＩＤに入力してデコードし、演算命令及びロードストア命令のレジスタリード情報ＥＸＩＢ−ＲＩ及びＬＳＩＢ−ＲＩを生成する。そして、ライト情報ＥＸ−ＷＩ及びＬＳ−ＷＩとリード情報ＥＸＩＢ−ＲＩ及びＬＳＩＢ−ＲＩとのレジスタ番号毎の論理積の、全てのレジスタ番号についての論理和を取り、それぞれ演算命令及びロードストア命令の発行ストールＥＸ−ＳＴＬ及びＬＳ−ＳＴＬとする。発行ストールＥＸ−ＳＴＬ及びＬＳ−ＳＴＬはラッチ８３，８４を介して出力される。
【００５７】
上記発行ストールがネゲートされると命令が発行される。本実施形態では演算命令の演算及びロードストア命令のアドレス計算は１サイクルで完了するものとしているため、演算命令及びロードストア命令が発行されると、その結果が次のサイクルで発行される命令から使用可能となる。したがって、命令が発行されたらライト情報キューＷＩＱ内の対応するレジスタライト情報がクリアされる。そこで、演算命令及びロードストア命令の発行ストールＥＸ−ＳＴＬ及びＬＳ−ＳＴＬをネゲートした信号をそれぞれ演算命令及びロードストア命令のレジスタライト情報クリア信号ＥＸ−ＷＩＣＬＲ及びＬＳ−ＷＩＣＬＲとする。一方、ロード命令のレイテンシは３であるから、通常は２サイクル待ってから対応するレジスタライト情報がクリアされる。但し、キャッシュミス等によってロードデータが使用可能となるのに３サイクルを超えるサイクル数を必要とする場合もある。そこで、実際にロードデータが使用可能となるのに合せたロードデータレジスタライト情報クリア信号ＬＤ−ＷＩＣＬＲを入力して、対応するレジスタライト情報をクリアする。
【００５８】
例えば、図６に示されるプログラムのポストインクリメントロード命令「ｍｏｖ  ＠ｒ０＋，ｒ４」のように２つのレジスタを更新する命令もある。この場合、アドレスレジスタｒ０とロードデータレジスタｒ４の双方のライト情報を１命令分のエントリに格納する。そして、双方のレジスタが使用可能となるタイミングはそれぞれ命令発行後１サイクルと３サイクルと異なる。このため、ロード命令に対するロードストア命令のレジスタライト情報クリア信号ＬＳ−ＷＩＣＬＲによるｒ０のレジスタライト情報クリアは、レジスタ番号で選択的に行い、ロードデータレジスタｒ４のレジスタライト情報を残す。一方、ロードデータレジスタライト情報クリア信号ＬＤ−ＷＩＣＬＲによるｒ４のレジスタライト情報クリア時には、他のレジスタライト情報は既にクリアされているので、レジスタ番号で選択的に行う必要はなく、ロード命令用のエントリのレジスタライト情報を全てクリアする。
【００５９】
図１２には、図６に示されるプログラムの上記プロセッサ１０によるパイプライン動作が例示される。
【００６０】
命令キャッシュアクセスＩＣ１及びＩＣ２は省略し、グローバル命令バッファＧＩＢステージから記述している。まず先頭のロード命令「ｍｏｖ  ＠ｒ０＋，ｒ４」の実行では、グローバル命令バッファＧＩＢ、ローカル命令バッファＬＳＩＢ、ローカルレジスタリードＬＳＲＲ、アドレス計算ＬＳＡ、データキャッシュアクセスＤＣ１及びＤＣ２、並びに、レジスタライトバックＷＢの各ステージの処理によって命令が実行される。
【００６１】
２番目のロード命令「ｍｏｖ  ＠ｒ１＋，ｒ５」の実行では、先行するロード命令とリソース競合するため、グローバル命令バッファＧＩＢステージで２サイクル保持された後、先頭ロード命令と同様に処理される。
【００６２】
３番目のデクリメント・テスト命令「ｄｔ  ｒ３」の実行では、グローバル命令バッファＧＩＢ、ローカル命令バッファＥＸＩＢ、ローカルレジスタリードＥＸＲＲ、演算ＥＸ、並びに、レジスタライトバックＷＢの各ステージの処理によって命令が実行される。
【００６３】
４番目の加算命令「ａｄｄ  ｒ４，ｒ５」の実行では、先行するデクリメント・テスト命令とリソース競合するため、グローバル命令バッファＧＩＢステージで２サイクル保持された後、ローカル命令バッファＥＸＩＢステージに入り、先行する２つのロード命令に対してフロー依存があるため、ローカル命令バッファＥＸＩＢステージで３サイクルストールした後、ローカルレジスタリードＥＸＲＲ、演算ＥＸ、並びに、レジスタライトバックＷＢの各ステージの処理によって命令が実行される。
【００６４】
５番目のポストインクリメントストア命令「ｍｏｖ  ｒ５，＠ｒ２＋」では、命令フェッチが４命令ずつであるため先行命令より１サイクル遅れてグローバル命令バッファＧＩＢステージに入り、先行するロード命令とリソース競合するため、グローバル命令バッファＧＩＢステージで２サイクル保持された後、ローカル命令バッファＬＳＩＢ、ローカルレジスタリードＬＳＲＲ、アドレス計算ＬＳＡ、データキャッシュアクセスＤＣ１、並びに、ストアバッファアドレス及びデータ書込みＳＢＡ及びＳＢＤの各ステージの処理によって命令が実行される。
【００６５】
ループ最後の条件分岐命令「ｂｆ  ＿Ｌ００」の実行では、グローバル命令バッファＧＩＢ及び分岐ＢＲの各ステージの処理によって命令が実行される。分岐処理は、前述のアウトオブオーダ方式のプロセッサと同様に、グローバル命令キューＧＩＱに保持した1ループ分の命令を繰返し実行することにより実現する。この結果、ＢＲステージの直後には分岐先命令であるループ先頭命令「ｍｏｖ  ＠ｒ０＋，ｒ４」のグローバル命令キューＧＩＱステージが実行される。
【００６６】
２ループ目も基本的に１ループ目の３サイクル遅れで実行される。但し、３番目のデクリメント・テスト命令「ｄｔ  ｒ３」及び４番目の加算命令「ａｄｄ  ｒ４，ｒ５」の実行では、１ループ目の４番目の加算命令「ａｄｄ  ｒ４，ｒ５」とリソース競合するため、グローバル命令バッファＧＩＢステージで２サイクル余分に保持される。この結果、３番目のデクリメント・テスト命令「ｄｔ  ｒ３」はそれを反映した２サイクル余分に遅れた実行となり、４番目の加算命令「ａｄｄ  ｒ４，ｒ５」はフロー依存によるストールが２サイクル減って余分なサイクルが相殺され、他の命令同様１ループ目の３サイクル遅れで実行される。３ループ目以降は２ループ目と同様に実行される。
【００６７】
次に、各命令発行時のフロー依存チェックの動作について説明する。
【００６８】
図１２には各サイクルにおけるライト情報キューＷＩＱの状態が例示されている。
【００６９】
本動作例ではレジスタをｒ０からｒ５までの６本使用しているため、これら６本分について記載している。また、図９と同様に値が「１」の場合のみ記載し、「０」の場合は空欄としている。図中、細い二重線はライト情報キューポインタＷＩＱＰの指すエントリ、太い線は演算命令ローカルポインタＥＸＬＰの指すエントリの直前のエントリ、細い線と太い線の二重線はロードストア命令ローカルポインタＬＳＬＰの指すエントリの直前のエントリを示す。したがって、細い二重線から太い線までが演算命令のフロー依存チェック対象エントリ、細い二重線から細い線と太い線の二重線までがロードストア命令のフロー依存チェック対象エントリである。尚、細い二重線の方が下にある場合は範囲がエントリ１５でエントリ０にラップアラウンドしている。
【００７０】
演算命令及びロードストア命令用ライト情報ＥＸ−ＷＩ及びＬＳ−ＷＩの状態も図９と同様に値が「１」の場合のみ記載し、「０」の場合は空欄としている。そして、演算命令及びロードストア命令用リード情報ＥＸＩＢ−ＲＩ及びＬＳＩＢ−ＲＩはフロー依存チェックすべきレジスタを表しているのでアサートされているところにはハッチングを付している。したがって、ハッチングが付された欄に「１」があればフロー依存が発生しパイプラインストールが必要となるので、演算命令及びロードストア命令の発行ストールＥＸ−ＳＴＬ及びＬＳ−ＳＴＬをアサートする。
【００７１】
まず、グローバル命令バッファＧＩＢステージで先頭４命令がグローバル命令キューＧＩＱにラッチされ、ライト情報キューＷＩＱに送られる。同時に先頭命令が図８のＬＳ−ＩＮＳＴとしてローカル命令バッファＬＳＩＢステージへ、３番目の命令がＥＸ−ＩＮＳＴとしてローカル命令バッファＥＸＩＢステージへ送られる。この時ライト情報キューＷＩＱは空であり、ライト情報キューポインタＷＩＱＰも演算命令ローカルポインタＥＸＬＰもロードストア命令ローカルポインタＬＳＬＰも先頭エントリＷＩ０を指している。
【００７２】
次のサイクルでは先頭４命令のレジスタライト情報がライト情報キューＷＩＱの先頭４エントリＷＩ０〜ＷＩ３にラッチされ、ライト情報キューポインタＷＩＱＰはエントリＷＩ４を、演算命令ローカルポインタＥＸＬＰはエントリＷＩ２を指し、ロードストア命令ローカルポインタＬＳＬＰは引続き先頭エントリＷＩ０を指している。この結果、図１２のように演算命令用ライト情報ＥＸ−ＷＩはｒ０、ｒ１、ｒ４、ｒ５でアサートされ、ロードストア命令用ライト情報ＬＳ−ＷＩはアサートされない。更に、演算命令及びロードストア命令用リード情報ＥＸＩＢ−ＲＩ及びＬＳＩＢ−ＲＩはそれぞれｒ０とｒ３がアサートされ、レジスタ番号に重なりがないため、演算命令及びロードストア命令の発行ストールＥＸ−ＳＴＬ及びＬＳ−ＳＴＬはアサートされない。
【００７３】
次のサイクルでは、１番目と３番目の命令の実行によって利用可能になるエントリＷＩ０のｒ０及びエントリＷＩ２のｒ３のレジスタライト情報がクリアされる。また、新たに５番目のポストインクリメントストア命令「ｍｏｖ  ｒ５，＠ｒ２＋」のライト情報がエントリＷＩ４にラッチされる。尚、6番目の条件分岐命令「ｂｆ  ＿Ｌ００」にはレジスタライトがない。また、７，８番目の命令はループ外の命令であり、チェック対象とならないまま分岐によってキャンセルされ、何を書いても動作に影響がないため、対応するエントリＷＩ６、７は便宜上空欄としておく。そして、ライト情報キューポインタＷＩＱＰはエントリＷＩ８を、演算命令ローカルポインタＥＸＬＰはエントリＷＩ３を、ロードストア命令ローカルポインタＬＳＬＰはエントリＷＩ１を指す。この結果、図のように演算命令用ライト情報ＥＸ−ＷＩはｒ１、ｒ４、ｒ５で、ロードストア命令用ライト情報ＬＳ−ＷＩはｒ４でアサートされる。更に、演算命令用リード情報ＥＸＩＢ−ＲＩはｒ４及びｒ５が、ロードストア命令用リード情報ＬＳＩＢ−ＲＩはｒ１がアサートされ、演算命令用ライト情報ＥＸ−ＷＩと演算命令用リード情報ＥＸＩＢ−ＲＩとに重なりがあるため、演算命令発行ストールＥＸ−ＳＴＬがアサートされる。そして、この信号によってローカル命令バッファＥＸＩＢステージがストールされる。
【００７４】
次のサイクルでは、２番目の命令の実行によって利用可能になるエントリＷＩ１のｒ１のレジスタライト情報がクリアされる。また、ライト情報キューポインタＷＩＱＰは引続きエントリＷＩ８を、演算命令ローカルポインタＥＸＬＰも引続きエントリＷＩ３を、ロードストア命令ローカルポインタＬＳＬＰはエントリＷＩ４を指す。この結果、図１２のように演算命令用ライト情報ＥＸ−ＷＩもロードストア命令用ライト情報ＬＳ−ＷＩもｒ４及びｒ５でアサートされる。更に、演算命令用リード情報ＥＸＩＢ−ＲＩはｒ４及びｒ５が、ロードストア命令用リード情報ＬＳＩＢ−ＲＩはｒ２がアサートされ、演算命令用ライト情報ＥＸ−ＷＩと演算命令用リード情報ＥＸＩＢ−ＲＩとに重なりがあるため、演算命令発行ストールＥＸ−ＳＴＬがアサートされる。そして、この信号によってローカル命令バッファＥＸＩＢステージがストールされる。
【００７５】
次のサイクルでは、５番目の命令の実行によって利用可能になるエントリＷＩ４のｒ２のレジスタライト情報がクリアされる。また、2ループ目の先頭４命令のレジスタライト情報がライト情報キューＷＩＱの４エントリＷＩ８〜ＷＩ１１にラッチされ、ライト情報キューポインタＷＩＱＰはエントリＷＩ１２を、演算命令ローカルポインタＥＸＬＰは引続きエントリＷＩ３を、ロードストア命令ローカルポインタＬＳＬＰはエントリＷＩ８を指す。この結果、図１２のように演算命令用ライト情報ＥＸ−ＷＩもロードストア命令用ライト情報ＬＳ−ＷＩもｒ５でアサートされる。更に、演算命令用リード情報ＥＸＩＢ−ＲＩはｒ４及びｒ５が、ロードストア命令用リード情報ＬＳＩＢ−ＲＩはｒ０がアサートされ、演算命令用ライト情報ＥＸ−ＷＩと演算命令用リード情報ＥＸＩＢ−ＲＩとに重なりがあるため、演算命令発行ストールＥＸ−ＳＴＬがアサートされる。そして、この信号によってローカル命令バッファＥＸＩＢステージがストールされる。
【００７６】
次のサイクルでは、２ループ目の１番目の命令の実行によって利用可能になるエントリＷＩ８のｒ０のレジスタライト情報がクリアされる。また、新たに５番目のポストインクリメントストア命令「ｍｏｖ  ｒ５，＠ｒ２＋」のライト情報がエントリＷＩ１２にラッチされる。そして、ライト情報キューポインタＷＩＱＰはエントリＷＩ０を、演算命令ローカルポインタＥＸＬＰは引続きエントリＷＩ３を、ロードストア命令ローカルポインタＬＳＬＰはエントリＷＩ９を指す。この結果、図のように演算命令用ライト情報ＥＸ−ＷＩはすべてクリアされ、ロードストア命令用ライト情報ＬＳ−ＷＩはｒ４及びｒ５でアサートされる。更に、演算命令用リード情報ＥＸＩＢ−ＲＩはｒ４及びｒ５が、ロードストア命令用リード情報ＬＳＩＢ−ＲＩはｒ１がアサートされ、レジスタ番号に重なりがないため、演算命令及びロードストア命令の発行ストールＥＸ−ＳＴＬ及びＬＳ−ＳＴＬはアサートされない。
【００７７】
次のサイクルでは、２ループ目の２番目の命令の実行によって利用可能になるエントリＷＩ９のｒ１のレジスタライト情報がクリアされる。また、ライト情報キューポインタＷＩＱＰは引続きエントリＷＩ０を、演算命令ローカルポインタＥＸＬＰはエントリＷＩ１０を、ロードストア命令ローカルポインタＬＳＬＰはエントリＷＩ１２を指す。この結果、図１２のように演算命令用ライト情報ＥＸ−ＷＩもロードストア命令用ライト情報ＬＳ−ＷＩもｒ４及びｒ５でアサートされる。更に、演算命令用リード情報ＥＸＩＢ−ＲＩはｒ３が、ロードストア命令用リード情報ＬＳＩＢ−ＲＩはｒ２がアサートされ、レジスタ番号に重なりがないため、演算命令及びロードストア命令の発行ストールＥＸ−ＳＴＬ及びＬＳ−ＳＴＬはアサートされない。
【００７８】
次からの３サイクルではそれぞれの３サイクル前と同様な動作が行われる。違いはライト情報キューＷＩＱの内容が８エントリ分ずれていることである。図示していないが、その後は、それぞれ６サイクル前と同じ処理が行われる。以上のようにライト情報キューＷＩＱによってフロー依存が管理され、適切に命令発行が行われる。
【００７９】
図１３には、第１のプログラムを本発明の実施形態に係るプロセッサで実行した場合のループ部の動作が例示される。
【００８０】
ここでは、図１２に例示したパイプライン動作のローカル命令バッファステージＬＳＩＢ及びＥＸＩＢ、又は分岐ＢＲステージで各命令の実行サイクルを代表させている。ロード命令ではアドレス計算ＬＳＡ、データキャッシュアクセスＤＣ１及びＤＣ２の３ステージ、分岐命令では分岐ＢＲ及びグローバル命令バッファＧＩＢステージがレイテンシとして見えるため、ロード命令及び分岐命令のレイテンシはそれぞれ３及び２となる。まず、１サイクル目には先頭のロード命令「ｍｏｖ  ＠ｒ０＋，ｒ４」及び３番目のデクリメント・テスト命令「ｄｔ  ｒ３」が実行される。２サイクル目には２番目のロード命令「ｍｏｖ  ＠ｒ１＋，ｒ５」及びループ最後の条件分岐命令「ｂｆ  ＿Ｌ００」が、３サイクル目には５番目のポストインクリメントストア命令「ｍｏｖ  ｒ５，＠ｒ２＋」が実行される。そして、４サイクル目には２ループ目の処理が開始され、先頭のロード命令「ｍｏｖ  ＠ｒ０＋，ｒ４」が実行される。１ループ目では実行された３番目のデクリメント・テスト命令「ｄｔ  ｒ３」は先行する１ループ目の４番目の加算命令「ａｄｄ  ｒ４，ｒ５」を追い越さないため実行されない。更に５サイクル目には２サイクル目と同じ動作に加えて１ループ目の４番目の加算命令「ａｄｄ  ｒ４，ｒ５」が実行され、６サイクル目は３サイクル目と同じ動作に加えて３番目のデクリメント・テスト命令「ｄｔ  ｒ３」が実行される。その後は、１ループ当り３サイクルの動作が繰り返される。
【００８１】
図１４には、ロードレイテンシを図１４の３から９に伸ばした場合のループ部の動作が例示される。
【００８２】
ロードレイテンシ増に伴い、４番目の加算命令「ａｄｄ  ｒ４，ｒ５」の実行が図４に比べて６サイクル遅れる。これに伴い２ループ目の３番目のデクリメント・テスト命令「ｄｔ  ｒ３」の実行も６サイクル遅れる。本発明の方式では実行リソースが異なればアウトオブオーダで処理行可能であるため、演算パイプの実行の遅れは他に波及せず１ループ当り３サイクルの動作が維持され、ロードレイテンシ増による性能低下は比較的少ない。しかし、このような動作は高度な分岐予測を必要とする。特に、予測のヒット／ミスが確定しないうちに条件分岐命令を実行していくので分岐予測のネストが発生し制御が複雑になる。
【００８３】
図１５には、図１４では演算パイプで実行していた３番目のデクリメント・テスト命令「ｄｔ  ｒ３」を分岐パイプで実行した場合が示される。
【００８４】
図１５に示されるように実行すると、４番目の加算命令「ａｄｄ  ｒ４，ｒ５」の実行の遅れが波及せず、分岐条件確定は早まり分岐予測のネストが不要となる。但し、図８に示される回路では分岐パイプでのレジスタリードライトを扱えないため、回路の追加が必要である。しかし、分岐命令にはレジスタ間接分岐もあるためレジスタリードライトも扱えることが望ましい。尚、レジスタ間接分岐は分岐元からのディスプレースメント指定分岐では届かない長距離分岐用であるため、出現頻度が低いプログラムも多いと考えられ、分岐パイプでレジスタリードライトを扱えるようにすることによるコスト増が性能向上に見合うとは限らない。
【００８５】
本実施形態では、同一実行リソース内ではインオーダ実行するため逆依存及び出力依存の問題は起きない。しかし、異なるリソース間では適切に処理しないと問題が起きる。
【００８６】
図１６には、本実施形態において逆依存及び出力依存が起こるパイプライン動作が例示される。
【００８７】
先頭のロード命令「ｍｏｖ  ＠ｒ１，ｒ１」はレジスタｒ１の指すメモリ位置からレジスタｒ１にデータをロードする。２番目のロード命令「ｍｏｖ  ＠ｒ１，ｒ２」レジスタｒ１の指すメモリ位置からレジスタｒ２にデータをロードする。３番目のストア命令「ｍｏｖ  ｒ２，＠ｒ０」はレジスタｒ２の値をレジスタｒ０の指すメモリ位置にストアする。４番目の即値転送命令「ｍｏｖ  ＃２，ｒ２」はレジスタｒ２に２を書込む。５番目の即値転送命令「ｍｏｖ  ＃１，ｒ０」はレジスタｒ０に１を書込む。６番目の加算命令「ａｄｄ  ｒ０，ｒ２」はレジスタｒ０の値をレジスタｒ２に加算する。そして、最後のストア命令は３番目の命令と同じである。
【００８８】
ロードストア命令はメモリパイプ、即値転送及び加算命令は演算パイプで実行されるとすると、最初の３命令と最後の命令はメモリパイプ、４番目からの３命令は演算パイプで実行される。このとき、２番目のロード命令と４，６番目の命令は出力依存の関係にあり、３番目のストア命令と４，５番目の即値転送命令は逆依存の関係にある。そして、メモリパイプ及び演算パイプでは命令はインオーダ実行されるため、それぞれの実行結果でそれぞれのローカルレジスタファイルＥＸＲＦ及びＬＳＲＦを更新するだけなら、出力依存及び逆依存は顕在化しない。しかし、一方のパイプの実行結果を他方のパイプで参照するには、実行結果をパイプ間で転送する必要があり、出力依存及び逆依存が顕在化する可能性がある。図１６に示される例では演算パイプで実行される５，６番目の命令の実行結果を使用してメモリパイプで最後の命令が実行される。このため、５，６番目の命令の実行結果を演算パイプからメモリパイプへ転送する必要がある。最後の命令はＬＳＩＢステージでリードレジスタ情報ＬＳＩＢ−ＲＩを生成するので、このステージでｒ０及びｒ２の転送が必要なことが判明する。そして、判明した時点では最後の命令に先行するメモリパイプ命令のＬＳＲＲステージは完了しいて逆依存は解消しており、実行結果を演算パイプからメモリパイプへ転送しても支障はない。具体的には、５，６番目の命令はそれぞれ４，５サイクル目のライトバックステージＷＢでローカルレジスタファイルＥＸＲＦにライトバックした後、６サイクル目の最後の命令のＬＳＩＢステージの先頭でライトバックした値の転送の必要性が判明するで、それぞれ６，７サイクル目のコピーステージＣＰＹでｒ０及びｒ２を転送する。
【００８９】
尚、３番目のストア命令が使用するｒ２の値はＬＳＲＲステージでは存在しないため読み出せないが、その後はローカルレジスタファイルＬＳＲＦからは読み出さず、ストアバッファデータステージＳＢＤまでに、値が生成された時点でフォワーディングによって取り込む。このため、３番目のストア命令がＬＳＲＲステージでｒ２を読み出せない場合でも、演算パイプからメモリパイプへ転送された値をメモリパイプのローカルレジスタファイルＬＳＲＦのｒ２に書き込んで良い。この結果、メモリパイプのローカルレジスタファイルＬＳＲＦでは、２番目の命令によるｒ２への書込みの前に、６番目の命令によるｒ２への書込みが行われ、出力依存が顕在化する。そこで、２番目のロード命令ではｒ２へのレジスタライトを行わず、３番目のストア命令へのデータフォワーディングのみ行う。
【００９０】
前述のコピーにはローカルレジスタファイルＥＸＲＦ及びＬＳＲＦに専用のリードライトポートを追加するか、既存のポートを通常のリードライトとシェアすれば良い。ポートをシェアしてアクセスが競合した場合に一方を待たせて逐次アクセスするように制御することはプロセッサ等のデータ処理装置を設計する通常の技術者であれば可能である。また、実行結果をしばらく使用しないことは稀であるため、ローカルレジスタファイルへのライトバック後もバッファに値を残しておけばポートを増やさなくてもコピーが可能となる場合が多い。図１６に示される例ではライトバックステージＷＢの次にバッファコピーステージＢＵＦ／ＣＰＹを１段設け、転送のためのレジスタリードポートを不要にしている。
【００９１】
通常のパイプライン制御ではライトバックステージＷＢに向けてライトバック情報ＥＸＲＲ−ＷＩ、ＥＸ−ＷＩ、及びＷＢ−ＷＩを流していく。そして、後続命令が値を使用する場合に同一番号のレジスタへのライトバック情報が複数ある場合は最新の値を使用すれば良い。これに対して、本発明のパイプライン制御ではバッファコピーステージＢＵＦ／ＣＰＹのライトバック情報ＢＵＦ／ＣＰＹ−ＷＩを追加する。更に、パイプが異なれば逐次実行しているとは限らないため、命令に番号をつけてプログラム順序を比較し、読出す命令よりプログラム順序で先行する命令の中で最も新しい命令が生成した値を識別して選択する。図１６ではライト情報キューＷＩＱで付与した番号をそのまま使用している。ｒ２の値は命令番号３と５の２つの命令が更新し、命令番号６のストア命令が参照する。したがって、命令番号５の加算命令の結果を転送して使用する。
【００９２】
もし、プログラム順序が逆でストア命令が５番、加算命令が６番であれば、転送する値は命令番号３番の即値転送命令の結果となる。この場合、バッファステージをもう１段用意すれば、バッファに値が残り、バッファからの転送が可能となる。
【００９３】
尚、ライト情報キューＷＩＱは１６エントリ有って識別に４ビット必要であるが、バッファから値を転送する命令と値を参照する命令の距離を制限すれば、ビット数を削減することも可能である。更に、同一パイプで実行する命令がプログラム上で、連続している場合はそれらの命令に対して同一の識別番号が使えるので、同じビット数でも命令の距離の制限を緩和できる。例えば、図１６に示される例では、１、２、３番目と４、５、６番目と７番目の３グループに纏められるので、これら７命令の識別情報は２ビットで十分である。
【００９４】
バッファコピーステージＢＵＦ／ＣＰＹを過ぎるとライトバック情報がなくなるため、一方のローカルレジスタファイルにのみ最新の値があるという情報が失われてしまう。そこで、レジスタ状態を各レジスタに対して定義する。図１６では各レジスタに対して２ビットの情報ＲＥＧＩ［ｎ］（ｎ：０−１５）を保持し、全て最新、メモリパイプのローカルレジスタファイルＬＳＲＦが最新、及び演算パイプのローカルレジスタファイルＥＸＲＦが最新の３状態を記録する。図１６ではｒ０、ｒ１、及びｒ２の情報を示している。空欄、ＬＳ、及びＥＸはそれぞれ全て最新、メモリパイプのローカルレジスタファイルＬＳＲＦが最新、及び演算パイプのローカルレジスタファイルＥＸＲＦが最新の３状態を表す。
【００９５】
逆依存及び出力依存関係を扱う別の方法は、先行命令のレジスタ読出し及びレジスタ書込みを後続命令のレジスタ書込みが追い越さないように制御することである。図１７は、図８のライト情報キューＷＩＱを拡張してリード情報も保持するリードライト情報キューＲＷＩＱとし、フロー依存だけでなく逆依存と出力依存も検出可能にした例である。
【００９６】
リードライト情報キューＲＷＩＱは、リードライト情報デコーダＲＷＩＤ０〜３、１６命令分のリードライト情報エントリＲＷＩ０〜１５、新たなリードライト情報セット位置を指定するリードライト情報キューポインタＲＷＩＱＰ、ローカル命令バッファステージＥＸＩＢ及びＬＳＩＢにある演算命令及びロードストア命令の位置を指定するロードストア命令ローカルポインタＬＳＬＰ及び演算命令ローカルポインタＥＸＬＰ、次に利用可能になるロードデータをロードする命令を指すロードデータライトポインタＬＤＷＰ、並びに、これらのポインタをデコードするリードライト情報キューポインタデコーダＲＷＩＰ−ＤＥＣから成る。
【００９７】
リードライト情報キューＲＷＩＱでは、まず、リードライト情報デコーダＲＷＩＤ０〜３がグローバル命令キューＧＩＱにラッチされた４命令を受取り、それらの命令のレジスタライト情報を生成する。そして、受取った命令の有効信号ＩＶがアサートされていたら、リードライト情報キューポインタＲＷＩＱＰのデコードによって生成されるリードライト情報キュー選択信号ＲＷＩＱＳに従って、生成されたレジスタリードライト情報をＲＷＩ０〜３、ＲＷＩ４〜７、ＲＷＩ８〜１１、又はＲＷＩ１２〜１５にラッチする。リードライト情報キューポインタＲＷＩＱＰはリードライト情報キューＲＷＩＱにラッチされた命令の中では最も古い命令を指しており、この最も古い命令から４命令のレジスタリードライト情報が不要になって消去されるとリードライト情報キューＲＷＩＱに空きができ、新たな４命令のリードライト情報のラッチが可能となる。そして、新たにリードライト情報をラッチしたら、次の４エントリを指すようにリードライト情報キューポインタＲＷＩＱＰを進める。
【００９８】
一方、演算命令ローカルポインタＥＸＬＰ及びロードストア命令ローカルポインタＬＳＬＰはこれから実行する命令を指定しており、前記の最も古い命令から、これらのポインタが指定する命令の直前の命令までが、これから実行する命令に先行する命令であり、フロー依存、逆依存、及び出力依存のチェック対象命令となる。そこで、リードライト情報キューポインタデコーダＲＷＩＰ−ＤＥＣは、リードライト情報キューポインタＲＷＩＱＰと演算命令及びロードストア命令のローカルポインタＥＸＬＰ及びＬＳＬＰとからフロー依存、逆依存、及び出力依存のチェック対象範囲のエントリを全て選択するための演算命令及びロードストア命令用マスク信号ＥＸＭＳＫ及びＬＳＭＳＫを生成する。
【００９９】
そして、演算命令用マスク信号ＥＸＭＳＫによって、リードライト情報キューＲＷＩＱの１６エントリから演算命令ローカルポインタＥＸＬＰの指す演算命令に先行する命令のリードライト情報を取り出して論理和を取り、演算命令用リードライト情報ＥＸ−ＷＩ及びＥＸ−ＲＩとして出力する。同様に、ロードストア命令用マスク信号ＬＳＭＳＫによって、リードライト情報キューＲＷＩＱの１６エントリからロードストア命令ローカルポインタＬＳＬＰの指すロードストア命令に先行する命令のリードライト情報を取り出して論理和を取り、ロードストア命令用リードライト情報ＬＳ−ＷＩ及びＬＳ−ＲＩとして出力する。
【０１００】
同時にグローバル命令バッファＧＩＢステージで、グローバル命令キューＧＩＱから出力された演算命令ＥＸ−ＩＮＳＴ及びロードストア命令ＬＳ−ＩＮＳＴをラッチ８１，８２でラッチして、ローカル命令バッファＬＳＩＢ及びＥＸＩＢステージに同期させ、演算命令及びロードストア命令のレジスタリードライト情報デコーダＥＸ−ＲＷＩＤ及びＬＳ−ＲＷＩＤに入力してデコードし、演算命令及びロードストア命令のレジスタリードライト情報ＥＸＩＢ−ＲＩ、ＥＸＩＢ−ＷＩ，ＬＳＩＢ−ＲＩ，及びＬＳＩＢ−ＷＩを生成する。そして、ライト情報ＥＸ−ＷＩ及びＬＳ−ＷＩとリード情報ＥＸＩＢ−ＲＩ及びＬＳＩＢ−ＲＩとのレジスタ番号毎の論理積の、全てのレジスタ番号についての論理和を取り、それぞれ演算命令及びロードストア命令のフロー依存を検出する。同様に、リード情報ＥＸ−ＲＩ及びＬＳ−ＲＩとライト情報ＥＸＩＢ−ＷＩ及びＬＳＩＢ−ＷＩとのレジスタ番号毎の論理積の、全てのレジスタ番号についての論理和を取り、それぞれ演算命令及びロードストア命令の逆依存を検出する。更に、ライト情報ＥＸ−ＷＩ及びＬＳ−ＷＩとライト情報ＥＸＩＢ−ＷＩ及びＬＳＩＢ−ＷＩとのレジスタ番号毎の論理積の、全てのレジスタ番号についての論理和を取り、それぞれ演算命令及びロードストア命令の出力依存を検出する。そして、これら３種類の依存情報の論理和をとり、発行ストールＥＸ−ＳＴＬ及びＬＳ−ＳＴＬとする。
【０１０１】
図８に示されるライト情報キューＷＩＱと同様に、これらの発行ストールがネゲートされると命令が発行される。本実施形態では演算命令の演算及びロードストア命令のアドレス計算は１サイクルで完了するものとしているため、演算命令及びロードストア命令が発行されると、その結果が次のサイクルで発行される命令から使用可能となる。また、逆依存チェックは発行されると不要となるためレジスタリード情報も不要となる。したがって、命令が発行されたらリードライト情報キューＲＷＩＱ内の対応するレジスタリードライト情報をクリアする。そこで、演算命令及びロードストア命令の発行ストールＥＸ−ＳＴＬ及びＬＳ−ＳＴＬをネゲートした信号をそれぞれ演算命令及びロードストア命令のレジスタリードライト情報クリア信号ＥＸ−ＲＷＩＣＬＲ及びＬＳ−ＲＷＩＣＬＲとする。一方、ロード命令のレイテンシは３であるから、通常は２サイクル待ってから対応するレジスタライト情報をクリアする。但し、キャッシュミス等によってロードデータが使用可能となるのに３サイクルを超えるサイクル数を必要とする場合もある。そこで、実際にロードデータが使用可能となるのに合せたロードデータレジスタライト情報クリア信号ＬＤ−ＷＩＣＬＲを入力して、対応するレジスタライト情報をクリアする。
【０１０２】
図１８には、リードライト情報キューＲＷＩＱ（図１７参照）を持つプロセッサ１０による図１６に示したプログラムと同一プログラムのパイプライン動作が例示される。
【０１０３】
レジスタリードライト情報は各エントリにリードライトそれぞれレジスタ１６本分の１６ビットで計３２ビットであるが、例示したプログラムではｒ０、ｒ１、及びｒ３の３本のみ使用するため、３本のリードライト情報６ビットについて、各サイクルの値を示している。エントリも１６本のうち０から８と１５の１０本分を示している。図１２に示される場合と同様にリードライト情報キューＲＷＩＱの値は「１」のみ記載し空欄は「０」を表している。また、リードライト情報キューＲＷＩＱからの出力ＬＳ−ＷＩ、ＬＳ−ＲＩ、ＥＸ−ＷＩ、及びＥＸ−ＲＩの値も「１」のみ記載し空欄は「０」を表している。そして、演算命令及びロードストア命令のレジスタリードライト情報ＥＸＩＢ−ＲＩ、ＥＸＩＢ−ＷＩ，ＬＳＩＢ−ＲＩ，及びＬＳＩＢ−ＷＩの値は、「１」の場合にハッチングを付し、「０」の場合は空欄としている。したがって、フロー依存及び逆依存があると「１」とハッチング位置が重なる。
【０１０４】
２、３サイクル目ではｒ１のＬＳ−ＷＩとＬＳＩＢ−ＲＩの重なりが発生しており、１番目の命令と２番目の命令とがフロー依存であることを示している。この結果、２番目の命令の発行が２サイクルストールしている。また、２サイクル目から５サイクル目までｒ２のＥＸ−ＲＩとＥＸＩＢ−ＷＩの重なりが発生しており、３番目の命令と４番目の命令とが逆依存であることを示している。この結果、４番目の命令の発行が５サイクルストールしている。出力依存については欄が一致していないため重ならないが、ｒ２のＥＸ−ＷＩとＥＸＩＢ−ＷＩが２サイクル目から５サイクル目まで同時に１となり、２番目の命令と４番目の命令とが出力依存であることを示している。即ち、４番目の命令は上記逆依存だけでなく出力依存によってもストールしている。更に、６、７サイクル目ではｒ０のＬＳ−ＷＩとＬＳＩＢ−ＲＩの重なりが発生しており、５番目の命令と７番目の命令とがフロー依存であることを示している。この結果、７番目の命令の発行が２サイクルストールしている。
【０１０５】
このように、依存関係チェック機構の回路規模は増加し、実行サイクルも前述の方式より増加するものの、統一的な依存関係チェックが可能であり、最新のレジスタ値がどこにあるかを管理する必要がなくなる。
【０１０６】
これに対して前述の方式は、回路規模が小さく性能が高いという利点がある。また、ローカルレジスタライトを基本とし、他のパイプへのレジスタライトを必要最小限に抑えることが可能であるため低電力化にも向いている。
【０１０７】
以上本発明者によってなされた発明を具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【０１０８】
例えば、上記の例では、先行命令のレジスタ書込みを後続命令のレジスタ書込みが追い越さないように制御したが、先行命令のレジスタ書込みが同一レジスタへの後続命令のレジスタ書込みに追い越された場合には、先行命令のレジスタ書込みを抑止するように制御しても良い。そのような制御によれば、レジスタの保持情報の破壊が阻止されるため、出力依存関係にある命令の実行結果の整合性を保つことができる。
【０１０９】
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるプロセッサについて説明したが、本発明はそれに限定されるものではなく、データ処理を行うデータ処理装置に適用することができる。
【０１１０】
本発明は、少なくとも複数の実行リソースを含むことを条件に適用することができる。
【図面の簡単な説明】
【０１１１】
【図１】本発明にかかるデータ処理装置の一例とされるプロセッサの構成例ブロック図である。
【図２】アウトオブオーダ方式のプロセッサのパイプライン構造の説明図である。
【図３】アウトオブオーダ方式のプロセッサでプログラムを実行した場合のループ部の動作説明図である。
【図４】アウトオブオーダ方式のプロセッサでプログラムを実行した場合のループ部の動作説明図である。
【図５】図４においてロードレイテンシを３から９に伸ばした場合のループ部の動作説明図である。
【図６】上記プログラムの構成例説明図である。
【図７】図１に示されるプロセッサにおけるパイプラインの構成例説明図である。
【図８】図１に示されるプロセッサのグローバル命令キューＧＩＱ及びライト情報キューＷＩＱの構成例ブロック図である。
【図９】演算命令用マスク信号ＥＸＭＳＫの生成論理の説明図である。
【図１０】演算命令用マスク信号ＥＸＭＳＫを生成論理の回路図である。
【図１１】ライト情報キューＷＩＱにおける演算命令ローカル選択信号ＥＸＬＳの生成論理の回路図である。
【図１２】上記プログラムを上記プロセッサで実行した場合のループ部のパイプライン動作の説明図である。
【図１３】上記プログラムを上記プロセッサで実行した場合のループ部のパイプライン動作の説明図である。
【図１４】図１３においてロードレイテンシを３から９に伸ばした場合のループ部の動作説明図である。
【図１５】図１４において演算パイプで実行していた３番目のデクリメント・テスト命令を分岐パイプで実行した場合のループ部の動作説明図である。
【図１６】逆依存及び出力依存が起こるパイプライン動作の説明図である。
【図１７】図１に示されるプロセッサのグローバル命令キューＧＩＱ及びリードライト情報キューＲＷＩＱの別の構成例ブロック図である。
【図１８】図１７の回路構成を用いた場合の逆依存及び出力依存が起こるパイプライン動作の説明図である。
【符号の説明】
【０１１２】
１０  プロセッサ
ＩＣ  命令キャッシュ
ＤＣ  データキャッシュ
ＥＸＵ  命令実行ユニット
ＥＸＩＱ  実行命令キュー
ＥＸＲＦ  演算命令用のローカルレジスタファイル
ＡＬＵ  演算器
ＢＩＵ  バスインタフェースユニット
ＩＦＵ  命令フェッチユニット
ＢＲＣ  分岐制御部
ＧＩＱ  グローバル命令キュー
ＷＩＱ  ライト情報キュー
ＬＳＵ  ロードストアユニット
ＬＳＩＱ  ロードストア命令キュー
ＬＳＲＦ  ローカルレジスタファイル
ＬＳＡＧ  アドレス加算器
ＳＢ  ストアバッファ
【図１】
0005209933.tif 000002
【図２】
0005209933.tif 000003
【図３】
0005209933.tif 000004
【図４】
0005209933.tif 000005
【図５】
0005209933.tif 000006
【図６】
0005209933.tif 000007
【図７】
0005209933.tif 000008
【図８】
0005209933.tif 000009
【図９】
0005209933.tif 000010
【図１０】
0005209933.tif 000011
【図１１】
0005209933.tif 000012
【図１２】
0005209933.tif 000013
【図１３】
0005209933.tif 000014
【図１４】
0005209933.tif 000015
【図１５】
0005209933.tif 000016
【図１６】
0005209933.tif 000017
【図１７】
0005209933.tif 000018
【図１８】
0005209933.tif 000019