【文献】
山本 浩暉,"キャッシュライン中の分岐命令数に着目したBTBの消費エネルギー削減 Energy Reduction of BTB by focusing on Number of Branches per Cache Line DC2014−88−DC2014−109 ディペンダブルコンピューティング,電子情報通信学会技術研究報告,一般社団法人電子情報通信学会,2015年 2月27日,第114巻,第507号,pp.89-94
(58)【調査した分野】(Int.Cl.,DB名)
さらに、前記ブロックアドレスに応答して、前記第一バイトオフセットと前記第二バイトオフセットを提供する分岐宛先アドレスキャッシュ(BTAC)を有することを特徴とする請求項1に記載の分岐予測器。
さらに、前記BTACが、前記ブロックアドレスに応答して、さらに、前記第一バイトオフセットと前記第二バイトオフセットに対応する第一分岐宛先アドレス予測と第二分岐宛先アドレス予測を提供し、
当該分岐予測器は、静的に、前記条件付き分岐予測器により提供される前記第一方向予測と前記BTACにより提供される前記第一分岐宛先アドレス予測を関連付けるとともに、静的に、前記条件付き分岐予測器により提供される前記第二方向予測と前記BTACにより提供される前記第二分岐宛先アドレス予測を関連付けることを特徴とする請求項2に記載の分岐予測器。
さらに、前記条件付き分岐予測器が、前記プロセッサにより実行される条件付き分岐命令の正確に分離されたアドレスを用いて更新されることを特徴とする請求項2に記載の分岐予測器。
さらに、同じクロック周期中、前記BTACは前記ブロックアドレスによりアクセスされ、前記条件付き分岐予測器は前記第一インデックスと前記第二インデックスによりアクセスされることを特徴とする請求項1に記載の分岐予測器。
さらに、前記条件付き分岐予測器は、前記ハッシングロジックにより生成される前記第一インデックスと前記第二インデックスのひとつを用いて更新されることを特徴とする請求項1に記載の分岐予測器。
さらに、前記条件付き分岐予測器は、それぞれ、前記第一インデックスと前記第二インデックスを受信し、それぞれ、前記第一方向予測と前記第二方向予測を提供する第一ポートと第二ポートを有するメモリを有することを特徴とする請求項1に記載の分岐予測器。
さらに、前記条件付き分岐予測器は複数のメモリを有し、前記複数のメモリの各メモリは、第一インデックスと第二インデックスのそれぞれのペアを受信し、それぞれ、第一方向予測と第二方向予測を提供する第一ポートと第二ポートを有し、
前記ハッシングロジックは、異なる長さの前記分岐パターンと、前記ブロックアドレスと前記第一バイトオフセットおよび前記第二バイトオフセットから形成される前記第一アドレスおよび前記第二アドレスと、をハッシュして、前記複数のメモリのそれぞれに、前記第一インデックスおよび前記第二インデックスを生成することを特徴とする請求項8に記載の分岐予測器。
さらに、前記ハッシングロジックは組み合わせロジックを有し、前記組み合わせロジックは、前記ブロックアドレス、前記分岐パターン、前記第一バイトオフセット、および前記第二バイトオフセットを受信するとともに、それに応じて、前記第一インデックスと前記第二インデックスを生成することを特徴とする請求項1に記載の分岐予測器。
さらに、前記BTACにより、前記ブロックアドレスに応じて、前記第一バイトオフセットと前記第二バイトオフセットに対応する第一分岐宛先アドレス予測と第二分岐宛先アドレス予測を提供する工程、および、
静的に、前記条件付き分岐予測器により提供される前記第一方向予測と前記BTACにより提供される前記第一分岐宛先アドレス予測を関連付け、静的に、前記条件付き分岐予測器により提供される前記第二方向予測と前記BTACにより提供される前記第二分岐宛先アドレス予測を関連付ける工程と、
を有することを特徴とする請求項11に記載の方法。
【発明を実施するための形態】
【0008】
二つ以上のエンティティ、たとえば、アドレスと分岐パターンをハッシュすることは、二個以上のエンティティのそれぞれの一つ以上のビットで、一つ以上の演算および/または論理演算を実行して、二個以上のエンティティの最大のエンティティのビット数より小さいビット数を有するという結果を生成することを意味する。一つ以上の演算および/または論理演算は、これに限定されないが:エンティティの所定ビットの選択;排他的OR(XOR)、NAND、AND、OR、NOT、回転、シフトを含むブーリアン論理演算;および、加減乗除、モジュロを含む演算操作を含む。例により説明するため、100ビットの分岐パターン、32ビットのアドレス、且つ、結果が10ビットインデックスであると仮定する。アドレス、および、分岐パターンのハッシュは、XORing(排他的OR)ビット[9:0]と分岐パターンのビット[19:10]および分岐命令アドレスのビット[9:0]を含む。
【0009】
実施態様は、従来の分岐予測器よりさらに正確な表現の条件付き分岐命令のアドレスをハッシュして、インデックスを分岐予測器の条件付き分岐予測器部分に生成することにより、潜在的に、条件付き分岐予測方向の正確さを増加する分岐予測器を記述する。
【0010】
図1は、分岐予測器100を有するプロセッサ103のブロック図である。プロセッサ103は、フェッチユニット101、命令キャッシュ102、および、分岐予測器100(あるいは、分岐予測ユニット100)を有する。分岐予測器100は、分岐パターン104、ハッシングロジック106、分岐宛先アドレスキャッシュ(BTAC)108、条件付き分岐予測器112、および、制御論理部114を有する。
【0011】
フェッチユニット101は、命令キャッシュ102、BTAC108、および、ハッシングロジック106に提供されるブロックアドレス122を生成する。命令キャッシュ102は、ブロックアドレス122に対応するアーキテクチャ命令バイト124のブロックを提供する。一実施態様において、別の実施態様が検討されてもよいが、命令バイトブロック124は16バイトを含む。命令バイトブロック124は、以下で詳細に討論されるように、複数のアーキテクチャ分岐命令を有する。制御論理部114は、宛先アドレス128(あるいは、最終結果128)を、フェッチユニット101に提供する場合、フェッチユニット101は、宛先アドレス128に基づいて、ブロックアドレス122を更新して、不連続のプログラム位置からフェッチし、これは、出力先変更と称される。そうでなければ、出力先変更が宛先アドレス128に欠けている状況下で、命令キャッシュ102から命令バイトブロック124をフェッチした後、フェッチユニット101はブロックアドレス122をインクリメントする。命令バイトブロック124は、プロセッサ103からパイプラインに提供される。
【0012】
好ましくは、命令バイトブロック124は、命令キュー(図示しない)により受信される。命令バイトは、キューから、命令変換装置(図示しない)に提供され、命令変換装置は、命令バイトブロック(アーキテクチャ命令バイト)124を、実行パイプライン(図示しない)に提供されるマイクロ命令に変換して実行する。キューバッファの複数のブロック124は、命令変換装置へ提供される。キューバッファ中に、命令変換装置に出力される命令を有し、実行パイプラインに提供される限り、プロセッサは、実行パイプラインを効果的に利用する。よって、分岐予測器100の目的は、命令キューが近くなるのを防止して、命令変換装置が十分な命令を有さずに変換して、実行パイプラインの良好な利用を維持することにある。
【0013】
一実施態様において、実行パイプラインは、一つ以上のアーキテクチャレジスタファイル、レジスタリネームユニット、リコーダバッファ、予約ステーション、複数の実行ユニット、および、マイクロ命令のイシューを実行ユニットにスケジュールするスケジューラーを含むスーパースカラーアウトオブオーダー実行パイプラインである。実行ユニットは、一つ以上の以下の実行ユニットタイプ:整数ユニット、浮動小数点ユニット、媒体ユニット、単一命令マルチデータ(SIMD)ユニット、分岐実行ユニット、ロードユニット、および、保存ユニットを含む。好ましくは、プロセッサ103は、さらに、メモリ順序バッファ、トランスレーションルックアサイドバッファ、テーブルウォークエンジン、キャッシュメモリ階層、および、各種要求キュー、たとえば、一つ以上のロードキュー、保存キュー、充填(fill)キューおよび/またはスヌープキューを含むメモリサブシステムを有する。
【0014】
フェッチされた命令バイトブロック124中で、分岐命令の存在、方向、および、宛先アドレスを予測する目的のため、BTAC108は、前もって実行される分岐命令についての分岐履歴情報をキャッシュする。BTAC108は、エントリーの一つ以上のメモリアレイを有する。好ましくは、以下で詳細に記述されるように、一つ以上のメモリアレイは、複数の方向の関連する多サイドの結合キャッシュとして設置される。各エントリーは、分岐命令に関連する分岐履歴情報を保留する。一実施態様において、BTAC108中の各エントリーは以下の領域、すなわち有効ビット、タグ、分岐型、バイトオフセット、ラップビット、および、宛先アドレスを含む。
【0015】
分岐命令の方向は、分岐が受け入れられるか否かである。つまり、分岐命令が受け入れられない場合、プログラムは順序通り、すなわち、次の命令に進み、受け入れられない分岐命令のアドレス後のアドレスで、順序通り分岐命令に従う。しかし、分岐命令が受け入れられる場合、分岐命令は、プロセッサ103に指示して、通常の逐次プログラムフローを続行するのではなく、プログラムフローを宛先アドレスに転換する。無条件分岐命令の状況下、たとえば、呼び出し、リターンあるいは無条件ジャンプ命令の場合、方向は常に受け入れられる。条件付き分岐命令において、条件付き分岐命令により指定される条件が符合する場合、方向は受け入れられ;そうでなければ、条件付き分岐命令の方向は受け入れられない。条件は、通常、プロセッサのいくつかのアーキテクチャ状態、たとえば、アーキテクチャ条件フラグが基準、たとえば、大きい、小さい、等しい、負の、正の、繰り上げ、ゼロ、オーバーフロー等を満たすかどうかである。
【0016】
宛先アドレスは、各種方式で指定される。復帰命令の場合において、宛先アドレス(あるいは、復帰アドレス)は、通常、復帰アドレスが、前もって実行される呼び出し命令に対応して、前もってプッシュされるスタックをポップする。通常、復帰アドレスは、呼出し命令後の次の逐次命令である。宛先アドレスは、さらに、分岐命令自身のアドレスに関連するサインオフセットとして指定される。宛先アドレスは、さらに、通常、間接分岐命令と称される分岐命令により指定されるアーキテクチャレジスタ中で保持される。
【0017】
有効ビットは、エントリーが有効であるかどうか示す。分岐命令が、実行パイプラインにより実行されて、実行される分岐命令についての関連情報を分岐予測器100に伝えるとき、分岐予測器100は、分岐命令のエントリーが、すでに、BTAC108中に存在するかどうか判断する。そうでない場合、分岐予測器100は、BTAC108中のエントリーを分岐命令に割り当てるとともに、有効ビットを設定して、割り当てられたエントリーの各種領域に追加する。対照的に、BTAC108のエントリーが、命令バイトブロック124中で、分岐命令の存在を予測するとともに、実行パイプラインが、分岐命令がもはや命令バイトブロック124にないと判断する場合、分岐予測器100はエントリーを無効にする。これは、オペレーティングシステムが命令バイトブロック124に対応するメモリ位置に新しいプログラムをロードした、あるいは、自己書き換えコードが実行されたことで、発生し得る。一旦、分岐命令の有効なエントリーがBTAC108中に存在すると、BTAC108は、その後フェッチされる命令バイトブロック124中で、分岐命令の存在に関連する予測を行い、同様に、フェッチされた分岐命令の方向、および、宛先アドレスの予測を行う。しかし、以下で詳細に記述されるように、BTAC108ではなく、条件付き分岐予測器112が頻繁に用いられて、条件付き分岐命令の方向を予測する。
【0018】
タグ領域は、分岐命令のアドレスの上位ビットを保留する。ブロックアドレス122の下位ビットが、BTAC108中のインデックスに用いられて、一組のエントリーを選択する。ブロックアドレス122の上位ビットが、選択されたセット中のエントリーのタグと比較される。以下で詳細に記述されるように、有効なエントリーのタグが、ブロックアドレス122のタグビットに適合する場合、BTAC108は、適合エントリーのヒットを示すとともに、ヒット分岐命令の予測方向、宛先アドレス、および、バイトオフセットを提供する。
【0019】
分岐型は、分岐命令、たとえば、呼び出し(たとえば、x86呼び出し命令)、リターン(たとえば、x86RET命令)、無条件ジャンプ(たとえば、x86JMP命令)、および、条件付きジャンプ(たとえば、x86Jcc命令)のタイプを示す。一実施態様において、エントリーは、さらに、バイアスビット、および、フォース(force)バイアスビット(図示しない)を有し、分岐型領域で符号化される。実行パイプラインが、初めて、分岐命令を実行するとき、フォースバイアスビットが設定され、バイアスビットは、第一実行で正確に分離された方向が追加される。分岐命令、つまり、分岐命令予測情報を保留するエントリー中のヒットを含む命令バイトブロック124の後続のフェッチにおいて、フォースバイアスビットが設定される場合、BTAC108は、バイアスビットで定められる方向を予測する。初めて、バイアスビットが、不正確に、分岐命令の方向を予測するとき、フォースバイアスビットが消去される。好ましくは、各BTAC108エントリーは、さらに、方向予測を行うのに用いられる別の領域を有する。一実施態様において、各エントリーは、分岐が受け入れられるたびに加算し、分岐が受け入れられないたびに減算する2ビット飽和アップダウンカウンターを有する。カウンターの上位ビットが設定される場合、BTAC108は、分岐命令が受け入れられると予測し;そうでなければ、BTAC108は受け入れられないと予測する。
【0020】
バイトオフセットは、命令バイトブロック124中の分岐命令の位置を指定する。好ましくは、バイトオフセットは、命令バイトブロック124中の分岐命令の第一バイトの位置を指定する。一実施態様において、アーキテクチャ命令の長さは可変であり、且つ、特に、分岐命令は、異なる長さ、たとえば、x86命令セットアーキテクチャである。可変長さ命令セットアーキテクチャの場合においては、分岐命令は、開始の命令バイトブロック124を越えて、次の逐次命令バイトブロック124で終了する。このような状況下で、ラップビットは分岐命令のエントリーにある。
【0021】
制御論理部114は、ヒット分岐命令のバイトオフセットを用いて、命令バイトブロック124中で、最初に見える、受け入れられる分岐命令(ある場合)を決定する。“最初に”というのは、プログラム順序の最初のことを意味する。“見える”というのは、現在のアーキテクチャ命令ポインター値が見えない前の分岐命令の事実のことである。よって、たとえば、出力先変更が、間もなくフェッチされる命令バイトブロック124内のバイトオフセット7を有する分岐ターゲット128に受け入れられる場合、BTAC108予測がフェッチされる命令バイトブロック124中に存在する任意の分岐命令が見られず、つまり、それらの予測が受け入れられても、それらは考慮されず、それらは、リダイレクトされるアドレス128で、命令の新しいスレッド中に出現しないからである。以下で詳細に記述されるように、
図1の実施態様のハッシングロジック106は、有利に、BTAC108により予測される分岐命令のバイトオフセットを用いて、さらに正確なインデックスを条件付き分岐予測器112中に生成して、潜在的に、条件付き分岐予測器112の正確さを改善する。
【0022】
宛先アドレスは、その実行履歴に基づいた分岐命令の宛先アドレスの予測である。好ましくは、実行パイプラインが分岐命令を実行するとき、分岐予測器100は、正確に分離された宛先アドレスで、分岐命令のBTAC108エントリーを更新する。一実施態様において、分岐予測器100は、さらに、呼び出し/復帰スタック(図示しない)を有し、復帰命令の復帰アドレスを予測し、BTAC108が、分岐命令の分岐型が復帰命令であることを示す場合、制御論理部114は、BTAC108ではなく、呼び出し/復帰スタックにより提供される復帰アドレスを選択する。
【0023】
好ましくは、BTAC108は、Aサイド、および、Bサイドと称される二個の“サイド”として設置される。命令キャッシュ102からフェッチされる所定の命令バイトブロック124において、BTAC108の各サイドは、多くても、単一ヒット宛先アドレス/バイトオフセットペアだけを提供する。これは、命令キャッシュ102からフェッチされる命令バイトブロック124の所定ブロックにおいて、BTAC108を更新するロジックは、BTAC108の一サイド中の多くても一つのエントリーを許可し、すなわち、BTAC108は、ロジックを更新して、命令バイトのフェッチされたブロック中の単一の分岐命令だけに、各サイド中の一エントリーを有させるからである。故に、BTAC108の一サイドは結合性を有する、すなわち、複数の方向を有するが、更新ロジックは、そのサイドの複数の方向の一方向だけに、フェッチされた命令バイトブロック124中の分岐命令の有効なエントリーを有させる。一実施態様において、BTAC108は二サイドを有し、二サイドのそれぞれは、二方向で、それ自身のメモリアレイを有する。別の実施態様において、BTAC108は、四方向で、単一のメモリアレイを有し、且つ、二方向は一方のサイドにグループ化され、別の二方向は、別のサイドにグループ分けされる。同様に、条件付き分岐予測器112は、さらに、その一つ以上のメモリアレイ中で結合性を有し、命令キャッシュ102からフェッチされる命令バイトブロック124の所定ブロックにおいて、条件付き分岐予測器112は、サイドごとに、多くてもひとつの単一ヒット方向予測を提供する。これは、命令キャッシュ102からフェッチされる命令バイトの所定ブロックにおいて、条件付き分岐予測器112がロジックを更新し、条件付き分岐予測器112の一サイド中で、多くても一エントリーだけを許可し、つまり、条件付き分岐予測器112がロジックを更新して、命令バイトフェッチされたブロック中の単一の分岐命令だけに、各サイド中のエントリーを有させるからである。
【0024】
ブロックアドレス122に応じて、BTAC108は、ヒットインジケーター132、Aサイド宛先アドレス144、および、Bサイド宛先アドレス146(まとめて、宛先アドレス144/146と称する)、および、Aサイドバイトオフセット154、および、Bサイドバイトオフセット156(まとめて、バイトオフセット154/156と称する)を出力し、すべてが、制御論理部114に提供される。好ましくは、ヒットインジケーター132は、BTAC108中のどの方向が、タグが、ブロックアドレス122のタグ部分に適合する選択された有効なエントリーを有するか示す。図示しないが、好ましくは、BTAC108は、さらに、制御論理部114に各サイドの方向予測を提供する。
図1の実施態様において、さらに、有利に、バイトオフセット154/156は、ハッシングロジック106に提供される。
【0025】
ブロックアドレス122、および、バイトオフセット154/156に加え、ハッシングロジック106は、分岐経路履歴104とも称される分岐パターン104を受信する。分岐パターン104がNビットであると仮定し、分岐パターン104は、プログラム順序で、最後のN分岐命令のそれぞれの方向のグローバル履歴である。一実施態様において、対応する分岐命令が受け入れられる場合、分岐パターン104のビットが設定され、分岐命令が受け入れられない場合、分岐パターン104のビットがクリアされる。一実施態様において、Nは100である。以下で示されるように、分岐パターン104は、分岐命令のアドレス(あるいは、
図3と
図4に関連して記述される実施態様に似ている)でハッシュされ、条件付き分岐予測器112中のインデックスを得て、問題視されている分岐命令の履歴だけでなく、周囲のその他の分岐命令のグローバル履歴を組み込んで、分岐命令の結果を予測する正確さを増加する。
【0026】
一実施態様において、分岐パターン104は、分岐命令が回収されるたびに正しい方向で更新される。別の実施態様において、予測方向が推論であるにしても、分岐命令が予測されるたびに、分岐パターン104が予測方向で更新される。前の実施態様は、回収された分岐命令の情報だけを含み、予測されているが、実際には回収されていない分岐命令の情報を有さない事実に関してさらに正確であるという長所を有する。前の実施態様の欠点は、分岐命令Xのインスタンスが命令キャッシュ102からフェッチされるときと分岐命令Xのインスタンスが回収されるときの間に、数十のオーダーのクロック周期があることであり;それ故に、分岐命令Xのインスタンスがフェッチされた後、および、分岐命令Xのインスタンスが回収される前にフェッチされる分岐命令に行われる任意の予測は、分岐命令Xのインスタンスの方向を含むグローバル分岐履歴に役立たない。分岐パターン104中に含まれるいくつかの分岐命令が実際は回収されない欠点があるが、対照的に、後者の実施態様は、全N個の前の分岐命令を含むグローバル分岐パターン104を用いて、分岐命令に予測を行う長所を有する。
【0027】
ハッシングロジック106は、ブロックアドレス122、バイトオフセット154/156、および、分岐パターン104を受信するとともに、それらをハッシュして、第一(Aサイド)インデックス164、および、第二(Bサイド)インデックス166を生成する。さらに、特に、好ましくは、ハッシングロジック106は、Aサイドバイトオフセット154とブロックアドレス122を結び付けて、命令バイトブロック124中で、第一条件付き分岐命令のメモリアドレスを形成し、分岐パターン104、および、第一条件付き分岐命令のアドレスをハッシュして、第一インデックス164を生成する。同様に、ハッシングロジック106は、Bサイドバイトオフセット156とブロックアドレス122を連結させて、命令バイトブロック124中で、第二条件付き分岐命令のメモリアドレスを形成し、分岐パターン104、および、第二条件付き分岐命令のアドレスをハッシュして、第二インデックス166を生成する。インデックス164/166が条件付き分岐予測器112に提供される。好ましくは、ハッシングロジック106は、合成された組み合わせロジックを有する。条件付き分岐予測器112の記述後に、ハッシングが以下で詳細に記述される。
【0028】
条件付き分岐予測器112は、ハッシングロジック106から、インデックス154/156を受信し、フェッチユニット101からブロックアドレス122を受信するとともに、それに応じて、ヒットインジケーター172、Aサイド方向予測174、および、Bサイド方向予測176を生成する。条件付き分岐予測器112は、情報を保持する少なくとも一つのメモリアレイを有して、条件付き分岐命令の方向予測を行う。一実施態様において、BTAC108のように、条件付き分岐予測器112は、AサイドとBサイドの二サイドに配置される。好ましくは、条件付き分岐予測器112中の各エントリーは、方向予測ビットを含む。一実施態様において、方向予測ビットは、条件付き分岐命令が受け入れられるごとに増え、条件付き分岐命令が受け入れられないごとに減る飽和アップダウンカウンター(たとえば、3ビット)の最上位ビットである。別の実施態様において、方向予測ビットは、条件付き分岐予測器112が、条件付き分岐命令の方向を正確に予測されるかに基づいて、状態機械(state machine)に従って更新される一値(たとえば、3ビット)の最上位ビットである。
【0029】
好ましくは、条件付き分岐予測器112メモリアレイは、Aサイドインデックス/Bサイドインデックス164/166を受信し、それに応じて、Aサイド方向予測/Bサイド方向予測174/176を提供する二ポート、一つはAサイド、一つはBサイドを有するデュアルポートメモリアレイである。一実施態様において、条件付き分岐予測器112の各エントリーはタグを有する。インデックス164/166により選択されるエントリーの組の各エントリーのタグは、ブロックアドレス122のタグの一部と比較されて、有効なエントリーヒットが発生するか判断する。一実施態様において、分岐命令アドレスの上位ビットを簡単にするのではなく、各タグは、分岐命令アドレスの上位ビットを有する分岐履歴パターンのハッシングビットにより生成される一値である。各サイドからのヒットエントリーの方向予測ビットは、ヒットインジケーター172とともに、制御論理部114に提供される個別の方向予測174/176として提供される。
【0030】
一実施態様において、条件付き分岐予測器112は、テーブルとも称される複数のメモリアレイを有し、各サイドに対応する複数の方向予測を生成し、且つ、各サイドに対し、複数の方向予測の一つだけが方向予測174/176として選択される。このような実施態様において、ハッシングロジック106は、複数のペアのインデックス164/166を生成するとともに、それらを、条件付き分岐予測器112に提供する。たとえば、条件付き分岐予測器112が5テーブルを有する場合、ハッシングロジック106は、インデックス164/166の5ペアを、条件付き分岐予測器112に提供する。
【0031】
一実施態様において、条件付き分岐予測器112はTAGE(tagged geometric length)予測器である。TAGE予測器の実施態様において、複数のテーブルのそれぞれは、単一デュアルポートスタティックRAM(SRAM)である。このほか、テーブル中の各エントリーは、ブロックアドレス122のタグ部分と比較されるタグを含む。さらに、各テーブルは、ハッシングロジック106により生成されるインデックス164/166のそれ自身の明確なペアにより索引を付けられ、インデックスは、異なる長さの分岐パターン104を用いて生成される。さらに、特に、TAGE予測器の基本テーブルは、ブロックアドレス122とバイトオフセット154/156の連結により形成される条件付き分岐命令アドレスの下位ビットだけに索引を付けられ、すなわち、分岐パターン104によりハッシュされない。その一方、別のテーブルは、ハッシングロジック106から、それらのインデックスペア164/166を受信し、且つ、各テーブルのインデックスペア164/166は、その他のテーブルと異なるビット数の分岐パターン104を用いてハッシュされている。つまり、複数のテーブルのそれぞれにとって、ハッシングロジック106は、各条件付き分岐命令アドレスペアにより、最も近いビットの異なる数量のビットの分岐パターン104をハッシュして、異なるテーブルの異なるインデックス164/166を生成する。たとえば、各テーブルのインデックス164/166が10ビット、分岐パターン104が100ビットであると仮定する。第一テーブルにおいて、ハッシングロジック106は、分岐命令アドレスのビット[9:0]とともに、分岐パターン104のビット[9:0]で、ブーリアン排他的OR(XOR)演算を実行し;第二テーブルにおいて、ハッシングロジック106は、分岐パターン104のビット[19:10]と分岐命令アドレスのビット[9:0]とともに、分岐パターン104のビット[9:0]のXORを実行し;第三テーブルにおいて、ハッシングロジック106は、分岐パターン104のビット[19:10]、分岐パターン104のビット[29:20]、分岐パターン104のビット[39:30]、および、分岐命令アドレスのビット[9:0]とともに、分岐パターン104のビット[9:0]のXORを実行し、以下同様である。この実施態様は例示的目的で記述されており、その他の実施態様は、その他の演算方法を使用することができ、ハッシングロジック106は、分岐パターンおよび/または分岐命令アドレスの異なる組のビットを用いるとともに、XOR以外のその他の演算および/または論理演算を実行する。
【0032】
制御論理部114は、BTACヒットインジケーター132、宛先アドレス154/156、バイトオフセット154/156、条件付き分岐予測器ヒットインジケーター172、および、方向予測174/176を受け入れるとともに、プログラム順序で、命令バイトブロック124中で、最初に有効、見える、受け入れられる分岐命令(ある場合)を決定する。このような分岐命令が見つかる場合、制御論理部114はフェッチユニット101に通知して、プログラムフローを制御論理部114により生成される最終結果128にリダイレクトし;そうでなければ、フェッチユニット101は、次の逐次ブロックアドレス122から、命令バイトブロック124をフェッチする。
【0033】
図2は、
図1の分岐予測器100の操作を説明するフローチャートである。
図2は、下向きの時間推移を示すと共に、水平に互いに平行なブロックで実行される動作が実質的に同時に並行して発生することを説明する。工程はブロック202から始まる。
【0034】
ブロック202において、フェッチユニット101は、ブロックアドレス122を生成するとともに、それを、
図1の命令キャッシュ102、BTAC108、および、ハッシングロジック106に提供する。工程は、ブロック204と206に平行に進む。
【0035】
ブロック204においては、命令キャッシュ102は、命令バイトブロック124を出力する。その他の実施態様が検討されてもよいが、一実施態様において、命令キャッシュ102は、ブロックアドレス122がアサートされる時から、命令キャッシュ102が命令バイトブロック124を提供するまで、3クロック周期のレイテンシーを有する。工程は、ブロック208に進む。
【0036】
ブロック206において、BTAC108は、予測される宛先アドレス144/146、バイトオフセット154/156、および、ヒットインジケーター132を、各サイド、つまり、AサイドとBサイドに出力する。その他の実施態様が検討されてもよいが、一実施態様において、BTAC108は、ブロックアドレス122がアサートされる時間から、BTAC108がその出力を提供するまで、3クロック周期のレイテンシーを有する。工程は、ブロック208に進む。
【0037】
ブロック208においては、ハッシングロジック106は、分岐パターン104により、ブロックアドレス122、および、バイトオフセット154/156から形成される二個の分岐命令アドレスのそれぞれをハッシュして、AサイドとBサイドのインデックス164/166を生成する。工程は、ブロック212に進む。
【0038】
ブロック212において、条件付き分岐予測器112はインデックス164/166を受信するとともに、それに応じて、AサイドとBサイドの方向予測174/176、および、ヒットインジケーター172を生成する。工程は、ブロック214に進む。
【0039】
ブロック214において、制御論理部114は、その入力から、BTAC108と条件付き分岐予測器112が、一緒に、命令バイトブロック124中に存在する有効、見える、受け入れられる分岐命令を予測するかどうか判断する。その場合、制御論理部114は最終結果128を出力し、最初の有効、見える、受け入れられる分岐命令を有するサイドの宛先アドレス144/146が、フェッチユニット101に提供されて、プログラムの流れを、選択された宛先アドレス144/146にリダイレクトする。工程は、ブロック214で終了する。
【0040】
図1の分岐予測器100の長所を理解するため、従来の分岐予測器300が
図3に関連して説明される。
図3の従来の分岐予測器300は
図1の分岐予測器100に類似する。しかし、
図3のハッシングロジック306は、BTAC108からバイトオフセット154/156を受信せず、且つ、それらを用いて、各条件付き分岐命令のアドレスを形成しない。それどころか、
図3のハッシングロジック306は、分岐パターン104と、ブロックアドレス122のハッシュ値を計算して、二個の分離したAサイドとBサイドの条件付き分岐予測器312Aと312B両方に提供される単一インデックス364を生成する。さらに特に、各サイドは、分離したメモリアレイを有し、従来の分岐予測器300は、予測情報がBTAC108のAサイド中に存在する条件付き分岐命令の実行に基づいて、Aサイド条件付き分岐予測器312Aを更新するとともに、予測情報がBTAC108のBサイド中に存在する条件付き分岐命令の実行に基づいて、Bサイド条件付き分岐予測器312Bを更新する。
【0041】
理解できることは、
図1の分岐予測器100は、従来のハッシングロジック306が、ブロックアドレス122を用いてハッシュされるので、そのハッシングロジック106により生成されるインデックス164/166が、従来のハッシングロジック306により生成される単一インデックス364よりさらに正確である潜在的利点を有し、その一方、上述のように、
図1の実施態様のハッシングロジック106は、条件付き分岐命令のバイトオフセット154/156を用いる長所を有するので、各条件付き分岐命令の正確なアドレスを用いてハッシュする。
【0042】
更に理解できることは、
図1の分岐予測器100は、各インデックス164/166が、従来の分岐予測器300より大きいメモリアレイで、方向予測情報を検索することができるという潜在的利点がある。つまり、
図3の二個のアレイ312Aと312Bのエントリーの組み合わせ数と同じ数量の
図1の単一アレイ112中のエントリー数がN個であると仮定し、且つ、
図3の二個のアレイ312A、および、312Bが別々に更新されて、これにより異なる情報を含み、
図1の実施態様の二個のインデックス164/166がそれぞれ、全部のN個のエントリーの検索を開始する。その一方、従来の分岐予測器300は単一インデックス364を有して、
図3の二個のアレイ312A、および、312BのN個のエントリーの各半分を検索する。理解できることは、この潜在的利点は、
図1の実施態様の単一アレイ112がデュアルポートであるが、
図3の二個のアレイ312A、および、312Bがそれぞれ、単一ポートであり、
図1の実施態様の単一アレイ112がさらに大きいという事実のトレードオフとして得られることである。
【0043】
上述のように、分岐予測器100はレイテンシーを有し、すなわち、ブロックアドレス122、および、分岐パターン104を受信した後、複数のクロック周期で、フェッチユニット101を最終予測宛先アドレス128にリダイレクトする必要がある。分岐予測器100のレイテンシーがN個のクロック周期であると仮定する。一実施態様において、フェッチユニット101がリダイレクトされるとき、フェッチユニット101は、宛先アドレス128で、命令バイトブロック124のフェッチを初期化するとともに、次のN-1クロック周期に対し、逐次、フェッチを初期化し、同時に、分岐予測器100が、リダイレクトされた宛先アドレス128でフェッチされる命令バイトブロック124の予測を生成する。つまり、フェッチユニット101は分岐を受け入れないと仮定する。N個のクロック周期後、分岐予測器100がリダイレクトし、その仮定が正しくないことを示す場合、逐次的に不正確にフェッチされるN-1個の命令バイトブロック124が無効になり、すなわち、命令キューから効果的に除去され、キューが十分な命令を命令変換装置に提供せず、実行パイプラインの良好な使用を維持する。
【0044】
よって、さらに理解できることは、
図1の実施態様の潜在的利点は、いくつかの実施態様における事実のトレードオフとして得られ、それは、以下のようである。BTAC108とハッシングロジック106のレイテンシーが十分に大きくて、分岐予測器100が、従来の分岐予測器300よりも追加のクロック周期を必要とし、これは、さらに頻繁に、キューが十分でないという結果を有する。しかし、特定の実行は、このトレードオフが、プロセス技術、クロック周期期間、および、ロジックゲートパス長さに基づくかどうかという問題を生じる。
【0045】
今記述されている実施態様は、二個の明確な分岐命令アドレスを用いて、二個の異なるインデックスを生成することにより、条件付き分岐命令方向予測器の正確さを増加させる潜在的利点を有し、
図1の実施態様で実施されているが、BTAC108がバイトオフセット154/156を生成して、ハッシングを実行し、インデックス164/166の生成に関する遅延が発生せず、これにより、分岐予測器100全体のレイテンシーを増加させることがない。理解できることは、
図1の実施態様よりも精度が悪い損失(分岐パターン104でハッシュされる二個の形成された条件付き分岐命令アドレスの精度が悪いので)で、第二長所が潜在的に得られ、以下で詳細に記述される。
【0046】
図4は、別の実施態様による分岐予測器100を有するプロセッサ103のブロック図である。
図4の実施態様は、多くの方面で、
図1の実施態様と類似する。しかし、
図4のハッシングロジック406は、BTAC108からバイトオフセット154/156を受信するのではく、二個の所定値を受信して、分岐パターン104でハッシュされる二個の明確な分岐命令アドレスを形成し、条件付き分岐予測器112に提供されるAサイドインデックス164とBサイドインデックス166を生成する。
図4に示される実施態様において、二個の所定値はゼロ(“0”)454と1(“1”)456である。好ましくは、ハッシングロジック106は、“0”値454とブロックアドレス122を連結することにより、第一分岐命令アドレスを形成し、“1”値456とブロックアドレス122を連結することにより、第二分岐命令アドレスを形成し、分岐パターン104を有するこれらの二個のアドレスのそれぞれをハッシュして、インデックス164/166を生成する。好ましくは、ハッシングロジック106は、その他のハッシュ実施態様が検討されてもよいが、
図1に関して記述されるのと同じ方式で、二個のハッシュを実行する。
【0047】
図1と
図4の実施態様間の別の差異は、制御論理部114が、方向174をAサイド宛先アドレス144およびAサイドバイトオフセット154と関連付けるとともに、方向176をBサイド宛先アドレス146およびBサイドバイトオフセット156と関連付ける
図1の実施態様と異なり、
図4の実施態様の制御論理部414は、方向174を、二個のバイトオフセット154/156中の最小バイトオフセットを有する二個の宛先アドレス144/146の一サイドと関連付けるとともに、方向176を、二個のバイトオフセット154/156中の最大バイトオフセットを有する二個の宛先アドレス144/146の一サイドと関連づける。
【0048】
図1と
図4の実施態様間のさらに別の差異は、条件付き分岐命令の実際のアドレスが用いられて、条件付き分岐予測器112を更新する
図1の実施態様と異なり、
図4の実施態様は、さらに、ハッシングロジック106により計算されるインデックス164/166を保持するとともに、それらの適当な一つを用いて、条件付き分岐命令が実行された後、条件付き分岐予測器112を更新する。
【0049】
図5は、
図4の分岐予測器100の操作を説明するフローチャートである。
図2のように、
図5は、下向きの時間推移を示すと共に、水平に互いに平行なブロックで実行される動作が実質的に同時に並行して発生することを説明する。工程はブロック202から始まる。
【0050】
ブロック202において、フェッチユニット101はブロックアドレス122を生成するとともに、それを、
図4の命令キャッシュ102、BTAC108、および、ハッシングロジック406に提供する。工程は、ブロック204、206と508に平行に進む。
【0051】
ブロック204においては、命令キャッシュ102は命令バイトブロック124を出力する。工程はブロック514に進む。
【0052】
ブロック206において、BTAC108は、予測された宛先アドレス144/146、バイトオフセット154/156、および、ヒットインジケーター132を、各サイド、つまり、AサイドとBサイドに出力する。工程は、ブロック514に進む。
【0053】
ブロック508において、ハッシングロジック406は、分岐パターン104により、ブロックアドレス122、“0”値454、および、“1”値456から形成される二個の分岐命令アドレスのそれぞれをハッシュして、AサイドとBサイドのインデックス164/166を生成する。工程はブロック212に進む。
【0054】
ブロック212において、条件付き分岐予測器112はインデックス164/166を受信するとともに、それに応じて、AサイドとBサイドの方向予測174/176、および、ヒットインジケーター172を生成する。工程はブロック514に進む。
【0055】
ブロック514において、制御論理部414は、バイトオフセット154/156を観察して、どれが小さくてどれが大きいのか判断する。制御論理部414は、Aサイド方向予測174を、宛先アドレス154/156中の二個のバイトオフセット154/156の小さいほうを有するBTAC108の一側と関連付けるとともに、Bサイド方向予測176を、宛先アドレス154/156中の二個のバイトオフセット154/156の大きいほうを有する一側と関連付ける。この基本に基づいて、制御論理部414は、BTAC108と条件付き分岐予測器112が、有効、見える、受け入れられる分岐命令が命令バイトブロック124中に存在するかを予測するかどうか一緒に判断する。そうである場合、制御論理部414は、最終結果128上で、フェッチユニット101に、最初の、有効、見える、受け入れられる分岐命令を有するサイドの宛先アドレス144/146を出力して、プログラムの流れを選択された宛先アドレス144/146にリダイレクトする。工程はブロック514で終了する。
【0056】
図4の実施態様の潜在的利点は、条件付き分岐予測器112は、BTAC108により生成されるバイトオフセット154/156を使わず、これにより、BTAC108を待つ必要がなくそれらを生成するので、条件付き分岐予測器112が、BTAC108がその出力を生成するのと同じクロック周期中に、方向174/176(および、ヒットインジケーター172)を生成することである。それ故に、いくつかの実施において、
図4の分岐予測器100は、その最終結果128を、
図1の分岐予測器100より早いクロック周期にすることができる。分岐命令アドレスは、BTAC108により提供される実際のバイトオフセット154/156ではなく、コンスタントな“0”と“1”値を用いて形成されるので、ハッシングロジック406によりハッシュされる分岐命令アドレスの低精度のため、潜在的に低い分岐予測精度の欠点においてこの長所が高く評価されている。
【0057】
このほか、新しい分岐命令がBTAC108に割り当てられるとき、潜在的欠点において、この長所が高く評価される。上述のように、これは、
図4の実施態様の制御論理部414が、それらの関連するバイトオフセット154/156の相対サイズに基づいて、方向174/176を、宛先アドレス144/146と関連付ける事実によるものである。さらに特に、新しい分岐命令は、代替される分岐命令のバイトオフセットと異なるバイトオフセットを有する。それ故に、BTAC108の別のサイド中の残りのバイトオフセットに比べて、命令バイトブロック124中の二個の分岐命令の相対位置に変化がある(つまり、小さい方からより大きいオフセットへの変化、あるいは、その逆)かもしれないので、分岐履歴情報が更新されるまで、分岐予測器100は、二個の分岐命令の数インスタンス分の誤った予測情報を用いることがある。
【0058】
本発明では好ましい実施態様を前述の通り開示したが、それらは例であり、この限りではないと理解されるべきである。関連のあるコンピュータ技術における当業者ならわかるように、本発明の精神と領域を脱しない範囲内で、構成と細部において各種変更が可能である。たとえば、ソフトウェアは、たとえば、ここで記述された装置と方法の機能、製造、モデリング、シミュレーション、記述および/またはテスティングを可能にする。これは、汎用プログラミング言語(たとえば、C,C++)、Verilog HDL,VHDLなどを含むハードウェア記述言語(HDL)、あるいは、その他の可用なプログラムの使用により達成される。このようなソフトウェアは、既知のコンピュータ可用媒体、たとえば、磁気テープ、半導体、磁気ディスク、あるいは、光学ディスク(たとえば、CD-ROM、DVD-ROMなど)、ネットワーク、有線、あるいは、その他の通信媒体中に設置される。ここで記述される装置と方法の実施態様は、半導体IPコア、たとえば、プロセッサコア(たとえば、HDLで具体化あるいは定義される)中に含まれ、集積回路の製造において、ハードウェアに変換される。このほか、ここで記述される装置と方法は、ハードウェア、および、ソフトウェアの組み合わせとして具体化される。よって、本発明は、ここで記述される例示的な実施態様に制限されず、添付の請求項とそれらの等価物に基づいてのみ定義されるべきである。特に、本発明は、汎用コンピュータに用いられるプロセッサ装置中で実行される。最後に、当業者なら理解できるように、本発明の精神と領域を脱しない範囲内で各種の変更を加えることができ、従って本発明の保護範囲は、特許請求の範囲で定義された内容を基準とする。