(57)【要約】【課題】本発明は、投機的なスケジューリングにおいて投機ミスした場合により適切に回復処理することができるマイクロプロセッサ、このマイクロプロセッサに好適に用いられるビット・ベクタおよびビット・ベクタの生成方法を提供する。【解決手段】本発明の、命令の実行をパイプライン処理するマイクロプロセッサＰは、複数の命令の発行順をスケジューリングする命令ウィンドウ部４と、複数の命令のそれぞれについて、当該命令に先行する全ての命令についての依存関係を表す再発行行列表を記憶する再発行行列表部１２と、複数の命令の実行中に投機ミスが発生した場合に、命令発行後の各ステージの命令に対し再発行命令表に基づいて投機ミスの命令に依存するか否かを判断するビット・ベクタ比較部１３、１４、１５とを備える。【選択図】図１
2009181163.tif 000002
【特許請求の範囲】
【請求項１】
命令の実行をパイプライン処理するマイクロプロセッサであって、
複数の命令の発行順をスケジューリングするスケジューリング部と、
前記複数の命令のそれぞれについて、当該命令に先行する全ての命令についての依存関係を表す依存関係情報を記憶する依存関係情報記憶部と、
前記スケジューリング部によってスケジューリングされたスケジュールに従った前記複数の命令の実行中に投機ミスが発生した場合に、命令発行後の各ステージの命令に対し前記依存関係情報に基づいて前記投機ミスの命令に依存するか否かを判断する判断部とを備えること
を特徴とするマイクロプロセッサ。
【請求項２】
前記スケジューリング部は、蓄積された１または複数の命令の中から実行可能な命令を選び出し、この選び出した命令をエントリ番号を付してスケジューリングし、このスケジューリングしたスケジュールに従って命令を発行する命令ウィンドウ部であり、
前記依存関係情報は、各ビットが当該ビットのビット番号に対応する前記命令ウィンドウ部の前記エントリ番号における命令に依存関係にあるか否かを表すビット列から成るビット・ベクタであること
を特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
前記依存関係情報記憶部は、当該ビット・ベクタの命令に対応するエントリ番号の行に行方向に書き込まれることによって前記複数の命令の複数のビット・ベクタを配列した２次元マトリクスから成る再発行行列表を記憶し、前記投機ミスが発生した場合に、前記投機ミスを起こした命令に応じたエントリ番号の列を列方向に前記判断部へ出力すること
を特徴とする請求項２に記載のマイクロプロセッサ。
【請求項４】
命令の実行をパイプライン処理するマイクロプロセッサに使用され、当該命令に先行する全ての命令についての依存関係を表すものであって、各ビットが当該ビットのビット番号に対応する命令ウィンドウのエントリ番号における命令に依存関係にあるか否かを表すビット列から成るビット・ベクタのエンコーディング方法。
【請求項５】
命令の実行をパイプライン処理するマイクロプロセッサに使用され、当該命令に先行する全ての命令についての依存関係を表すものであって、各ビットが当該ビットのビット番号に対応する命令ウィンドウのエントリ番号における命令に依存関係にあるか否かを表すビット列から成るビット・ベクタの生成方法であって、ビット・ベクタを、当該ビット・ベクタの命令に依存関係のある命令のビット・ベクタの論理和を取ることによって生成するビット・ベクタの生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令の実行をパイプライン処理するマイクロプロセッサに関し、特に、投機ミスした場合により適切に回復処理することができるマイクロプロセッサに関する。そして、このマイクロプロセッサに好適に用いられるビット・ベクタのエンコーディング方法およびビット・ベクタの生成方法に関する。
【背景技術】
【０００２】
マイクロプロセッサ（ＭＰＵ）の命令実行を高速化する手法の一つにパイプライン処理がある。マイクロプロセッサは、一般的に、第１に、命令（機械語命令）をフェッチし（命令をメモリから取り出し）、第２に、命令をデコードし（命令の意味するところを解釈し）、第３に、演算に必要なデータを読み込み、第４に、演算（計算）し、そして、第５に、演算結果（データ）を書き込むことによって、命令を実行している。このパイプライン処理では、命令を実行する工程が複数の段階（ステージ）に分割され、前記各ステージの処理が並列に行われる。これによって、複数の命令が時間をずらしながら並行的に実行可能となり、マイクロプロセッサの処理効率が向上する。例えば、上記例では、フェッチを行う装置、デコードを行う装置、データの読み込みを行う装置、演算を行う装置および演算結果の書き込みを行う装置をそれぞれ独立に構成し、そして、これら各装置間にフリップフロップ等のデータを一時的に記憶する装置を介在させるようにマイクロプロセッサを構成すると共に、命令を５ステージに分割することによって、各ステージの処理を並列に行うパイプライン処理が実行可能となる。
【０００３】
そして、パイプライン処理を行うマイクロプロセッサの構成によっては、命令発行ステージ（「Ｉｓｓｕｅ」）の後に、命令の情報を格納したペイロードＲＡＭからこの命令の情報を読み出すペイロードＲＡＭ読み出しステージ（「Ｐａｙｌａｏｄ」）や、レジスタからデータを読み出すレジスタ読み出しステージ（「Ｒｅｇ．」）が存在するマイクロプロセッサがある。このようなマイクロプロセッサでは、命令の発行後に、数サイクルを経てこの命令の実行ステージ（「Ｅｘｅｃ」）に入ることがある。ここで、命令の発行からこの命令の実行までのレイテンシ（実行サイクル数）を「命令発行レイテンシ」と呼ぶこととする。例えば、「Ｉｓｓｕｅ」→「Ｐａｙｌａｏｄ」→「Ｒｅｇ．」→「Ｅｘｅｃ」である場合に、「Ｉｓｓｕｅ」→「Ｐａｙｌａｏｄ」→「Ｒｅｇ．」の３サイクルが命令発行レイテンシとなる。このような命令発行レイテンシは、例えば、インテル社製の商品名Pentium 4（登録商標）の場合では、７サイクルである。
【０００４】
このような命令発行レイテンシを持つマイクロプロセッサにおいて、パイプライン処理では、先行する命令が実行ステージに入る前に後続の命令を発行する必要がある。命令の実行レイテンシ（命令の実行ステージの処理に要するサイクル数）が一定の命令では、その先行する命令が発行された後、その実行レイテンシ分だけ経過したタイミングで後続する命令を発行すれば、後続の命令は、先行する命令の実行が終了するタイミングで実行ステージに入ることができる。しかしながら、実行レイテンシが一定しない命令、例えばロード命令のように、キャッシュにヒットするかミスするかによって実行レイテンシが変わる命令が先行する場合では、後続する命令のスケジューリングが難しい。
【０００５】
このロード命令に依存する命令のスケジューリングの方法では、例えば、図１０（Ａ）に示すように、先行の命令ｉ１を実行することによってキャッシュのヒット／ミスの判明後に後続の命令ｉ２を発行するスケジューリング方法がある。このスケジューリング方法は、後続の命令ｉ２を確実に実行することができるが、図１０（Ａ）から分かるように、依存関係にある複数の命令ｉ１，ｉ２を連続して実行することができないため、マイクロプロセッサの処理効率が低下してしまう。そこで、図１０（Ｂ）に示すように、先行する命令ｉ１の演算結果を仮定（予測）して、例えばロード命令の場合ではキャッシュメモリにヒットすると仮定（予測）して、後続の命令ｉ２〜ｉ４を発行する投機的なスケジューリング方法がある。この投機的なスケジューリング方法は、依存関係にある複数の命令ｉ１〜ｉ４を連続して実行可能であるが、仮定（予測）に失敗した場合（投機ミス）に、例えば、上記例ではキャッシュのミスであった場合に、後続の命令ｉ２〜ｉ４は、その実行を行うことができない。このため、投機的スケジューリングの投機ミスから命令の実行を回復する回復処理が必要となる。
【０００６】
このような回復処理の一つに、例えば、ロード命令に依存する命令の投機ミスの際に、ロード命令に依存した命令が発行された可能性のあるサイクル中に発行された全ての命令を再スケジューリングする方法がある（例えば非特許文献１）。
【０００７】
また、例えば、命令間の依存を順番に辿って逐次に無効化する方法がある（例えば非特許文献２）。
【非特許文献１】Ｋｅｓｓｌｅｒ，Ｒ．：“Ｔｈｅ  Ａｌｐｈａ  ２１２６４  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ”，ＩＥＥＥ  Ｍｉｃｒｏ，Ｖｏｌ．１９，Ｎｏ．２ｐｐ．２２−３６（１９９９）
【非特許文献２】佐藤寿倫：“命令再発行機構によるデータアドレス予測に基づく投機実行の効果改善”、情報処理学会論文誌、Ｖｏｌ．４０，Ｎｏ．５，ｐｐ．２０９３−２１０８（１９９９）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
投機的スケジューリングでは、図１０（Ｂ）に示すように、後続の命令ｉ２が依存関係にある先行の命令ｉ１の演算結果を直接的に使用する場合だけでなく、さらに後続の命令ｉ３や命令ｉ４のように先行の命令ｉ１の演算結果を、命令ｉ２を介してまたは命令ｉ２および命令ｉ３を介して間接的に使用する場合もある。すなわち、後続の命令ｉ２に依存する、さらに後続の命令ｉ３、ｉ４が発行される場合もある。このような複雑な依存関係がある場合の命令は、無効化が難しい。従来では、上記非特許文献１に開示の回復処理のように、依存関係にない命令も含めて一斉に無効化するか、上記非特許文献２に開示されているように、命令間の依存を順番に辿って逐次に無効化するか、のいずれかの選択を迫られていた。
【０００９】
本発明は、上述の事情に鑑みて為された発明であり、その目的は、投機的なスケジューリングにおいて投機ミスした場合に、依存関係にある命令のみを一斉に無効化する回復処理を行うことができるマイクロプロセッサを提供することである。また、本発明の他の目的は、このマイクロプロセッサに好適に用いられるビット・ベクタのエンコーディング方法およびビット・ベクタの生成方法を提供することである。
【課題を解決するための手段】
【００１０】
本発明者は、種々検討した結果、上記目的は、以下の本発明により達成されることを見出した。すなわち、本発明の一態様にかかる、命令の実行をパイプライン処理するマイクロプロセッサは、複数の命令の発行順をスケジューリングするスケジューリング部と、前記複数の命令のそれぞれについて、当該命令に先行する全ての命令についての依存関係を表す依存関係情報を記憶する依存関係情報記憶部と、前記スケジューリング部によってスケジューリングされたスケジュールに従った前記複数の命令の実行中に投機ミスが発生した場合に、命令発行後の各ステージの命令に対し前記依存関係情報に基づいて前記投機ミスの命令に依存するか否かを判断する判断部とを備えることを特徴とする。
【００１１】
このような構成のマイクロプロセッサでは、複数の命令のそれぞれについて、当該命令に先行する全ての命令についての依存関係を表す依存関係情報が依存関係情報記憶部に記憶され、スケジューリングされたスケジュールに従った複数の命令の実行中に投機ミスが発生した場合に、命令発行後の各ステージの命令に対し依存関係情報に基づいて投機ミスの命令に依存するか否かが判断部で判断される。
【００１２】
このため、上記構成のマイクロプロセッサは、投機ミスの命令に直接的に依存する命令だけでなく、投機ミスの命令に間接的に依存する命令も適切に選択することができる。したがって、上記構成のマイクロプロセッサは、投機ミスの命令に依存する命令のみを選択的に無効化することが可能となり、そして、このような命令のみを選択的に再発行することが可能となる。このため上記構成のマイクロプロセッサは、投機的なスケジューリングにおいて投機ミスした場合に、依存関係にある命令のみを一斉に無効化する回復処理を行うことができる。
【００１３】
また、上述のマイクロプロセッサにおいて、前記スケジューリング部は、蓄積された１または複数の命令の中から実行可能な命令を選び出し、この選び出した命令をエントリ番号を付してスケジューリングし、このスケジューリングしたスケジュールに従って命令を発行する命令ウィンドウ部であり、前記依存関係情報は、各ビットが当該ビットのビット番号に対応する前記命令ウィンドウ部の前記エントリ番号における命令に依存関係にあるか否かを表すビット列から成るビット・ベクタであることを特徴とする。
【００１４】
依存関係情報を求める際に複雑な演算が必要となる場合では、却ってマイクロプロセッサの処理効率を落とす可能性がある。しかしながら、上記構成のマイクロプロセッサでは、依存関係情報として上記構成のビット・ベクタを用い、比較的単純な演算によって命令間の依存関係情報を求めることができる。
【００１５】
また、上述のマイクロプロセッサにおいて、前記依存関係情報記憶部は、当該ビット・ベクタの命令に対応するエントリ番号の行に行方向に書き込まれることによって前記複数の命令の複数のビット・ベクタを配列した２次元マトリクスから成る再発行行列表を記憶し、前記投機ミスが発生した場合に、前記投機ミスを起こした命令に応じたエントリ番号の列を列方向に前記判断部へ出力することを特徴とする。
【００１６】
上記構成のマイクロプロセッサでは、依存関係情報記憶部が２次元マトリクスから成る再発行行列表を記憶するので、いわゆるＲＡＭ（Random Access Memory）と類似の構造で依存関係情報記憶部を構成することが可能となる。このため、一般的な半導体製造技術を用いて比較的容易に依存関係情報記憶部を製造することが可能となる。
【００１７】
そして、本発明の他の一態様は、命令の実行をパイプライン処理するマイクロプロセッサに使用され、当該命令に先行する全ての命令についての依存関係を表すものであって、各ビットが当該ビットのビット番号に対応する命令ウィンドウのエントリ番号における命令に依存関係にあるか否かを表すビット列から成るビット・ベクタのエンコーディング方法である。
【００１８】
そして、本発明の他の一態様は、命令の実行をパイプライン処理するマイクロプロセッサに使用され、当該命令に先行する全ての命令についての依存関係を表すものであって、各ビットが当該ビットのビット番号に対応する命令ウィンドウのエントリ番号における命令に依存関係にあるか否かを表すビット列から成るビット・ベクタの生成方法であって、ビット・ベクタを、当該ビット・ベクタの命令に依存関係のある命令のビット・ベクタの論理和を取ることによって生成する。
【００１９】
命令間の依存関係を求める際に複雑な演算が必要となる場合では、却って処理効率を落とす可能性がある。しかしながら、このような構成のビット・ベクタのエンコーディング方法およびビット・ベクタの生成方法は、比較的単純な演算によって命令間の依存関係を求めることができる。
【発明の効果】
【００２０】
本発明にかかるマイクロプロセッサは、投機的なスケジューリングにおいて投機ミスした場合に、依存関係にある命令のみを一斉に無効化する回復処理を行うことができる。また、本発明にかかるビット・ベクタのエンコーディング方法およびビット・ベクタの生成方法は、比較的単純な演算によって命令間の依存関係を求めることができ、前記マイクロプロセッサに好適である。
【発明を実施するための最良の形態】
【００２１】
以下、本発明に係る実施の一形態を図面に基づいて説明する。なお、各図において同一の符号を付した構成は、同一の構成であることを示し、その説明を省略する。
（実施の形態）
図１は、実施形態におけるマイクロプロセッサの構成を示すブロック図である。図２は、ビット・ベクタの生成方法を説明するための図である。図３は、実施形態におけるレジスタ・マップの構成を示す図である。図４は、実施形態における再発行行列表の構成を示す図である。図５は、再発行行列表部の一構成例を示すブロック図である。図６は、図５に示す再発行行列表における１ビットセルを示す回路図である。図７は、ビット・ベクタ比較部の一構成例を示す回路図である。
【００２２】
本実施形態にかかるマイクロプロセッサは、命令の実行をパイプライン処理するマイクロプロセッサであって、複数の命令の発行順をスケジューリングするスケジューリング部と、前記複数の命令のそれぞれについて、当該命令に先行する全ての命令についての依存関係を表す依存関係情報を記憶する依存関係情報記憶部と、前記スケジューリング部によってスケジューリングされたスケジュールに従った前記複数の命令の実行中に投機ミスが発生した場合に、命令発行後の各ステージの命令に対し前記依存関係情報に基づいて前記投機ミスの命令に依存するか否かを判断する判断部とを備えて構成される。
【００２３】
このような構成のマイクロプロセッサでは、複数の命令のそれぞれについて、当該命令に先行する全ての命令についての依存関係を表す依存関係情報が依存関係情報記憶部に記憶され、スケジューリングされた複数の命令の実行中に投機ミスが発生した場合に、命令発行後の各ステージの命令に対し依存関係情報に基づいて投機ミスの命令に依存するか否かが判断部で判断される。
【００２４】
このため、このような構成のマイクロプロセッサは、投機ミスの命令に直接的に依存する命令だけでなく、投機ミスの命令に間接的に依存する命令も適切に選択することができる。したがって、このような構成のマイクロプロセッサは、投機ミスの命令に依存する命令のみを選択的に無効化することが可能となり、そして、このような命令のみを選択的に再発行することが可能となる。このため、このような構成のマイクロプロセッサは、投機的なスケジューリングにおいて投機ミスした場合に、依存関係にある命令のみを一斉に無効化する回復処理を行うことができる。
【００２５】
そして、このような上記構成のマイクロプロセッサにおいて、好ましくは、前記スケジューリング部は、蓄積された１または複数の命令の中から実行可能な命令を選び出し、この選び出した命令をエントリ番号を付してスケジューリングし、このスケジューリングしたスケジュールに従って命令を発行する命令ウィンドウ部であり、前記依存関係情報は、各ビットが当該ビットのビット番号に対応する前記命令ウィンドウ部の前記エントリ番号における命令に依存関係にあるか否かを表すビット列から成るビット・ベクタである。
【００２６】
また、このような上記構成のマイクロプロセッサにおいて、好ましくは、前記依存関係情報記憶部は、当該ビット・ベクタの命令に対応するエントリ番号の行に行方向に書き込まれることによって前記複数の命令の複数のビット・ベクタを配列した２次元マトリクスから成る再発行行列表を記憶し、前記投機ミスが発生した場合に、前記投機ミスを起こした命令に応じたエントリ番号の列を列方向に前記判断部へ出力する。
【００２７】
このような命令の実行をパイプライン処理するマイクロプロセッサＰは、例えば、図１に示すように、フェッチ部１と、デコード部２と、リネーム部３と、命令ウィンドウ部４と、ペイロードＲＡＭ部５と、レジスタ・ファイル部６と、複数の演算器またはキャッシュメモリ（ＡＬＵ／ＣＭ）７（７−１〜７−ｎ）と、ビット・ベクタ生成部１１と、再発行行列表部１２と、ビット・ベクタ比較部１３、１４、１５とを備えて構成される。
【００２８】
命令ウィンドウ部４は、上記スケジューリング部の一例であり、再発行行列表部１２は、上記依存関係情報記憶部の一例であり、ビット・ベクタ比較部１３、１４、１５は、上記判断部の一例である。
【００２９】
なお、本明細書において、総称する場合には添え字を省略した参照符号で示し、個別の構成を指す場合には添え字を付した参照符号で示す。
【００３０】
フェッチ部１は、デコード部２に接続され、命令（機械語命令）をフェッチし（命令をメモリから取り出し）、このフェッチした命令をデコード部２へ出力する回路である。
【００３１】
デコード部２は、リネーム部３およびビット・ベクタ生成部１１にそれぞれ接続され、命令をデコードする（命令の意味するところを解釈する）回路である。デコード部２は、このデコードした命令をリネーム部３およびビット・ベクタ生成部１１へそれぞれ出力する。
【００３２】
リネーム部３は、命令ウィンドウ部４に接続され、デコード部２から入力された命令をレジスタ・リネーミングする回路である。このレジスタ・リネーミングリでは、リネーム部３によって、図略のレジスタ・マップ部に格納されているレジスタ・マップが参照され、論理レジスタ番号がこの論理レジスタ番号に対応する物理レジスタ番号へ変換される。レジスタ・マップ２１は、例えば、図３に示すように、論理レジスタ番号２１１と物理レジスタ番号２１２との対応関係を示すテーブルである。そして、本実施形態では、後述するように、ビット・ベクタ２１３も論理レジスタ番号２１１に対応付けられ、レジスタ・マップ２１には、論理レジスタ番号２１１とビット・ベクタ２１３との対応関係も示されている（図３参照）。このように本実施形態のレジスタ・マップ２１は、従来のレジスタ・マップに比し拡張されている。リネーム部３は、この論理レジスタ番号を物理レジスタ番号に変換してレジスタ・リネーミングした命令を命令ウィンドウ部４へ出力する。
【００３３】
命令ウィンドウ部４は、ペイロードＲＡＭ部５に接続され、リネーム部３から入力された１または複数の命令を蓄積し、この蓄積した命令の中からアウト・オブ・オーダ処理によって実行可能な命令を選び出し、この選び出した命令の発行順をエントリ番号を付してスケジューリング（投機的スケジューリングを含む）を行って、このスケジューリングしたスケジュールに従って命令を発行する回路である。命令ウィンドウ部４は、この発行した命令をペイロードＲＡＭ部５へ出力する。そして、命令ウィンドウ部４は、命令をペイロードＲＡＭ部５へ出力する際に、後述の再発行行列表部１２から読み込まれた当該命令に対応するビット・ベクタも付随させる。そして、命令ウィンドウ部４は、再発行行列表部１２から無効化情報を通知された場合に、当該無効化情報が指し示す命令を無効化すると共に、再発行（再スケジューリング）する。
【００３４】
ペイロードＲＡＭ部５は、レジスタ・ファイル部６に接続され、命令の情報を格納する共に、命令ウィンドウ部４から入力された命令に対応する命令の情報を読み出す回路である。ペイロードＲＡＭ部５は、この読み出した命令の情報をレジスタ・ファイル部６へ出力する。そして、このペイロードＲＡＭ部５も命令の情報をレジスタ・ファイル部６へ出力する際に、当該命令に付随していたビット・ベクタも付随させる。
【００３５】
レジスタ・ファイル部６は、複数のＡＬＵ／ＣＭ７にそれぞれ接続され、複数のレジスタを備える回路である。レジスタ・ファイル部６は、ペイロードＲＡＭ部５から入力された命令のその内容に応じてレジスタのデータをＡＬＵ／ＣＭ７へ出力する。そして、このレジスタ・ファイル部６もレジスタのデータをＡＬＵ／ＣＭ７へ出力する際に、当該命令に付随していたビット・ベクタも付随させる。
【００３６】
ＡＬＵ／ＣＭ７は、演算器またはキャッシュである。演算器（ＡＬＵ）は、レジスタ・ファイル部６から入力されたデータを演算する演算回路である。キャッシュメモリ（ＣＭ）は、当該マイクロプロセッサＰ内に設けられた比較的高速に動作可能なデータを記憶する記憶回路である。キャッシュメモリは、レジスタ・ファイル部６から入力されたデータをキャッシュする。キャッシュメモリは、最初にデータを読み出しに行くより高速に動作可能な１次キャッシュメモリおよび１次キャッシュメモリの次にデータを読み出しに行く記憶容量のより大きな２次キャッシュメモリを備えて構成されてもよい。
【００３７】
なお、マイクロプロセッサＰは、これらフェッチ部１、デコード部２、リネーム部３、命令ウィンドウ部４、ペイロードＲＡＭ５およびレジスタ・ファイル部６の各装置間にフリップフロップ等のデータを一時的に記憶するパイプライン・レジスタを備えるが、図１ではその図示が省略されている。
【００３８】
ビット・ベクタ生成部１１は、再発行行列表部１２に接続され、デコード部２から入力された命令に基づいて、命令間の依存関係を示すビット・ベクタを生成する回路である。ビット・ベクタは、命令ウィンドウ部４のエントリ数と同数のビットから成るビット列であり、このビット・ベクタの各ビットは、例えば１を立てることによって、当該ビットのビット番号に対応する命令ウィンドウ部４のエントリ番号における命令に依存関係があることを表す。ビット・ベクタは、命令ウィンドウ部４の各エントリ、および、発行後に命令が無効化されかつ再発行される可能性のあるステージまでの間の各パイプライン・レジスタに対してそれぞれ備えられる。このビット・ベクタによって、１つ前の依存先だけでなく、先行する全ての命令に対する依存関係が示される。ビット・ベクタでは、自己のエントリ数に対応するビットは、０とされるが、ビット・ベクタの生成過程では、次のように、１とされる。
【００３９】
このビット・ベクタは、次のように生成される。ここでは、例えば、図２に示す命令列を用いて説明する。図２には、左から右へ順に、命令番号、命令およびビット・ベクタがそれぞれ示されている。なお、ビット・ベクタの生成を簡単にするために、ビット・ベクタ生成部１１において、自己のエントリ番号に対応するビットは、１とされる。
【００４０】
この図２に示す命令列では、命令番号ｉ０の命令ｉ０（以下、単に「命令ｉ０」と記載する。）は、Ｒ１←ｌｏａｄ（Ｒ２）であり、先行する命令に依存関係がないので、自己のエントリ番号“０”に対応する第０ビットだけに１が立てられる。このため、命令ｉ０のビット・ベクタは、“００００・・・０００００１”となる。命令ｉ１は、Ｒ４←Ｒ１＋Ｒ６であり、先行する命令ｉ０に依存関係があるので、命令ｉ０に対応するエントリ番号“０”に対応する第０ビットと自己のエントリ番号“１”に対応する第１ビットだけに１が立てられる。このため、命令ｉ１のビット・ベクタは、“００００・・・００００１１”となる。命令ｉ２は、Ｒ２←Ｒ５＋Ｒ３であり、先行する命令に依存関係がないので、自己のエントリ番号“２”に対応する第２ビットだけに１が立てられる。このため、命令ｉ２のビット・ベクタは、“００００・・・０００１００”となる。命令ｉ３は、Ｒ７←ｌｏａｄ（Ｒ８）であり、先行する命令に依存関係がないので、自己のエントリ番号“３”に対応する第３ビットだけに１が立てられる。このため、命令ｉ３のビット・ベクタは、“００００・・・００１０００”となる。命令ｉ４は、Ｒ８←Ｒ５＋Ｒ９であり、先行する命令に依存関係がないので、自己のエントリ番号“４”に対応する第４ビットだけに１が立てられる。このため、命令ｉ４のビット・ベクタは、“００００・・・０１００００”となる。命令ｉ５は、Ｒ５←Ｒ４＋Ｒ７であり、先行する命令ｉ１および命令ｉ３に依存関係があり、さらに命令ｉ１を介して命令ｉ０にも依存関係があるので、命令ｉ０、命令ｉ１および命令ｉ３にそれぞれ対応するエントリ番号“０”、エントリ番号“１”およびエントリ番号“３”に対応する第０ビット、第１ビットおよび第３ビットと自己のエントリ番号“５”に対応する第５ビットだけに１が立てられる。このため、命令ｉ５のビット・ベクタは、“００００・・・１０１０１１”となる。
【００４１】
このようにビット・ベクタは、自己のエントリ番号に対応するビットに１を立てる場合では、自己のエントリ番号に対応するビットに１を立てたビット・ベクタと、当該ビット・ベクタの命令に依存関係のある命令ｉｎのビット・ベクタとの論理和（“ＯＲ”）を取ることによって、生成される。命令間の依存関係を求める際に複雑な演算が必要となる場合では、却ってマイクロプロセッサＰの処理効率を落とす可能性があるが、このように比較的単純な演算によって命令間の依存関係を示すビット・ベクタを求めることができる。
【００４２】
このようなビット・ベクタは、例えば、図３に示すように、レジスタ・マップ２１を格納する図略の前記レジスタ・マップ部と、論理和回路（ＯＲ回路、オア回路）２２と、論理積回路（ＡＮＤ回路、アンド回路）２３とを備えるビット・ベクタ生成回路によって生成される。論理和回路２２は、ビット・ベクタを生成すべき当該ビット・ベクタの命令に依存関係のある命令ｉｎのビット・ベクタがレジスタ・マップ２１から入力されると共に、自己のエントリ番号に対応するビットに１を立てたビット・ベクタが入力され、これら入力されたビット・ベクタの論理和を演算する回路である。論理積回路（ＡＮＤ回路、アンド回路）２３は、論理和回路２２の出力が入力されると共に、インフライト命令（プロセッサ上で実行中の命令）の範囲を示すビット列が入力され、これら入力されたビット・ベクタとビット列との論理積を演算する回路である。論理積回路２３の演算結果は、上記当該ビット・ベクタであり、他のビット・ベクタの生成に必要となるため、デスティネーション論理レジスタに対応するエントリに書き込まれ、レジスタ・マップ２１に格納される。既に実行が完了している命令によって無効化されることはなく、インフライト命令を考慮することによって既に実行が完了している命令に対する依存の記述がこの論理積回路２３によってビット・ベクタから除去される。また、命令ウィンドウ部４のエントリは、再利用されるため、前にそのエントリを占めていた命令に対する依存情報も論理積回路２３によってビット・ベクタから除去される。図３には、ビット・ベクタを生成すべき命令（デスティネーション）、例えば図２に示す命令列ｉｎの命令ｉ５のソース論理レジスタ番号（ソースＬおよびソースＲ）に対応するビット・ベクタがレジスタ・マップ２１から読み出され、この読み出されたビット・ベクタが論理和回路２２へ入力されることが細かい破線で示され、論理積回路２３で求められたビット・ベクタがレジスタ・マップ２１へ格納されることが粗い破線で示されている。
【００４３】
また、ビット・ベクタにおける自己のエントリを示すビットは、レジスタ・マップ２１を用いてビット・ベクタを生成する場合に必要であるが、投機ミスが発生した場合に無効化の要否を判断する場合では必要ではない。このため、図３では、論理積回路２３の出力が入力されると共に自己のエントリを示すビット・ベクタの否定（ＮＯＴ、ノット）が入力され、これらビット・ベクタの論理積を演算する論理積回路２４も備えている。論理積回路２４は、自己のエントリ番号に対応するビットを０に換え、自己への依存関係を示すビット“１”を取り消したビット・ベクタを生成し、このビット・ベクタを再発行行列表部１２へ出力する。
【００４４】
このビット・ベクタは、フェッチ部１でフェッチされた命令がデコード部２およびリネーム部３を介して命令ウィンドウ部４に入力される前に生成される必要がある。本実施形態では、ビット・ベクタ２１３は、リネーム部３のレジスタ・リネーミング処理と並行して生成され、ビット・ベクタ２１３の命令に対応する論理レジスタ番号２１１に対応付けられてレジスタ・マップ２１に格納（登録）される（図略の前記レジスタ・マップ部に記憶される）。
【００４５】
このようなビット・ベクタを用いることによって、投機的スケジュールが行われ、投機ミスが発生した場合に、その命令のエントリ番号に対応するビットが１のビット・ベクタを持つ命令を無効化すると共に再スケジューリング（再発行）することによって、投機ミスが発生する前に発行した全ての命令を無効化することなく、依存関係にある命令のみを一斉に選択的に無効化すると共に再スケジューリングして回復処理することができる。
【００４６】
再発行行列表部１２は、命令ウィンドウ部４およびビット・ベクタ比較部１３、１４、１５にそれぞれ接続され、複数の命令のそれぞれについて当該命令に先行する全ての命令についての依存関係を表す依存関係情報を記憶すると共に、投機ミスが発生した場合に無効化すべき命令を指し示す無効化情報を出力する回路である。再発行行列表部１２から命令ウィンドウ部４へ出力される無効化情報は、再発行（再スケジューリング）すべき命令を指し示している。再発行行列表部１２は、例えば、図４に示すように、依存関係情報を登録する再発行行列表（Re-Issue Matrix Table、RIMT）３１を記憶し、投機ミスを起こした命令に応じて無効化情報を出力する。この図４に示す再発行行列表３１では、ビット・ベクタ生成部１１で生成されたビット・ベクタは、当該ビット・ベクタの命令に対応するエントリ番号の行に行方向（図４の紙面横方向）に書き込まれる。これによって再発行行列表３１は、複数の命令に対する複数のビット・ベクタを配列した２次元マトリクスから成る。ビット・ベクタの各ビットは、当該ビット番号に対応するエントリ番号の命令に対する依存関係を表している。このため、図４に示す再発行行列表３１では、投機ミスが発生した場合に、前記投機ミスを起こした命令に応じたエントリ番号の列が無効化情報として列方向（図４の紙面縦方向）に読み出される。この列（無効化再発行情報）の１となっているエントリ番号に対応する命令が無効化され、そして、命令ウィンドウ部４では、さらに再発行（再スケジューリング）される。図４には、図２に示す命令列ｉｎのビット・ベクタを格納した再発行行列表３１が示されている。例えば、図４に示す例において、エントリ番号“１”に格納されている命令ｉ０が投機ミスした場合に、エントリ番号“０”の列が列方向に読み出され、この列の１となっているエントリ番号“１”およびエントリ番号“５”に対応する命令ｉ１および命令ｉ５が無効化され、再発行される。
【００４７】
ビット・ベクタ比較部１３、１４、１５は、命令ウィンドウ部４で発行された命令の各ステージに対応して備えられ、命令の実行中に投機ミスが発生した場合に、命令発行後の各ステージの命令に対し前記投機ミスの命令に依存するか否かを判断し、前記投機ミスの命令に依存する命令を無効化する回路である。ビット・ベクタ比較部１３、１４、１５は、命令ウィンドウ部４で発行された命令の各ステージにおいて、当該命令のビット・ベクタと再発行行列表部１２から出力された無効化情報のビット列と比較され、一致するビットがあった場合に、この一致したビットに対応する命令を無効化するために、次段（次ステージ）のパイプライン・レジスタにＮＯＰ命令を書き込む指示（無効化信号）を出力する。ＮＯＰ命令（no-operation）では、オペレーションが行われない。ビット・ベクタ比較部１３は、ペイロードＲＡＭ部５に接続され、ペイロードＲＡＭ部５のステージに対し、無効化を行う。ビット・ベクタ比較部１４は、レジスタ・ファイル部６に接続され、レジスタ・ファイル部６のステージに対し、無効化を行う。ビット・ベクタ比較部１５は、ＡＬＵ／ＣＭ７に接続され、ＡＬＵ／ＣＭ７のステージに対し、無効化を行う。
【００４８】
このようなマイクロプロセッサＰでは、まず、命令がフェッチ部１にフェッチされ、このフェッチされた命令がデコード部２へ出力される。デコード部２では、命令が解釈され、この解釈された命令がリネーム部３およびビット・ベクタ生成部１１へそれぞれ出力される。リネーム部３では、この命令がレジスタ・リネーミングされ、このレジスタ・リネーミングされた命令が命令ウィンドウ部４へ出力される。このリネーム部３のレジスタ・リネーミングと並行して、ビット・ベクタ生成部１１では、前記命令に基づいてビット・ベクタが生成され、図略のレジスタ・マップ部のレジスタ・マップ２１へ格納されると共に、自己への依存関係を示すビット“１”を取り消したビット・ベクタが生成され、再発行行列表部１２へ出力される。
【００４９】
命令ウィンドウ部４では、リネーム部３でレジスタ・リネーミングされた命令がアウト・オブ・オーダ処理され、これによって実行可能な命令が選び出され、この選び出された命令のスケジューリング（投機的スケジューリングを含む）が行われ、エントリ番号が付される。そして、このスケジューリングに従って命令が発行され、この発行された命令が命令ウィンドウ部４からペイロードＲＡＭ部５へ出力される。この際に、命令ウィンドウ部４は、当該命令に対応するビット・ベクタを再発行行列表部１２の再発行行列表３１から読み出し、当該命令に付随させる。この付随するビット・ベクタは、命令発行後の各ステージの命令に対しても付随される。ペイロードＲＡＭ部５では、命令ウィンドウ部４から出力された命令に対応する命令の情報が読み出され、この読み出された命令の情報がビット・ベクタを伴ってレジスタ・ファイル部６へ出力される。レジスタ・ファイル部６では、命令内容に応じてレジスタのデータがビット・ベクタを伴ってＡＬＵ／ＣＭ７へ出力される。そして、ＡＬＵ／ＣＭ７では、ＡＬＵ／ＣＭ７が演算器である場合には、データが演算され、または、ＡＬＵ／ＣＭ７がキャッシュメモリである場合には、データによって表されるアドレスからの読み出し、もしくは、書き込みが行われる。
【００５０】
ここで、命令ウィンドウ部４でスケジューリングされたスケジュールに投機ミスが発生すると、再発行行列表部１２から無効化情報が命令ウィンドウ部４およびビット・ベクタ比較部１３、１４、１５へそれぞれ出力される。命令ウィンドウ部４では、無効化情報が通知されると、当該無効化情報が指し示す命令を無効化すると共に、再発行（再スケジューリング）する。ビット・ベクタ比較部１３、１４、１５では、各ステージにおいて、無効化情報に基づいて投機ミスによって無効化すべき命令が判断され、無効化するために、無効化信号がペイロードＲＡＭ部５、レジスタ・ファイル部６およびＡＬＵ／ＣＭ７へそれぞれ出力される。
【００５１】
本実施形態のマイクロプロセッサＰは、このように動作するので、パイプライン処理で投機的にスケジューリングされたスケジュールに従って命令の実行中に、投機ミスが生じた場合に、再発行行列表部１２の再発行行列表３１を参照することによって、当該投機ミスの命令と依存関係にある命令のみを選択的に無効化することができ、そして、選択的に再発行することができる。また、この選択的な無効化および再発行は、上述のビット・ベクタの生成方法から分かるように、直接的に依存関係にある命令についてだけでなく、間接的に依存関係にある命令についても可能である。したがって、本実施形態のマイクロプロセッサＰは、投機的スケジューリングにおいて投機ミスした場合に、迅速に、依存関係にある命令のみを一斉に無効化する回復処理を行うことができる。
【００５２】
また、このように投機ミスの命令と依存関係にある命令のみを選択的に無効化し、再発行するので、再発行によるマイクロプロセッサＰの性能低下を最小限に抑えることができ、マイクロプロセッサＰの消費電力も背景技術に較べて削減することが可能となる。
【００５３】
ここで、前記再発行行列表部１２は、その一構成例を示すと、例えば、図５に示すように構成することができる。図５において、再発行行列表部１２は、リネーム・ステージで生成されたビット・ベクタの読み書き用の、ワード・ラインをデコードするワード・ライン・デコーダ３１と、再発行行列表３１における１ビットを記憶するための複数の１ビットセル３２と、素早く信号の０／１を決定すべく、１ビットセル（１ｂｉｔセル）３２のデータの読み出しの際にその信号を増幅するセンス・アンプ３３とを備えて構成されている。１ビットセル３２のそれぞれには、ワード・ライン・デコーダ３１から延びる複数のライト・ワード・ライン（ｗｒｉｔｅ  ｗｏｒｄ  ｌｉｎｅ）３４（３４−０〜３４−ｎ−１）と、センス・アンプ３３へ延びるリード・ビット・ライン（ｒｅａｄ  ｂｉｔ  ｌｉｎｅ）３８と、投機ミスの原因となった命令を示すビット・ベクタを入力するためのリード・ワード・ライン（ｒｅａｄ  ｗｏｒｄ  ｌｉｎｅ）３５と、リネーム・ステージで生成されたビット・ベクタを読み書きするための複数のライト・ビット・ライン（ｗｒｉｔｅ  ｂｉｔ  ｌｉｎｅ）３６（３６−０〜３６−ｎ−１）および複数のライト・ビット・バー・ライン（ｗｒｉｔｅ  ｂｉｔ  ｂａｒ  ｌｉｎｅ）３７（３７−０〜３７−ｎ−１）とが接続される。このような構成の再発行行列表部１２は、ほぼＲＡＭと類似の構造で構成されるが、各々のビット・ラインの方向が９０度異なる点およびビット・ラインのデコーダが不要である点で相違している。このような構成の再発行行列表部１２は、リネーム・ステージで生成されたビット・ベクタの読み書きの際には、データが行方向に書き込まれ、無効化情報を示すビット・ベクタの読み出しの際には、データが列方向に読み出される。このように再発行行列表部１２は、ほぼＲＡＭと類似の構造で構成されるので、一般的な半導体製造技術を用いて比較的容易に製造することが可能である。
【００５４】
そして、図５に示す再発行行列表部１２における１ビットセル３２は、その一構成例を示すと、例えば、図６に示すように構成することができる。図６において、１ビットセル３２は、複数の制御端子付きスイッチング素子４１（４１−０〜４１−ｎ−１）、インバータ４２、４３、複数の制御端子付きスイッチング素子４４（４４−０〜４４−ｎ−１）および制御端子付きスイッチング素子４５、４６を備えて構成される。各制御端子付きスイッチング素子４１〜４６は、例えばＭＯＳトランジスタ等のトランジスタから成る。各制御端子付きスイッチング素子４１〜４６がＭＯＳトランジスタである場合において、複数の各ＭＯＳトランジスタ４１−０〜４１−ｎ−１は、その各ゲート端子が各ライト・ワード・ライン３４−０〜３４−ｎ−１にそれぞれ接続され、その各ソース端子が各ライト・ビット・ライン３６−０〜３６−ｎ−１にそれぞれ接続され、その各ドレイン端子がインバータ４２の入力端子に接続されると共にインバータ４３の出力端子に接続される。インバータ４２の入力端子がインバータ４３の出力端子に接続されると共に、インバータ４２の出力端子がインバータ４３の入力端子に接続される。そして、複数の各ＭＯＳトランジスタ４４−０〜４４−ｎ−１は、その各ゲート端子が各ライト・ワード・ライン３４−ｎ−１〜３４−０にそれぞれ接続され、その各ソース端子がインバータ４２の出力端子に接続されると共にインバータ４３の入力端子に接続され、その各ドレイン端子が各ライト・ビット・バー・ライン３６−０〜３６−ｎ−１にそれぞれ接続される。また、ＭＯＳトランジスタ４６は、そのゲート端子がリード・ワード・ライン３５に接続され、そのソース端子がリード・ビット・ライン３８に接続され、そのドレイン端子がＭＯＳトランジスタ４５のソース端子に接続される。そして、ＭＯＳトランジスタ４５は、そのゲート端子が各ＭＯＳトランジスタ４１−０〜４１−ｎ−１の各ドレイン端子にそれぞれ接続され（インバータ４２の入力端子に接続されると共にインバータ４３の出力端子に接続され）、そのドレイン端子が接地される。このような構成の１ビットセル３２では、読み出しポートのリード・ビット・ライン３８は、プルダウン・スタックによって１ビットセル３２の値（データ）が“１”である場合に放電し、“０”に変化し、センス・アンプ３３は、このデータ“０”を取り込んで増幅し、このデータ“０”を出力する。そして、このデータ“０”は、センス・アンプ３３の出力に接続されるノット・ゲート３９（図５では不図示）によって“１”とされ、出力される。このようなワイヤードＯＲ構成にすることによって、複数の投機ミスが生じた場合における、複数の列方向のビット・ベクタの読み出しとそのビット・ベクタのＯＲを取る動作を纏めることができる。
【００５５】
また、前記ビット・ベクタ比較部１３、１４、１５は、その一構成例を示すと、例えば、図７に示すように構成することができる。図７において、ビット・ベクタ比較部１３、１４、１５は、制御端子付きスイッチング素子５１と、互いに直列接続された２個の第１制御端子付きスイッチング素子５２１（５２１−０〜５２１−ｎ−１）と第２制御端子付きスイッチング素子５２２（５２２−０〜５２２−ｎ−１）から成る複数のビット比較回路５２と、インバータ５３とを備えて構成される。各制御端子付きスイッチング素子５１、５２１、５２２は、例えばＭＯＳトランジスタ等のトランジスタから成る。各制御端子付きスイッチング素子５１、５２１、５２２がＭＯＳトランジスタである場合において、ＭＯＳトランジスタ５１は、そのゲート端子にプリチャージ信号が入力され、そのソース端子が所定の電圧値の電源に接続され、そのドレイン端子がインバータ５３の入力端子に接続される。インバータ５３の出力端子は、次段（次ステージ）のパイプライン・レジスタに接続され、次段パイプライン・レジスタへのＮＯＰの書き込みが行われる。ビット比較回路５２−０〜５２−ｎ−１は、ビット・ベクタの各ビットに対応するように、ビット・ベクタのビット数だけ用意される。各ビット比較回路５２−０〜５２−ｎ−１は、各第１ＭＯＳトランジスタ５２１−０〜５２１−ｎ−１のソース端子がＭＯＳトランジスタ５１のドレイン端子からインバータ５３の入力端子までの間にそれぞれ接続され、各第１ＭＯＳトランジスタ５２１−０〜５２１−ｎ−１のドレイン端子が各第２ＭＯＳトランジスタ５２２−０〜５２２−ｎ−１のソース端子に接続され、そして、各第２ＭＯＳトランジスタ５２２−０〜５２２−ｎ−１のドレイン端子が接地される。また、各第１ＭＯＳトランジスタ５２１−０〜５２１−ｎ−１のゲート端子には、ビット・ベクタの当該ビット比較回路５２に対応するビットが入力され、各第２ＭＯＳトランジスタ５２２−０〜５２２−ｎ−１のゲート端子には、投機ミスの原因となった命令を示すビット列の当該ビット比較回路５２に対応するビットが入力される。このような構成のビット・ベクタ比較部１３、１４、１５では、ビット比較回路５２がダイナミック回路で構成されるため、ビット・ベクタのビットと投機ミスの原因となった命令を示すビット列のビットとを高速に比較することができる。このため、ビット・ベクタのビット数が多く、ビット・ベクタ長が長くなっても対応することができる。
【００５６】
（シミュレーション）
本実施形態のマイクロプロセッサに関し、SimpleScala Tool Setにおけるout-of-order実行シミュレータを変更することによって、全命令の再発行と選択的再発行との測定を行うシミュレーションを行った。SimpleScala Tool Setについては、例えば、「Burger,D.and Austiin,T.M.”The SimpleScala Tool Set,Version 2.0”,Technical Report CS-TR-97-1342,University of Wisconsin-Madison Computer Sciences Dept.’(1997).」に開示されている。
【００５７】
本シミュレーションのマイクロプロセッサの構成は、次の通りである。プロセッサ・コアは、発行幅が８で、RUUが１２８エントリで、LSQが６４エントリで、int ALUが８で、int mlut/divが４で、fp ALUが８で、fp mlut/divが４で、そしてメモリ・ポートが８である。分岐予測は、PHTが８Ｋエントリで履歴長が６のgshareであり、BTBが２Ｋエントリであり、RASが１６エントリである。Ｌ１  Ｉ−キャッシュおよびＬ１  Ｄ−キャッシュは、それぞれ、６４ＫＢ／３２Ｂライン／２−wayでヒット・レイテンシ３サイクルであり、Ｌ２統合キャッシュは、２ＭＢ／６４Ｂライン／４−wayでヒット・レイテンシ２４サイクルである。メモリは、初期参照１２８サイクルで転送間隔２サイクルである。ＴＬＢは、命令が１６エントリで、データが３２エントリで、ミス・レイテンシが１３４サイクルである。
【００５８】
そして、本シミュレーションでは、命令セットとしてSimpleScala PISAが用いられ、ベンチマーク・プログラムとして、SPEC2000のうち、intより８本、fpより９本が用いられた。入力には、trainまたはrefが用いられ、最初の１Ｇ命令がスキップされ、その後の１．５Ｇ命令が測定された。
【００５９】
図８および図９は、シミュレーシ＊ョン結果を示す図である。図８は、命令発行レイテンシの増加によって、ロード命令に依存する命令の投機的スケジューリングを行うサイクル数が変化した場合におけるＩＰＣのベンチマーク平均であり、図８（Ａ）がSPECint2000の場合を示し、図８（Ｂ）がSPECfp2000の場合を示している。図８の横軸は、投機的スケジューリングを行うサイクル数であり、その縦軸は、ＩＰＣ（１サイクル当たりの実行命令数）である。また、図８中における横線は、投機的スケジューリングが不要な場合のＩＰＣを示している。図９は、命令発行レイテンシの増加によって、ロード命令に依存する命令の投機的スケジューリングを行うサイクル数が変化した場合に再発行された命令数のベンチマーク平均であり、図９（Ａ）がSPECint2000の場合を示し、図９（Ｂ）がSPECfp2000の場合を示している。図９の横軸は、投機的スケジューリングを行うサイクル数であり、それらの縦軸は、再発行された命令数である。図８および図９において、網目の棒グラフは、投機ミスが発生した場合に、投機的スケジューリングを行うサイクルに発行された全ての命令を無効化する場合を示し、白抜きの棒グラフは、投機ミスが発生した場合に、ロード命令に依存する命令のみを選択的に無効化する場合を示している。
【００６０】
図８から分かるように、投機的スケジューリングを行うサイクル数の増加に従って、前記全命令を無効化する場合も前記選択的に命令を無効化する場合も、ＩＰＣは、低下するが、前記選択的に命令を無効化する場合の方が前記全命令を無効化する場合に較べて、ＩＰＣの低下は、はるかに少ない。例えば、投機的スケジューリングを行うサイクル数が７である場合では、前記全命令を無効化する場合は、ＩＰＣをintで５．３％、fpで６．２％低下するが、前記選択的に命令を無効化する場合は、ＩＰＣをintで０．４％、fpで１．０％の低下に抑えられている。
【００６１】
また、図９から分かるように、投機的スケジューリングを行うサイクル数の増加に従って、前記全命令を無効化する場合も前記選択的に命令を無効化する場合も、再発行される命令数は、増加するが、前記選択的に命令を無効化する場合の方が前記全命令を無効化する場合に較べて、再発行される命令数は、はるかに少ない。例えば、投機的スケジューリングを行うサイクル数が７である場合では、前記選択的に命令を無効化する場合において再発行される命令数は、前記全命令を無効化する場合と比較して、intで６．２％、fpで２．８％に過ぎない。
【００６２】
このように本実施形態のマイクロプロセッサＰは、パイプライン処理で命令の実行中に投機ミスが生じた場合でも、当該投機ミスの命令と直接的あるいは間接的に依存関係にある命令のみを選択的に無効化することができ、そして、選択的に再発行することができる。したがって、本実施形態のマイクロプロセッサＰは、投機ミスした場合により適切に回復処理することができる。また、このように投機ミスの命令と依存関係にある命令のみを選択的に無効化し、再発行するので、再発行によるマイクロプロセッサＰの性能低下を最小限に抑えることができ、マイクロプロセッサＰの消費電力も背景技術に較べて削減することが可能となる。
【００６３】
本発明を表現するために、上述において図面を参照しながら実施形態を通して本発明を適切且つ十分に説明したが、当業者であれば上述の実施形態を変更および／または改良することは容易に為し得ることであると認識すべきである。したがって、当業者が実施する変更形態または改良形態が、請求の範囲に記載された請求項の権利範囲を離脱するレベルのものでない限り、当該変更形態または当該改良形態は、当該請求項の権利範囲に包括されると解釈される。
【図面の簡単な説明】
【００６４】
【図１】実施形態におけるマイクロプロセッサの構成を示すブロック図である。
【図２】ビット・ベクタの生成方法を説明するための図である。
【図３】実施形態におけるレジスタ・マップの構成を示す図である。
【図４】実施形態における再発行行列表の構成を示す図である。
【図５】再発行行列表部の一構成例を示すブロック図である。
【図６】図５に示す再発行行列表における１ビットセルを示す回路図である。
【図７】ビット・ベクタ比較部の一構成例を示す回路図である。
【図８】シミュレーション結果を示す図（その１）である。
【図９】シミュレーション結果を示す図（その２）である。
【図１０】ロード命令に依存する命令のスケジューリングを説明するための図である。
【符号の説明】
【００６５】
Ｐ  マイクロプロセッサ
１１  ビット・ベクタ生成部
１２  再発行行列表部
１３、１４、１５  ビット・ベクタ比較部
【図１】
2009181163.tif 000003
【図２】
2009181163.tif 000004
【図３】
2009181163.tif 000005
【図４】
2009181163.tif 000006
【図５】
2009181163.tif 000007
【図６】
2009181163.tif 000008
【図７】
2009181163.tif 000009
【図８】
2009181163.tif 000010
【図９】
2009181163.tif 000011
【図１０】
2009181163.tif 000012