(57)【特許請求の範囲】
【請求項１】
他の機能ユニットよりもパイプラインステージが短い機能ユニットに対して設けられ、かつ、他の機能ユニットと待ち時間が同一となる個数のエントリを有するアネックス内においてヤング・ビット値を形成する方法であって、前記各エントリがアドレス、データ及びヤング・ビット情報を含む方法において、
（ａ）あるアネックス・エントリの宛先アドレスを他の全てのアネックス・エントリに含まれる他の全ての宛先アドレスと比較する工程と、
（ｂ）前記あるアネックス・エントリの宛先アドレスと同一の宛先アドレスを有する各アネックス・エントリ内においてヤング・ビットをリセットする工程と、
（ｃ）前記あるアネックス・エントリ内においてヤング・ビットをセットする工程と、
（ｄ）前記工程ａ〜ｃを、最も古いアネックス・エントリを最初として各アネックス・エントリに対して順次繰り返す工程と
を含む方法。
【請求項２】
前記あるアネックス・エントリの宛先アドレスを他の全てのアネックス・エントリに含まれる他の全ての宛先アドレスと比較する工程が一斉に実施される請求項１に記載の方法。
【請求項３】
前記あるアネックス・エントリの宛先アドレスを比較のために他の全てのアネックス・エントリに対してブロードキャストする請求項２に記載の方法。
【請求項４】
他の機能ユニットよりもパイプラインステージが短い機能ユニットに対して設けられ、かつ、他の機能ユニットと待ち時間が同一となる個数のエントリを有するアネックス内においてヤング・ビット値を形成する方法であって、前記各エントリがアドレス、データ及びヤング・ビット情報を含む方法において、
（ａ）過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスを比較のために他の全ての有効アネックス・エントリに対してブロードキャストする工程と、
（ｂ）過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスを他の全ての有効アネックス・エントリに含まれる他の全ての宛先アドレスと比較する工程と、
（ｃ）過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスと同一の宛先アドレスを有する各有効アネックス・エントリ内においてヤング・ビットをリセットする工程と、
（ｄ）過去にブロードキャストしたことのない宛先アドレスを有する最も古い有効アネックス・エントリ内においてヤング・ビットをセットする工程と、
（ｅ）前記工程ａ〜ｄを最新の有効アネックス・エントリを最後として各有効アネックス・エントリに対して順次繰り返す工程と
を含む方法。
【請求項５】
前記工程ａは過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスを比較のために全ての無効アネックス・エントリに対してブロードキャストする工程を含む請求項４に記載の方法。
【請求項６】
前記工程ｂは過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスを全ての無効アネックス・エントリに含まれる全ての宛先アドレスと比較する工程を含む請求項４に記載の方法。
【請求項７】
前記工程ｃは過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスと同一の宛先アドレスを有する各無効アネックス・エントリ内においてヤング・ビットをリセットする工程を含む請求項４に記載の方法。
【請求項８】
他の機能ユニットよりもパイプラインステージが短い機能ユニットに対して設けられ、かつ、他の機能ユニットと待ち時間が同一となる個数のエントリを有するアネックス内においてヤング・ビット情報を維持する方法であって、前記各エントリが現在のヤング・ビット格納位置と、少なくとも一つの過去のヤング・ビット格納位置とを有する方法において、
クロック・サイクル毎に、現在のヤング・ビット格納位置の内容を、前記少なくとも一つの過去のヤング・ビット格納位置へ格納する工程と、
前記少なくとも一つの過去のヤング・ビット格納位置の内容を、誤って予測された分岐が検出された際に現在のヤング・ビット格納位置へコピーする工程と
を含む方法。
【請求項９】
現在のヤング・ビットを新たなエントリがアネックス内へ入力された後で更新する工程を含む請求項８に記載の方法。
【請求項１０】
他の機能ユニットよりもパイプラインステージが短い機能ユニットに対して設けられ、かつ、他の機能ユニットと待ち時間が同一となる個数のエントリを有するアネックス内においてヤング・ビット情報を維持する方法であって、前記各エントリが１個の現在のヤング・ビット格納位置（Ｙ0）と、Ｎ個の過去のヤング・ビット格納位置（Ｙ1〜ＹN）とを有する方法において、
各アネックス・エントリに含まれるＹxの内容を新たなエントリがアネックス内へ入力される前にＹx+1へそれぞれ格納し、これを０〜Ｎ−１の範囲に属する前記各ｘについて実施する工程と、
各アネックス・エントリに含まれる過去のヤング・ビット格納位置のうちのいずれか１つの内容を、誤って予測された分岐が検出された際にＹ0内へそれぞれコピーする工程と
を含む方法。
【請求項１１】
前記のコピーする工程において、ＹiがＹ0へコピーされた過去のヤング・ビット格納位置であり、前記ｉが誤って予測された分岐の検出によって無効化されたアネックス・エントリの数である請求項１０に記載の方法。
【請求項１２】
他の機能ユニットよりもパイプラインステージが短い機能ユニットに対して設けられ、かつ、他の機能ユニットと待ち時間が同一となる個数のエントリを有するアネックス内においてヤング・ビット値を形成する装置であって、前記各エントリがアドレス、データ及びヤング・ビット情報を含む装置において、
あるアネックス・エントリの宛先アドレスを他の全てのアネックス・エントリに含まれる他の全ての宛先アドレスと比較する比較回路と、
前記あるアネックス・エントリの宛先アドレスと同一の宛先アドレスを有する各アネックス・エントリ内においてヤング・ビットをリセットする主張取り消し回路と、
前記あるアネックス・エントリ内においてヤング・ビットをセットする主張回路と、
前記比較回路と、前記主張取り消し回路と、前記主張回路とが行う処理を、最も古いアネックス・エントリを最初として各アネックス・エントリに対して順次繰り返す反復回路と
を含む装置。
【請求項１３】
前記あるアネックス・エントリの宛先アドレスを他の全てのアネックス・エントリに含まれる他の全ての宛先アドレスと比較する比較回路が比較を一斉に実施することを可能とする請求項１２に記載の装置。
【請求項１４】
前記あるアネックス・エントリの宛先アドレスを比較のために他の全てのアネックス・エントリに対してバスを通じて物理的に送信する請求項１３に記載の装置。
【請求項１５】
他の機能ユニットよりもパイプラインステージが短い機能ユニットに対して設けられ、かつ、他の機能ユニットと待ち時間が同一となる個数のエントリを有するアネックス内においてヤング・ビット値を形成する装置であって、前記各エントリがアドレス、データ及びヤング・ビット情報を含む装置において、
（ａ）過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスを比較のために他の全ての有効アネックス・エントリに対してブロードキャストするブロードキャスト回路と、
（ｂ）過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスを他の全ての有効アネックス・エントリに含まれる他の全ての宛先アドレスと比較する比較回路と、
（ｃ）過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスと同一の宛先アドレスを有する各有効アネックス・エントリ内においてヤング・ビットをリセットする主張取り消し回路と、
（ｄ）過去にブロードキャストしたことのない宛先アドレスを有する最も古い有効アネックス・エントリ内においてヤング・ビットをセットする主張回路と、
（ｅ）前記ａ〜ｄに示す回路を最新の有効アネックス・エントリを最後として各有効アネックス・エントリに対して順次繰り返し作用させる反復回路と
を含む装置。
【請求項１６】
前記ａの回路は過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスを比較のために全ての無効アネックス・エントリに対してブロードキャストするブロードキャスト回路を含む請求項１５に記載の装置。
【請求項１７】
前記ｂの回路は過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスを全ての無効アネックス・エントリに含まれる全ての宛先アドレスと比較する比較回路を含む請求項１５に記載の装置。
【請求項１８】
前記ｃの回路は過去にブロードキャストしたことのない最も古い有効アネックス・エントリの宛先アドレスと同一の宛先アドレスを有する各無効アネックス・エントリ内においてヤング・ビットをリセットする主張取り消し回路を含む請求項１５に記載の装置。
【請求項１９】
他の機能ユニットよりもパイプラインステージが短い機能ユニットに対して設けられ、かつ、他の機能ユニットと待ち時間が同一となる個数のエントリを有するアネックス内においてヤング・ビット情報を維持する装置であって、前記各エントリが現在のヤング・ビット格納位置と、少なくとも一つの過去のヤング・ビット格納位置とを有する装置において、
クロック・サイクル毎に、現在のヤング・ビット格納位置の内容を、前記少なくとも一つの過去のヤング・ビット格納位置へ格納する記憶回路と、
前記少なくとも一つの過去のヤング・ビット格納位置の内容を、誤って予測された分岐が検出された際に現在のヤング・ビット格納位置へコピーするコピー回路と
を含む装置。
【請求項２０】
現在のヤング・ビットを新たなエントリがアネックス内へ入力された後で更新する更新回路を含む請求項１９に記載の装置。
【請求項２１】
他の機能ユニットよりもパイプラインステージが短い機能ユニットに対して設けられ、かつ、他の機能ユニットと待ち時間が同一となる個数のエントリを有するアネックス内においてヤング・ビット情報を維持する装置であって、前記各エントリが１個の現在のヤング・ビット格納位置（Ｙ0）と、Ｎ個の過去のヤング・ビット格納位置（Ｙ1〜ＹN）とを有する装置において、
各アネックス・エントリに含まれるＹxの内容を新たなエントリがアネックス内へ入力される前にＹx+1へそれぞれ格納し、これを０〜Ｎ−１の範囲に属する前記各ｘについて実施する記憶回路と、
各アネックス・エントリに含まれる過去のヤング・ビット格納位置のうちのいずれか１つの内容を、誤って予測された分岐が検出された際にＹ0内へそれぞれコピーするコピー回路と
を含む装置。
【請求項２２】
前記のコピー回路において、ＹiがＹ0へコピーされた過去のヤング・ビット格納位置であり、前記ｉが誤って予測された分岐の検出によって無効化されたアネックス・エントリの数である請求項２１に記載の装置。
【請求項２３】
前記比較回路が内容検索メモリである請求項１３に記載の装置。
【請求項２４】
前記比較回路が内容検索メモリである請求項１７に記載の装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマイクロプロセッサの設計に関し、より詳細には、パイプライン・プロセッサ内において推論に基づいて実行された命令の誤って予測された分岐からの回復に関する。
【０００２】
【従来の技術及び発明が解決しようとする課題】
初期の一般的なマイクロプロセッサは中央演算処理装置（ＣＰＵ）を含む。ＣＰＵはメモリとの間のインターフェースを提供し、かつ命令を連続的に順次実行し得る装置を実現する。一般的に、命令実行は少なくとも４つの主なステージ、即ち、命令及びオペランドのフェッチ、命令の復号、実行、並びに宛先レジスタへの結果の書き戻しに分割される。１つの一般的な命令の実行は１つのクロック・サイクルを要する。このため、前記した４つの機能は同クロック・サイクルにおいてそれぞれ実施される。各ステージは自身の演算の完了以前に前のステージの結果を待つ必要がある。従って、命令の実行は４つのステージのそれぞれを通じて順次伝搬される。最も短いクロック・ピリオドは４つの全てのステージにおける最も長い伝搬遅延によって決定される。
【０００３】
パイプラインの概念は各クロック・サイクルにおいて実施されるロジックの総数を削減することにより最大クロック周波数を増加させる。これを促進すべく、例えば、第２のステージ及び第３のステージ間のインターフェースをクロックド・ラッチ（Clocked latches）を用いて分離し得る。最初の２つのステージ（フェッチ及び復号）を１つのクロック・サイクルで実施可能である。続いて、第２のクロック・サイクルにおいて、最後の２つのステージ（実行及び書き戻し）を実施し得る。フェッチの開始から書き戻しの終了までの合計時間がほぼ等しいため、命令の総待ち時間は殆ど変わらない。しかし、命令実行を明確に区分された２つの部分に分割することには大きな利点がある。即ち、スループットを倍増できる。これはパイプライン化されたＣＰＵが２つの命令を同時に実行し得るという事実に基づく。１つの命令の実行及び書き戻し中に、第２の命令のフェッチ及び復号が可能である。当然、４つのステージをそれぞれ別のクロック・サイクルにおいて実施し、これによりスループットを増大すべくパイプラインの概念を拡大できる。この結果、ロジックをＮ個のセグメントに分割することにより、理論的にはスループットをＮ倍に増やせる。
【０００４】
命令実行を４つを越す数のパイプライン・ステージに分割して、任意の１つのステージを通じて形成される最大伝搬遅延を短縮し、これにより動作周波数及びスループットを増加すべく、スーパーパイプライン型プロセッサでは４つのステージの全てまたは一部に含まれるロジックが分割される。図１は１つを上回る数の実行ユニット１０（機能ユニットとも呼ばれる）を有するスーパースカラ・マイクロプロセッサを示す。
【０００５】
スーパースカラ・プロセッサは幾つかの並列機能ユニット１０を有している。幾つかの一般的なスーパースカラ・プロセッサは浮動小数点、整数、分岐及びロード／ストアの各機能ユニット１０を含む。一般的に、機能ユニット１０には浮動小数点演算または類似する複雑なオペレーションを行い得るユニットが含まれる。各機能ユニットによる新たな命令の実行をサイクル毎に開始可能にするとともに、これらの複雑なユニットを他のハードウェアと同一のクロック周波数にて動作させることが好ましい。これらの目的を実現するためには、並列機能ユニット１０のパイプライン化が望ましい。最も複雑な機能ユニットにおける複雑さ及び論理の分割は同機能ユニット１０内に必要とされるパイプライン・ステージの数を支配する。全ての機能ユニット１０が同一の待ち時間を有するとは限らない。４つの並列機能ユニット１０のうち、浮動小数点ユニットが最も複雑である。他の３種類の機能ユニット１０は浮動小数点ユニットほど複雑ではない。従って、これら３つの機能ユニット１０は浮動小数点ユニットのパイプライン化に要するステージ数より更に少ないステージ数でパイプライン化できる。全ての並列機能ユニット１０は最終ステージ１１で併合される。最終ステージ１１では、実行結果が対応する宛先レジスタに書き込まれる。
【０００６】
全ての並列機能ユニット１０のパイプラインがそれぞれ同数のステージによって構成されていない場合、幾つかの機能ユニット１０の結果は他の機能ユニット１０の結果より早く形成される。例えば、整数ユニットのパイプライン化が２つのステージを要する一方で、浮動小数点ユニットのパイプライン化が５つのステージを要する場合、両方の命令が同時にディスパッチされたとしても整数ユニットの結果は浮動小数点ユニットの結果より３クロック・サイクル早く形成される。同様に、新しい命令は古い命令より早く終了できる。例えば、１クロック・サイクルにおいて浮動小数点命令がディスパッチされ、次のクロック・サイクルにおいて加算等の整数命令がディスパッチされたとする。整数パイプラインが浮動小数点パイプラインより３ステージ短い場合、浮動小数点命令を最初にディスパッチしたとしても整数加算の結果は浮動小数点の結果より２クロック・サイクル早く形成される。この例において、整数加算は古い浮動小数点命令より後にディスパッチされているため、同整数加算は新しい命令といえる。
【０００７】
幾つかの新しい命令を幾つかの古い命令より先に宛先レジスタへ書き込み可能にした場合、潜在的な問題が発生する。例えば、新しい命令及び古い命令の両方を同一の宛先レジスタに書き込む場合、プログラマは新しい命令の結果が古い命令の結果に対して上書きされることを期待する。古い命令が新しい命令の結果に上書きされた場合、意図する結果が意図する宛先に現れないため、プロセッサは逐次プログラムを正確に実行してはいないことになる。従って、命令結果の書き戻し順序を維持することが必要である。
【０００８】
短い機能ユニット・パイプラインは命令結果の逐次書き戻しを促進すべく余分なパイプライン・ステージを備えることにより長くなっている。この結果、全ての機能ユニット１０はディスパッチから書き戻しまで同一の待ち時間を有する。図２に示すように、短い機能ユニット・パイプラインの末端には、幾つかの余分なステージ２３が付加されている。これらの余分なパイプライン・ステージは完了ユニットと称される先入れ先出し（ＦＩＦＯ）バッファ２０を効果的に形成する。以下、同バッファをアネックス２０と称する。
【０００９】
短い機能ユニットのパイプラインに対して余分なステージを付加することにより、プログラム実行及び書き戻しの順序が維持される一方で、別の問題が発生する。図２に示す短い機能ユニット２１が命令順序の実行に使用し得る整数演算用ＡＬＵ機能ユニットであると仮定する。例えば、“ａｄｄ  ｒｓ１，ｒｓ２，ｒｄ”がレジスタｒｓ１に格納された数値をレジスタｒｓ２に格納された数値に加算し、その結果をレジスタｒｄへ格納することを意味する以下のプログラム断片について以下に詳述する。
【００１０】
ａｄｄ  ｒ１，ｒ２，ｒ３；
ａｄｄ  ｒ３，ｒ４，ｒ５；
ここで、第１の命令はレジスタｒ３へ格納する結果を形成する。次の命令は前の命令によって算出されたｒ３の値を使用する。しかし、第１の命令によって算出されたｒ３の値は、第２の命令の実行開始前にレジスタ・ファイルへ書き込まれることはない。レジスタ・ファイル内の宛先レジスタは書き戻しステージ２２がアネックス２０の末端に到達するまでは最終的に更新されない。従って、第２の命令が実行される際、第２の命令の正確なオペランドはアネックス２０の第１のエントリ２３内に存在する。後の命令によるアネックス２０内のエントリの利用を可能にすべく、アネックス２０に対するある種のアクセスを提供する必要がある。
【００１１】
図３は従来技術におけるアネックス３０へのアクセスの１つの方法を示す。アネックス３０内の各エントリは一組のアウトプット３１を有する。一組のアウトプット３１は少なくとも１つのマルチプレクサ３２にフィードバックされる。マルチプレクサ３２はレジスタ・ファイルからフェッチされた数値と、アネックス３０内のエントリのうちの１つから入力された数値とのうちのいずれか一方を選択する。アネックス３０内の１つのエントリが現在の命令のオペランドとして使用すべき変数の最新のバージョンを有する場合、機能ユニット３３へインプットを出力すべくマルチプレクサ３２を用いて同エントリを選択できる。
【００１２】
各機能ユニット３３の始まりにおいて、アネックス３０の各エントリの数値をマルチプレクサ３２へフィードバックする場合、データ・パス３４の幅は実質的に増大し得る。これは、フィードスルーの数量がアネックス３０内のエントリの数量に直接比例して増加することに起因する。アネックス３０内の各エントリは機能ユニット３３の前に位置するマルチプレクサ３２に対して接続された一組のワイヤ３１を有する。このため、Ｎ個のエントリを有するアネックス３０では、１ビットに対してＮ本の余分なワイヤをデータパス幅内に配線するとともに、同ワイヤを機能ユニットを通じて配線する必要がある。ハードウェアが６４ビット幅のアーキテクチャと、８個のエントリを有するアネックスとを含む場合、５１２本の余分なワイヤを機能ユニット３３を通じて配線する必要がある。各ワイヤは或る程度のスペースを占有するため、機能ユニット３３の全体的な幅を実質的に増大させる必要がある。データパス３４のサイズを大幅に増大させる多数の配線の設置を回避すべく、アネックス３０の各エントリのピッチまたは幅を機能ユニット３３のピッチに合わせて増加させる必要がある。従って、全体的なデータパスの幅はフィードスルーの追加によって広くなる。データパスの幅の増大は少なくとも２つの理由から好ましくない。第１に、データパスの幅の増大により集積回路上の貴重な領域が占有される点が挙げられる。第２に、データパスの幅の増大により制御信号ワイヤが長くなる点が挙げられる。ワイヤの抵抗は最近の小型プロセッサでは無視できない問題である。即ち、長いワイヤを使用した場合、短いワイヤを使用した場合より速度が遅くなり、プロセッサの性能を制限する可能性がある。
【００１３】
エントリ３０をマルチプレクサ３２へ接続することに関する第２の問題としては、マルチプレクサ３２に対するインプット数の増加に伴って同マルチプレクサ３２の処理速度が低下する点が挙げられる。即ち、アネックス３０内の各エントリからマルチプレクサにそれぞれ接続された余分な数のインプットが必要になる。事態をさらに深刻にする問題としては、パイプライン化された機能ユニットを有するスーパースカラ・プロセッサは複数のアネックスを含み得る点が挙げられる。最も新しいエントリが任意のアネックス３０内に存在し得るため、マルチプレクサ３２は任意のアネックス内の全てのエントリからのインプットを含む必要がある。マルチプレクサ３２に対して非常に多くのインプットが加えられた場合、マルチプレクサ３２は命令を実行するサイクルへ組み込めないほど遅くなり、最大動作周波数が低下する。
【００１４】
この方法を使用した場合、マルチプレクサ３２を使用して選択するエントリを確定すべくアネックス３０の各エントリに格納されたレジスタ・アドレスを確定する能力を提供する必要がある。
【００１５】
図４に示すように、更に効果的な従来の方法では、アネックスにメモリ４０が使用されている。アネックスの各エントリをマルチプレクサを通じて接続する代わりに、１セットのフィードスルー４１が２つのインプットを備えたマルチプレクサ４２に接続されている。これはアネックス４０内のエントリの総数に左右されることなく機能ユニット４３のピッチの増加を排除する。更に、マルチプレクサ４２に対するインプットの総数はアネックス４０内のエントリの総数に左右されることなく２つに維持される。
【００１６】
前記の方法に類似して、マルチプレクサ４２へ出力するエントリを確定する能力が提供されている。これを実現する１つの方法は、アネックスのアドレス・フィールド内における内容検索メモリの使用を含む。アネックス内の各エントリはアドレス・フィールド及びデータ・フィールドを有する。アドレス・フィールドは宛先レジスタのアドレスを含み、データ・フィールドは同宛先レジスタへ格納する結果を保持する。オペランドのうちの１つがアネックス内に存在するか否かを確定する場合、同オペランドのアドレスはアネックス４０内に格納された全てのアドレスと同時に比較される。アドレスの整合が生じた場合、そのエントリに対する整合ラインが主張される。任意のオペランドについて、１つを越える数の整合がアネックス４０内に存在し得る。例えば、これは連続する幾つかの命令の全てが同一の宛先レジスタに書き込まれる場合に生じ得る。この場合、アネックス４０内の最も新しいエントリをマルチプレクサ４２へ入力する必要がある。
【００１７】
殆どの命令は複数のオペランドを必要とする。例えば、“ａｄｄ  ｘ，ｙ，ｚ”という命令はｘに格納された数値をｙに格納された数値に加算し、同加算結果をｚに格納させる。従って、ｘ及びｙはオペランド・レジスタである。ｘに対するデータ及びｙに対するデータがともにアネックス４０内に存在し得るため、全てのオペランドの同時検索を可能にする複数の比較ポート及び整合ライン・セットを内容検索メモリ内に形成する必要がある。
【００１８】
複数の整合間における衝突の問題を解決するために、最も新しい整合のみがマルチプレクサ４２に接続されたバスを駆動することを可能にすべく優先順位エンコーダ回路が使用される。しかし、優先順位エンコーダの待ち時間はアネックス４０内のエントリの総数の増加に伴って長くなる。また、優先順位のエンコーディングはオペランドの選択に対して直列である。従って、優先順位のエンコーディングをクリティカル・パスから排除できない。この結果、優先順位のエンコーディングは許容不能な遅延を形成し得る。
【００１９】
優先順位の使用に代えて特別なヤング・ビット（Young bit）が使用される。図５に示すように、アネックス５０内の各エントリ５４は別のビット５１を有している。ビット５１はエントリ５４に対するヤング・ビットである。任意の宛先レジスタ・アドレスについて、ゼロでないヤング・ビット５１を含むエントリ５４はアネックス５０内に１つのみ存在する。このヤング・ビット５１の位置に“真”の論理値を有するエントリ５４は、対応する任意の宛先レジスタへ格納すべき最新のデータのバージョンを含む。この任意のレジスタ・アドレスに関する更に古い全てのバージョンは、主張が取り消されたヤング・ビットを含む。更に、各エントリ５４は有効ビット５２を有している。有効ビット５２はエントリ５４が宛先レジスタへ書き込むべき有効データを含むか否かを示す。
【００２０】
ヤング・ビットを使用することにより、アネックス５０内の各エントリ５４に対する整合ラインでは、同エントリ５４に対する“ヤング整合（Young match）”信号を形成すべくヤング・ビット及び有効ビットを用いて論理積が求められる。オペランド・レジスタ・アドレスをアネックス５０内の内容検索メモリからなるアドレス部分５３へ入力した後で、アネックス５０内に複数の整合が存在する場合、任意の時点において１つのヤング整合信号のみが主張される。優先順位エンコーダの使用と比較して、ヤング・ビットを使用した際の処理速度の向上はヤング・ビット５１の維持及び更新における複雑さの増大を犠牲にして成立している。
【００２１】
ヤング・ビット５１の処理及び更新のための一般的なデザインは、アネックス５０の内容検索メモリ部分５３内に比較ポートを要する。機能ユニットにおいて実行される各命令の宛先アドレスは、アネックス５０に含まれる各エントリ５４のアドレス部分と比較される。整合するアドレスを有するエントリ５４のヤング・ビット５１はリセットされる。実行されたばかりの命令の結果は対応する宛先レジスタに対する最も新しい値である。このため、アネックス５０内に存在する全ての新たなエントリ５５は、主張されたヤング・ビット５１を伴ってアネックス・パイプライン５０へ入力される。
【００２２】
任意のパイプライン・プロセッサにおける基本的問題としては、実行順序における条件付分岐の処理が挙げられる。殆どのプログラムは多くの条件付分岐を含む。命令の実行順序は分岐命令の結果に基づいて変化する。従って、このようなプログラムをパイプラインで実行する場合、分岐命令直後に次の命令を実行すべく命令のフェッチが行われる。しかし、このフェッチすべき命令を正確に確定する方法がない。パイプライン・プロセッサでは、全ての命令は同命令のフェッチ後数サイクルが経過するまで実行されない。このため、分岐命令後にフェッチ、ディスパッチまたは実行開始する命令を正確に確定できない。
【００２３】
この問題を解決する一般的な方法としては、正しいと思われる１つの命令実行順序を選択することが挙げられる。命令実行順序の選択が間違っていた場合、プロセッサを誤った予測から回復する必要がある。多くのプロセッサでは、誤って予測された実行経路に沿ってフェッチ、ディスパッチ、または実行開始された全ての命令の実行を無効にするか、または中止する必要がある。
【００２４】
しかし、ヤング・ビット５１を使用するアネックス５０を含むプロセッサでは、問題は更に複雑である。プロセッサは条件付分岐に直面した際、プリフェッチするコードのセグメントを選択する必要がある。プリフェッチされた命令は分岐が実際に解決されるまで推論に基づいて実行される。分岐解決の待ち時間はパイプライン化の程度に基づいて数サイクルであり得る。従って、命令が実行され、同命令の結果を含むアネックス５０内のエントリ５５にヤング・ビット５１がセットされ、その後、分岐の予測の間違いが断定される場合がある。推論に基づいて実行された命令に対してヤング・ビット５１をセットすることの大きな問題点としては、同一の宛先アドレスを有するエントリ５４において以前に主張されていたヤング・ビット５１がクリアされる点が挙げられる。誤って予測された分岐からの回復を試みる際、誤って予測された分岐より前に存在していたヤング・ビット５１の以前の値をアネックス５０のエントリ５４内に回復する必要がある。
【００２５】
ヤング・ビット５１の以前の状態を回復する能力の提供は比較的複雑なタスクである。この能力を提供する１つの方法としては、精巧に作成されたポインタ・テーブルを維持することが挙げられる。この場合、各アネックス・エントリ５４は同一の宛先レジスタ・アドレスを共有する次に古いエントリ５４を示すポインタを含む。同一レジスタ・アドレスに対する複数割り当ては、誤って予測された分岐内でも生じ得る。このため、リセットされたヤング・ビット５１を有するアネックス・エントリ５４も宛先アドレスに関する次に古いエントリ５４を表示する必要がある。従って、誤った推論に基づく命令の実行結果でない最新の結果を発見すべく複数のリストのリンクを注意深く検討する必要があり得る。この解決策はその実行に要するハードウェアに大きな出費を要する。
【００２６】
本発明は前述した事情に鑑みてなされたものであって、その目的は、誤って予測された命令の実行前におけるヤング・ビットの状態をアネックスのエントリ内において迅速に回復する安価な装置及び方法を提供することにある。
【００２７】
【課題を解決するための手段】
本発明の第１の態様では、誤って予測された分岐が検出された後、推論に基づく命令の結果を含むアネックス・エントリが無効にされる。エントリの宛先レジスタ・アドレスを最も古いアネックス・エントリから順次、他の全てのエントリに対してブロードキャストする。ブロードキャストされたエントリは他の全てのエントリのアドレスと一斉に比較される。ブロードキャストされたエントリのヤング・ビットをセットする一方で、整合するアドレスを有する全てのアネックス・エントリのヤング・ビットをリセットする。前記のブロードキャスト、比較、リセット及びセットの各オペレーションは残りの全ての有効エントリについて古いエントリから新しいエントリへと順次行われる。全ての有効エントリがブロードキャストされた際、ヤング・ビットの状態は正確に復元されている。この態様は既存のロジックを使用してヤング・ビットをアネックス内に復元する。この結果、本態様はハードウェアに対する更なる出費を必要としない。
【００２８】
本発明の第２の態様では、各アネックス・エントリは１つの現在のヤング・ビット（Ｙ0）及び１つ以上の過去のヤング・ビット（Ｙ1〜ＹN）を含む。最大でＮ個のクロック・サイクルを要する分岐条件の解決では、Ｎ個の過去のヤング・ビット（Ｙ1〜ＹN）が各アネックス・エントリ内に維持される。新たなアネックス・エントリの入力を行う全てのマシン・サイクルにおいて、現在のヤング・ビット（Ｙ0）は第１の過去のヤング・ビット位置（Ｙ1）へシフトされる。
これと同時に、Ｙ1の内容はＹ2内へシフトされる。同様に、０〜Ｎ−１の範囲に属する全てのｋについて、Ｙkの内容はＹk+1内へシフトされる。更に、新たなアネックス・エントリが入力された場合、現在のヤング・ビット（Ｙ0）が更新される。
【００２９】
ｉ個の推論に基づく命令の結果がアネックス内へ入力された後に、誤って予測された分岐が検出された際、Ｙi内の過去のヤング・ビットは各アネックス・エントリ内において現在のヤング・ビットＹ0内に回復される。従って、正しいヤング・ビットの回復は短い一定時間で実施される。
【００３０】
前記の両方の態様は長い待ち時間を有する間違った予測及び短い待ち時間を有する間違った予測の両方からの回復を最適化すべく、同一のプロセッサ内において実現できる。第１の態様は長い待ち時間を有する条件文に更に適する。第２の態様は短い待ち時間を有する条件文に更に適する。好ましい回復方法はプロセッサによって直接的に決定するか、または回復の特性に基づいて統計学的に決定できる。
【００３１】
【発明の実施の形態】
本発明は誤って予測された分岐が検出され、そして推論に基づく命令の結果を無効にすることと、断定された命令が推論に基づいて実行され、同命令の断定結果が同命令を実行すべきでないことを示すことのうちのいずれか一方が生じた後に、ヤング・ビットの以前の値を回復する装置及び方法を提供する。図５はアネックス内におけるデータ構成を示す。アネックス５０をシフト・レジスタとして形成できる。新たに実行された命令の結果はアネックス５０内の最も左側に位置するエントリ５５内へシフトされる。最も右側に位置するエントリ５６内の最も古いエントリは書き戻しステージへシフトされる。各エントリ５４は宛先レジスタ・アドレス５３と、同宛先レジスタ内へ格納すべきデータ５７とを格納する。更に、各エントリ５４はヤング・ビット５１及び有効ビット５２を有する。
【００３２】
有効ビット５２はアネックス・パイプライン５０の末端に位置する書き戻しステージへ到達した際に、データをレジスタ内へ実際に書き込むべきか否かを表示すべく使用される。アネックス・エントリ５４に対して有効ビット５２がセットされた場合、同エントリ５４内のデータ５７は有意義なデータであり、かつアドレス・フィールド５３によって示されたレジスタへ格納される。しかし、有効ビット５２がリセットされた場合、そのエントリ５４内のデータ５７は無効なデータであり、アドレス・フィールド５３によって示されるレジスタへは格納されない。全ての命令がレジスタ内へ書き込むべき結果を形成することはない。しかし、命令実行及び書き戻しの間における所定のインターバルを維持すべく、アネックスのエントリを各サイクルごとに前方へシフトする必要がある。従って、結果を形成しない命令が実行された際、最新のアネックス・エントリには無効が表示される。有効ビット５２は誤って予測された分岐の一部として実行された命令の結果をフラッシュする効果的な方法を提供する。従って、有効ビットの主張の取消しはエントリを無効にする１つの方法である。条件が解決され、命令順序の実行の間違いが判明した場合、これらの命令の結果は同命令に対する有効ビット５２の主張を取消すことにより簡単に無効にできる。
【００３３】
以下のコード・フラグメントにおいて、条件付分岐が生じる。“branch＿0  L4, target ”という命令はレジスタＬ4の内容がゼロでない場合、次に実行する命令がターゲット・アドレスに位置する命令であることを意味する。その一方、レジスタＬ4の内容がゼロである場合、分岐命令後の次の命令の実行を連続的に継続すべきことを示す。
【００３４】
0003699518.tif 000002
プロセッサは条件付分岐命令直後に次の命令をフェッチすると仮定する。更に、これらの命令が推論に基づいて実行されたと仮定する。分岐（branch）を除く全ての命令はレジスタへの数値の割当てを形成する。移動命令（move）はレジスタＬ3に対して第２の割当て及びそれ以降の割当てを形成するため、レジスタＬ3に対する以前の割当てについてヤング・ビット５１の主張が取り消される。アネックス５０内の他の全てのレジスタに対する更に古い割当てが存在しないため、他の全てのヤング・ビット５１が主張される。
【００３５】
レジスタＬ4の内容がゼロでない場合、推論に基づく移動命令及び加算命令（add）の実行をリバース、即ち、無効にする必要がある。この際、アネックス内に位置する最新の２つのエントリについて、その有効ビット５２の主張が最初に取り消される。書き戻しステージがこれらの命令の実行結果に対して作用していないため、同命令の実行結果に対する有効ビット５２の主張を取り消すことにより、同結果をアネックス５０から効果的にフラッシュできる。実行すべき次のタスクとしては、ヤング・ビット５１を推論に基づく命令の実行前の状態へ回復することが挙げられる。プロセッサが５つのエントリを有するアネックス５０を含む場合、アネックスの状態は図６に示すようになる。
宛先レジスタ比較ポートはアネックス内に存在する。命令が機能ユニットによって実行された場合、同命令の宛先レジスタ・アドレスは比較ポートに入力され、さらにはアネックス内の全てのエントリのアドレス・フィールドと比較される。アネックスのアドレス部分が内容検索メモリとして形成されている場合、これらの比較を一斉に実施できる。整合する全てのアネックス・エントリにおいて、ヤング・ビットがリセットされる。命令結果が算出された際、同結果はヤング・ビットがセットされた状態でアネックス内へ入力される。この結果、機能ユニットから新たに形成された特定の宛先レジスタに対する最新のデータのみが、主張されたヤング・ビットを有する。
【００３６】
本発明の第１の実施の形態を使用した場合、誤って予測された分岐の実行後におけるヤング・ビットの状態の回復は、アネックス内にヤング・ビットをセットすべく使用したハードウェアと同一のハードウェアを使用して連続的に実施される。ハードウェア・データパスに対する唯一の大きな変更としては、各アネックス・エントリがアネックス内を通じて比較バスを駆動する能力を有する点が挙げられる。
【００３７】
誤って予測された分岐に対応するアネックスのエントリがその対応する有効ビットの主張を取り消すことによってフラッシュされた後、以前のヤング・ビットの回復が順次実施される。アネックス・パイプラインの末端に位置するエントリはアネックス内における最も古いエントリである。エントリ内のアドレスは最も古いエントリから順次比較バスへ入力され、さらにはアネックス内の他の全てのエントリと比較される。整合する宛先アドレスを有する全てのエントリのヤング・ビットは比較バスを現在駆動しているエントリを除いてクリアされる。バスを駆動するエントリのヤング・ビットが主張される。
【００３８】
最も古いエントリが比較バスを駆動し、さらにはヤング・ビットの状態に作用した後、次に古いエントリが比較バスを駆動し、さらにはヤング・ビットの状態に作用する。このプロセスは全ての有効エントリが比較バスを駆動し終えるまで継続される。最新の有効エントリが比較バスを駆動し、整合する宛先アドレスを有するエントリのヤング・ビットの主張が取り消され、さらには最新の有効エントリのヤング・ビットが主張された後、推論に基づく命令の実行前におけるヤング・ビットの状態が完全に復元される。有効ビットの主張の取り消しによって無効となったエントリは比較バスを駆動しない。これらの無効になったエントリのヤング・ビットは順次行われる復元の影響を受け得る。しかし、これらのエントリは無効であり、ハードウェアは同エントリに実質的に反応しない。このため、復元の影響は問題にならない。
【００３９】
ヤング・ビットの復元は順次行われるため、復元に必要な総時間は残りの有効エントリの増加に伴って長くなる。これはアネックスの修復を正確な命令がフェッチされる間に実施できる点から効果的といえる。アネックスを参照する第１のステージより前に位置するパイプライン・プロセッサ・ステージの総数は、オーバーヘッドを伴うことなく復元可能なヤング・ビットを有する有効エントリの総数を限定する。機能ユニットより前に位置する前記のプロセッサ・ステージの総数がアネックス内の残りの有効エントリの総数以上である場合、ヤング・ビットの復元は、連続的復元における各ステップが完全に１クロック・サイクルを要したとしても、正しい命令がパイプライン・プロセッサ内においてフェッチされ、かつ処理される間に常に起こり得る。誤った予測が検出された後、プロセッサは次のサイクルから正しい命令をフェッチできる。しかし、正しい命令は同命令が前方に位置するパイプライン・ステージを通過し終えるまでは機能ユニットへ到達しない。従って、アネックスは自身のヤング・ビットを復元するための所定の長さの時間を有する。
【００４０】
前記の連続的な復元の１つの結果としては、条件の解決が速いほど、アネックスのヤング・ビットの復元に要する時間が長くなる点が挙げられる。この逆説は条件が迅速に解決された場合、無効となるアネックス・エントリの総数が少なくなり、更に多くの工程をその順序において実施する必要があるとうい事実の結果である。最悪のケースでは、推論に基づく１つの命令が条件の解決前に実行された場合、ヤング・ビットを復元すべく１つを除く他の全てのアネックス・エントリが比較バスを駆動する必要が生じる。逆に、アネックスのほぼ全てのエントリが無効となった推論に基づく命令の結果である場合、最も古い僅かな数のエントリのみが有効であり、さらには順序に含まれる僅かな工程のみを実施すればよい。このため、ヤング・ビットの復元は比較的僅かな時間を要するのみとなる。
【００４１】
図７はヤング・ビットの状態を復元する連続的な方法を示す。開始工程１００は条件が解決され、推論に基づく命令の実行順序が間違っていた場合に開始される。工程１1０において、アネックス内の幾つかの最新のエントリ（最も左側）に含まれる推論に基づいた命令の実行結果は、その有効ビットの主張を取り消すことにより無効になる。工程１２０は全ての有効エントリについて処理が行われたか否かを確定するテストである。残された各有効エントリが自身のアドレスを他の全てのエントリに対してブロードキャストし、ヤング・ビットの状態を更新した後、ヤング・ビットの回復が完了する。図６に示すように、連続的な回復工程はアネックスの最も右側のエントリ（最も古いエントリ）から始まり、最も左側に位置するエントリ（最新のエントリ）へと進行する。第１の無効なエントリは最新の有効エントリより１つ前に位置するエントリである。回復は第１の無効なエントリに到達した際に完了し、完了ステージ１３０へ到達する。
【００４２】
工程１４０において、他の全てのエントリに対して過去にブロードキャストしたことのない最も古い有効エントリの宛先レジスタ・アドレスは、全てのエントリに対してブロードキャストされる。工程１５０では、ブロードキャストされたアドレスに整合する宛先アドレスを有するアネックス・エントリのヤング・ビットの主張の取り消し、即ち、リセットが行われる。そして、ブロードキャストされたアドレスを有するエントリのヤング・ビットの主張、即ちセットが行われる。リセット及びセットの順序は重要な問題ではない。本実施の形態は既存のロジックを使用してヤング・ビットをアネックス内に復元する。従って、ヤング・ビットを回復する装置のコストを低く抑制できる。
【００４３】
パイプライン・プロセッサのアーキテクチャにおいては、アネックス内のエントリの総数が過度に多くなり得る。これに代えて、ヤング・ビットを連続的に復元するための十分な時間を提供すべく過度に少ない数のフロントエンド・パイプライン・ステージ（front-end pipeline stages）を使用し得る。前記の両方のケースにおいて、ヤング・ビットの連続的復元方法は処理の遅延を招来する。このような遅延を回避すべく本発明の第２の実施の形態を使用できる。
【００４４】
本発明の第２の実施の形態は、短い待ち時間で分岐条件が解決される際に、ヤング・ビットの復元を許容する。このような場合、アネックス内において無効にすべき新しいエントリの総数は比較的少ない。この実施の形態は少ない数のクロック・サイクルで解決できる幾つかの分岐条件を含む場合に最も効果的である。図８は本発明の第２の実施の形態に基づくアネックス８０内における情報の構成を示す。ここで、分岐条件は推論に基づく命令の実行が開始された後、Ｎ個のクロック・サイクル内で解決される。
【００４５】
各アネックス・エントリ８１は宛先アドレス・フィールド８２を有する。各有効エントリのデータ・フィールド８３の内容は宛先アドレス・フィールド８２が示す宛先レジスタへ格納される。この格納はアネックス・パイプライン８０の末端において書き戻しステージを使用して行われる。各エントリ内の有効ビット８４は同エントリが有効であるか否かを特定し、さらには同エントリをアネックス・パイプライン８０の末端において、書き戻しステージを使用して宛先レジスタへ実際に格納すべきか否かを特定する。各アネックス・エントリはＹ0で示されたフィールド、即ち現在のヤング・ビット格納位置に現在のヤング・ビット８５を有する。更に、各アネックス・エントリ８１はＹ1で示された前のヤング・ビットのフィールド８６、即ち、過去のヤング・ビット格納位置を有する。第２の実施の形態を使用するシステムのオペレーションをＮが２である場合について以下に詳述する。Ｎ＝２である場合、システムは２つのクロック・サイクルで条件を解決すべく設計されている。この結果、アネックス８０内の各エントリに対して２つの別のビット（Ｙ1及びＹ2）が追加されている。Ｙ1で示されたビット・フィールド８６は直前のクロック・サイクル中におけるヤング・ビットの状態を示す。Ｙ2で示された更に別の過去のヤング・ビット格納位置としてのビット・フィールド８７は２サイクル前に存在したヤング・ビットの状態を示す。
【００４６】
命令の宛先レジスタ・アドレスは同命令を機能ユニットにおいて実行する度に、アネックス・エントリ８０のアドレス・フィールド８２内に格納された全ての宛先レジスタ・アドレスと比較される。Ｙ0ビット位置に格納された以前に存在した“現在のヤング・ビット８５”のうちの１つは、アネックス内に整合、即ちヒットが存在する場合にのみ変化する。このケースでは、宛先レジスタ・アドレスの整合により、アネックス８０内に位置するエントリ８１のＹ0ビットのうちの１つが主張した状態から主張を取り消した状態へと変化した際に、同Ｙ0ビット・フィールド８５の以前の状態が同エントリ８１のＹ1ビット位置へ格納される。現在実行している命令の宛先レジスタ・アドレスとの整合がアネックス内に存在しない場合、Ｙ0ビット８５の状態はＹ1８６内へ格納され、同一の内容がＹ0８５及びＹ1８６内にそれぞれ存在することになる。Ｙ0及びＹ1が同一であるという事実は、推論に基づく実行を無効にする必要があり、さらには同推論に基づいて実行された命令の宛先レジスタ・アドレスの整合が存在しない場合に、アネックス８０内の有効なエントリのヤング・ビットの以前の状態が現在の状態に等しいことに基づく。従って、Ｙ0８５内の数値は各クロック・サイクル毎にＹ1８６内へ格納される。同様に、Ｙ1８６内のヤング・ビットの数値は各クロック・サイクル中にＹ2８７内へ格納される。従って、Ｙ0８５はヤング・ビットの現在の状態を含む。Ｙ1８６は１クロック・サイクル前のヤング・ビットの状態を含む。Ｙ2８７は２クロック・サイクル前のヤング・ビットの状態を含む。
【００４７】
誤って予測された分岐が生じた際、アネックス８０内の幾つかのエントリ８１は無効となり、ヤング・ビット８５の状態の復元が必要になる。次のクロック・サイクルにおいて分岐が解決された場合、アネックス８０内の各エントリ８１において、Ｙ1ヤング・ビット８６はＹ0位置８５内へコピーされる。分岐の解決に２クロック・サイクルを要した場合、Ｙ2ヤング・ビット８７は現在のＹ0ヤング・ビット８５の数値を正確な数値へと復元すべくＹ0ビット位置８５へコピーされる。
【００４８】
この場合、設計の前提条件の１つとしては、条件付分岐を２クロック・サイクル以内で解決し得ることが挙げられる。従って、全ての分岐は最高で２クロック・サイクルで解決されるため、各エントリ８１のヤング・ビット８５を２つ前の状態を越えて格納する必要がない。この例において、分岐解決の待ち時間は最も長い場合でも２サイクルである。この結果、最高で２つのエントリ８１がアネックス８０内において無効になる。
【００４９】
前記の第２の実施の形態の方法は、条件の解決に最大でＮ個のサイクルを要するプロセッサに使用できる。条件の解決に最大でＮ個のサイクルを要する場合、Ｎ個のヤング・ビット・フィールドをアネックス８０の各エントリ８１に対して加える必要がある。推論に基づいて実行されたＮ個の命令をアネックス８０内に既に存在する宛先レジスタ・アドレスにそれぞれ格納可能である。このため、ヤング・ビットの適切な状態を保証すべく各アネックス・エントリ８１内に格納すべき前のヤング・ビット値に関するＮ個からなるディープ・スタック（N-deep stack of previous young bit）を復元に利用できる。従って、各アネックス・エントリ８１は現在のヤング・ビット・フィールドＹ0８５及び前のヤング・ビットＹ1，Ｙ2，…ＹN８８を含み得る。
【００５０】
図９は第２の実施の形態に基づいて、ヤング・ビットを維持及び復元する方法を示す。工程２００はプロセッサが駆動する限り実施される無限ループに対する初期のエントリ・ポイントを示す。工程２１０において、現在のヤング・ビット（Ｙ0）の状態は以前のヤング・ビットＹ1の位置へ格納される。同様に、以前のヤング・ビットＹ1はＹ2位置へシフトされる。同様に、Ｙ2内のビットはＹ3へシフトされる。格納すべきヤング・ビットの最も古い状態がＹNであるため、ＹNをＹN+1へ格納できる。これに代えて、ＹNを放棄してもよい。Ｎサイクル前にエントリを形成した命令が推論に基づいて実行されたとしても、ＹNへ到達するまでには不測の事態が解決されるため、ＹNビットの放棄は問題にはならない。
【００５１】
工程２２０において、新たなエントリが機能ユニットからアネックス・パイプラインへ入力される。工程２３０において、現在のヤング・ビットＹ0が更新される。アネックス内へ入力された直後の最新のエントリはセットされたヤング・ビットを有する。最新のエントリと同一の宛先レジスタ・アドレスを有するエントリのヤング・ビットはリセットされる。
【００５２】
工程２４０において、誤って予測された分岐に直面したか否かを確認すべくテストが実施される。誤って予測された分岐が検出されなかった場合、処理は工程２１０へ戻る。誤って予測された分岐が発生した場合、処理の流れは工程２５０へと進行する。ここにおいて、ｉは推論に基づいて実行された命令の結果であるアネックス内のエントリの総数を示す。全ての命令がアネックス・エントリ内に結果を生じる場合、解決されたばかりの条件付分岐がｉクロック・サイクル前に存在したことを示す。推論に基づいて実行されたｉ個の命令は自身の有効ビットをリセットすることにより無効にできる。工程２６０において、正しいヤング・ビットはアネックス内の各エントリについて、ヤング・ビットを位置ＹiからＹ0位置へコピーすることによって回復される。次いで、処理は工程２１０へ戻る。
【００５３】
任意のアーキテクチャにおいて、第２の実施の形態を使用したヤング・ビットの復元は無効となった推論に基づいて実行された命令の結果の総数とは無関係に一定時間を要する。更に、最も重要なオペレーションはビット値を位置ＹiからＹ0へ移動することであるため、この一定時間は短い。この結果、ヤング・ビットの回復を迅速に行い得る。
【００５４】
全ての条件が１クロック・サイクルで解決される極端なケースでは、各エントリに対して現在のヤング・ビットＹ0以外に１つのヤング・ビットＹ1のみを追加すればよい。この例としては、条件付移動等の断定された命令（Predicated instruction）が挙げられる。断定された命令はマシーン内の或る既存の状態に基づいて条件付きで実行される。例えば、これは特定の条件コードがプロセッサ内の幾つかの特別なステータス・レジスタ内に存在する場合にのみ実行され得る。この場合、独立した分岐命令が命令の流れの中に存在することはないが、各命令に包含された条件が存在する。
【００５５】
分岐の解決に要する時間及び命令の順序の性質が更に詳細に把握されているケースでは、別の最適化が可能である。例えば、分岐の解決に必要なサイクル数が全ての条件についてそれぞれ正確に把握され、さらには同分岐の解決中に別の分岐が機能ユニットによって処理されない場合、別のヤング・ビットのセットを各アネックス・エントリに対して１セットだけ提供すればよい。現在のヤング・ビットの状態を前のヤング・ビット位置へコピーすることは、推論に基づく結果がアネックス内へ入力される直前においてのみ起こり得る。別の例として、条件の解決中に生じ得る宛先アドレスの整合（ヤング・ビットの現在の状態に作用する命令についての整合）の最大数が条件の解決に必要なサイクル数より少ない場合、各アネックス・エントリ内に格納のために提供する余分なヤング・ビットの総数は僅かにより複雑な制御ロジックを使用して削減し得る。
【００５６】
前記の両方の実施の形態を一般的なプロセッサ・アーキテクチャにおいて同時に実施することが効果的な場合がある。第１の実施の形態の連続的な方法は、条件解決の待ち時間が更に長く、これにより更に多くの無効エントリ及び更に少ない残された有効エントリが存在する場合に迅速な処理を可能にする。補足的なヤング・ビットを使用する第２の実施の形態は、条件解決の待ち時間が更に短く、これにより更に少ない無効エントリ及び更に多い有効エントリが存在する場合に最も効果的である。解決に短い時間を要する誤って予測された分岐と、解決に長い時間を要する誤って予測された分岐とからの回復をプロセッサの処理速度の低下、またはハードウェアのコストの大きな増加を伴うことなく処理すべく、同一のアネックス構造内において前記の２つの実施の形態を選択的に使用できる。第１の実施の形態の連続的な方法は解決に長い時間を要する誤って予測された分岐に使用でき、第２の実施の形態の補足的なヤング・ビットを使用する方法は解決に短い時間を要する誤って予測された分岐に使用できる。ここに使用する回復メカニズムは分岐の種類または予測された命令に基づいてダイナミックに制御するか、または回復の特性に基づいて統計的に制御できる。
【００５７】
本発明の方法及び装置を現時点における好ましく、かつ異なる実施の形態に基づいて詳述したが、当業者は本発明を請求項に開示する精神及び範囲の中で変更できることを認識し得る。従って、本明細書及び図面は本発明の例示を目的としており、本発明の限定を目的とはしない。
【００５８】
【発明の効果】
以上詳述したように、本発明によれば、アネックスのエントリ内において誤って予測された命令の実行前におけるヤング・ビットの状態を迅速に回復可能であり、さらには同回復に使用する装置のコストを低く抑制できるという優れた効果を発揮する。
【図面の簡単な説明】
【図１】一般的なスーパースカラ・プロセッサ・アーキテクチャを示すブロック図。
【図２】一方の機能ユニットが他方の機能ユニットより短い待ち時間を有するプロセッサにおける２つのスカラの実行を示すブロック図。
【図３】アネックス内の各エントリの内容に対するアクセスを有する機能ユニットを提供する従来のアーキテクチャを示すブロック図。
【図４】アネックス内の各エントリの内容に対するアクセスを有する機能ユニットを提供する別の従来のアーキテクチャを示すブロック図。
【図５】８個のエントリを有するアネックス内におけるデータの構成を示す図。
【図６】誤って予測された分岐が検出された際のアネックスの状態を示す図。
【図７】本発明の第１の実施の形態を実現する工程を示す流れ図。
【図８】本発明の第２の実施の形態に基づいてＮ個のヤング・ビット状態を格納する８個のエントリを有するアネックス内におけるデータの構成を示す図。
【図９】本発明の第２の実施の形態を実現する工程の流れ図。
【符号の説明】
５０，８０…アネックス、５１，８５，８６，８７，８８…ヤング・ビット・フィールド、５２，８４…有効ビット・フィールド、５３，８２…宛先レジスタ・アドレス・フィールド、５４，８１…エントリ、５５…最新のエントリ、５６…最も古いエントリ、５７，８３…データ・フィールド。
【図１】
0003699518.tif 000003
【図２】
0003699518.tif 000004
【図３】
0003699518.tif 000005
【図４】
0003699518.tif 000006
【図５】
0003699518.tif 000007
【図６】
0003699518.tif 000008
【図７】
0003699518.tif 000009
【図８】
0003699518.tif 000010
【図９】
0003699518.tif 000011