プロセッサにおいて分岐ターゲットバッファ(BTB)またはBTBテーブルを使用して分岐情報を格納することにより、プロセッサの速度は実質的に向上する。従来、BTBにおいてエントリ数を増加させる唯一の方法は、バッファサイズを増大させることであった。ただし、BTBなどの一部のコンポーネントについてのローカルストレージを増加させることにより、プロセッサにおける速度及び物理スペースの点で他のコンポーネントが犠牲になるため、BTB容量への制限を含む、プロセッサ内のストレージ要素数への制限がある。さらに、プロセッサのアーキテクチャを設計するときに、バランスを保つためのトレードオフ、及び考慮する要因がある。例えば、実際には、BTBへのいくつかの変更により、プロセッサが動作しているときにプロセッサの速度が低下した。他の状況では、BTBが大きいほど、プロセッサの動作中の消費電力が全体的に高くなり、これは望ましくない。
従来のBTBの一般的なサイズは、1024個のエントリであり、各エントリは、例えば、ターゲットアドレスに対して20ビットを含む。ただし、すべてのBTBエントリに、保存されるアドレスに対して同じビット数が必要なわけではない。例えば、分岐予測器は、ある特定のアドレスに対して利用可能な20ビットのうちの5~10ビットのみを必要とする場合があるが、ターゲットアドレスの最上位ビットの一部が予測アドレスから変更されていないものとして分岐情報において符号化されることができることから、他のアドレスに対して全20ビットを必要とする場合がある。BTBの容量及びユーティリティを増大させ、プロセッサ内のBTBのフットプリントをほぼ同じに保つために、少なくとも1つの実施形態では、BTBは、2つ以上のバッファまたはテーブルに分割される。ある特定の実施形態によれば、第一バッファは、短いメモリアドレス、例えば6、8、または他の数のビットを含むこれらのアドレス用にサイズ設定され、指定される。第二バッファは、より長いメモリアドレス、例えば14、16、18、または20ビットを含むこれらのメモリアドレス用にサイズ設定され、指定される。一部の実施態様は、第三バッファを利用し、この第三バッファは、さまざまなメモリアドレス長、例えば6、8、10、12、14、16、18、または20ビットを含むこれらのメモリアドレス長用にサイズ設定され、指定される。また、各BTBエントリは、タグフィールド及び、いくつかの実施形態では、BTBエントリ内の1つ以上の別個のフィールドに配置される他の情報を含む。
他の実施形態によれば、プロセッサの設計者及びアーキテクトは、1つ以上のタイプの命令分岐に基づいて複数のBTBテーブルを作成して指定することによって、それぞれのタイプの分岐ターゲットに対してBTBテーブルを作成する。各BTBエントリは、BTBエントリが追跡する分岐を探索するコストに関連する値を含む。無条件分岐は、プロセッサ復号器によってプロセッサパイプラインにおいて早期に探索されることができるが、条件分岐は、実行時まで探索されない場合がある。プロセッサのいくつかの実施形態は、1サイクル中に、2つ以上の分岐予測、そのため2つの分岐ターゲットアドレスを送達する。これらの複数の分岐は、単一のBTBエントリに格納される。BTBエントリのさまざまな値を説明するために、第一BTBは、例えば無条件分岐用に作成されて指定され、第二BTBは、例えば単一の条件分岐用に作成されて指定され、第三BTBは、例えば複数の分岐を記録するエントリ用に作成される。第一、第二、及び第三BTBテーブルのそれぞれは、異なるターゲットアドレスサイズ、したがって異なる全体のBTBテーブル幅を有することにより、単一のBTBが、ある特定の固定幅、及びある特定の固定長(エントリ数)のものであった以前の設計と比較して、プロセッサ内のBTBテーブルのフットプリント全体を減少させるメカニズムを提供し得る。BTBエントリを2つ以上のBTBテーブルに分割する、または配置するというこの利点により、プロセッサ設計者は、1つ以上のBTBテーブルの長さを、相互に、または単一の従来のBTBの従来の長さに比べて増加させる、または減少させることができる。3つのBTBシステムについて、第一、第二、及び第三BTBテーブルは、第一BTB、第二BTB、及び第三BTBのそれぞれの中のエントリに収まらない大きなターゲットアドレスに対して追加のアドレスビット数を提供するために、各BTBエントリが指すことができる別個のターゲットテーブルによって補完され得る。動作中に、そしていくつかの実施態様によれば、プロセッサ内のBTBルックアップは、各BTBルックアップについてのすべてのBTBバッファ間で実行されることにより、単一の従来のBTBバッファと同様のパフォーマンスを提供する。
ある特定の実施態様では、BTBテーブルは、単一のメモリタイプ内に含まれるか、または、一方で他の実施態様では、BTBテーブルは、プロセッサコアに関するマルチレベルメモリ階層の、複数のメモリ、複数のメモリタイプ、または複数のメモリレベル間で分散される。説明を簡単にするために、本明細書では、プロセッサコアに対する、またはプロセッサに対するメモリのレベルまたは配置にそれぞれ対応する、レベル1のBTB、レベル2のBTBなどを参照する。各BTBレベルは、単一のBTBテーブル、または複数のBTBテーブルを含んでもよい。他の実施態様では、1つ以上のBTBテーブルは、単一のプロセッサコアについての単一のメモリキャッシュまたはメモリレベルに組み込まれる。さらに他の実施態様では、BTBテーブルは、プロセッサコアまたはプロセッサ操作間で共有される。特定の実施形態では、複数のBTBレベルのうちの1つは、複数のプロセッサコアによって共有され、プロセッサコアのそれぞれは、それ自体に1つ以上のBTBテーブルを含む。特定のコアに関連するこれらのBTBテーブルを最初に使用してもよく、必要に応じてBTBエントリを共有BTBテーブルにエビクトしてもよい。プロセッサコア間で共有される1つ以上のBTBテーブルを含むプロセッサの利点は、検索速度、全体的なプロセッサ速度、及び全体的なプロセッサ操作における低下によって相殺されることができる。したがって、高速実装のために、マルチコアプロセッサの別個のプロセッサコアごとに複数のBTBテーブルを提供してもよい。
動作中に、最近最も使用されていない(LRU)ものなどの下位の値のBTBエントリは、第一BTBまたは第一BTBレベルから、同じレベルまたは別のレベルのメモリ内のBTBなどの別のBTBまたはBTBレベルに最初にエビクトされる。第二BTBから第三BTBへのエビクションもLRUベースで行われる。BTBテーブルには、さまざまなタイプの連想度を使用してもよい。例として、第一BTBテーブルは、4ウェイセットアソシアティブである。別のBTBテーブルは、8ウェイセットアソシアティブのプロセッサキャッシュの形式を取り、各ウェイはウェイあたり512、1024、2048、またはある他の数のエントリを格納する。一般に、第一BTBテーブルは、Nウェイセットアソシアティブであることができ、第二BTBテーブルは、Mウェイセットアソシアティブであることができ、N及びMは互いに同じ、または異なる整数である。他の実施形態では、1つ以上のBTBテーブルはフルアソシアティブである。連想度のレベルは、特定のプロセッサについて所望の消費電力レベル、プロセッサが動作するシステム、ならびに特定のプロセッサについての処理負荷の所期のタイプ及び量に応じて選択される。
一部の実施態様では、BTBテーブルは、下位レベルのBTBテーブルからの条件分岐に対して最近エビクトされたエントリが投入される限られたエントリ数を含むビクティムバッファとして機能する。所与の領域についてのこのようなビクティムバッファのエントリ数を最大にするために、分岐予測器は、BTBテーブルにいかなるターゲットアドレスも記録しない。分岐予測器がビクティムバッファにおいて分岐を見つけ、条件分岐予測器によって決定されたとおりに分岐が取得されると予測するときに、分岐予測器は、分岐位置に関する情報を復号ユニットに送信し、復号ユニットは、復号操作が完了すると利用可能なターゲットアドレスへのリダイレクトをトリガし、予測される位置が実際に条件分岐であることを確認する。
図1は、いくつかの実施形態による、アウトオブオーダー命令実行を実装するプロセッサ120の命令パイプラインアーキテクチャ100のブロック図である。プロセッサ120の少数の要素のみを示す。命令キャッシュ101は、命令フェッチユニット103によってアクセスされる。データキャッシュ102は、ロード/ストアユニット110によってアクセスされる。命令キャッシュ101の命令は、データキャッシュ102からのデータを含むデータ上で動作する。命令フェッチユニット103は、1つ以上の分岐ターゲットバッファ(BTB)テーブル(一般にBTバッファ及びBTBとも称される)105に格納される、または提供される分岐ターゲットアドレスを生成する分岐予測器104を含む。いくつかの実施形態によれば、分岐ターゲットアドレスは、プログラムカウンタ113に関連している。BTBテーブル105は、図1の分岐予測器104の内部に示されており、BTBテーブル105は、分岐予測器104または命令フェッチユニット103のある特定の要素に近接してプロセッサ120内に位置していても、位置していなくてもよい。復号器106は、命令キャッシュ101からの命令を含む命令をプロセッサ制御信号に変換する。
リオーダバッファ107は、リザベーションステーション109などのプロセッサの他のコンポーネントによってアクセスされるレジスタ108に命令を、それらの元のフェッチ順序で格納する。リザベーションステーション109は、レジスタ108などのレジスタをリネームし、動的命令スケジューリングを容易にする。リザベーションステーション109は、データがレジスタに格納されて再読み出しされるのを待機するのではなく、データがフェッチされ次第、または計算され次第すぐに、プロセッサがデータをフェッチして再利用することを可能にする。分岐予測器104によってBTBテーブル105に格納される予測アドレスが正しくない、または命令ストリームに回復不可能な例外が発生する場合、すべての命令のリオーダバッファ107はクリアされ、リザベーションステーション109は再初期化される。リオーダバッファ107は、分岐ターゲットアドレスの誤予測のロールバック制御のためのメカニズムを提供する。リザベーションステーション109は、ロード/ストアユニット110、ならびに算術論理演算装置(ALU)、浮動小数点演算装置(FPU)、及び整数演算装置(IU)などの1つ以上の機能ユニット111に情報を提供する。合わせて、命令フェッチユニット103、復号器106、リオーダバッファ107、リザベーションステーション109、ロード/ストアユニット110、及び関連するレジスタは、命令実行パイプラインの一実施形態である。
図2は、一部の実施形態による処理システム200のブロック図である。処理システム200は、図1の命令パイプラインアーキテクチャ100及びBTBテーブル105の一部分の一実施例である。処理システム200は、分岐検出器202、条件分岐予測器203、戻りアドレス予測器204、及び分岐予測トレーナー205を有する分岐予測器201を含む。処理システム200は、当業者によって理解されるように、算術ユニット、スケジューラ、テーブルウォーカーなどの他の図示されていない要素を含む。
現在のアドレスごとに、分岐予測器201は、現在のアドレスから開始してフェッチされるバイトのブロックの終了アドレス、予測されたブロック内の分岐タイプ、及び次の予測の開始アドレスを含む予測ウィンドウを提供する。どの分岐が予測ウィンドウの一部分であるかを決定するために、分岐検出器202は、すべてのウェイにわたって、例えばBTBテーブル1 206からBTBテーブルN 207として表される複数のBTBテーブルのうちの1つ以上にわたって、すべてのBTBテーブルをルックアップする。所与のBTBエントリ上でのタグマッチングは、エントリに記録される1つ以上の分岐が予測ウィンドウに存在することを示す。各BTBエントリは分岐の位置及びタイプを含む。誤予測された分岐に対してリダイレクトが発生するときに、BTBには分岐予測トレーナー205が投入される。
図3は、いくつかの実施形態による、複数のBTBテーブルを含むプロセッサのブロック図である。プロセッサ300は、追加の構造及び機能を有する、図1のプロセッサ120及びBTBテーブル105の特定の実施例である。プロセッサ300は、第一指定領域306内に複数のプロセッサコアのうちの第一プロセッサコア305を含む。第一プロセッサコア305は、分岐予測器304によって使用される第一BTBテーブル301、第二BTBテーブル302、及び第三BTBテーブル303を含むBTBテーブルと相互運用する。いくつかの実施形態によれば、各プロセスサイクルにおいて、分岐予測器304は、1つ以上の分岐命令からの1つまたは2つの予測を提供する。
各BTBテーブル301、302、303は、それぞれ、エントリが属する予測アドレスを識別するために使用されるタグフィールド307、308、309、1つまたは複数の分岐のターゲットを格納するために使用されるターゲットアドレスフィールド310、311、312、ならびに予測ウィンドウ内の分岐位置、及び分岐タイプを格納するために使用される情報フィールド316、317、318を含む。図2の分岐予測トレーナー205などの分岐トレーナーは、それぞれのBTBテーブルに投入され、BTBエントリが第一BTBテーブル301、第二BTBテーブル302、または第三BTBテーブル303に記録されているかどうかを、トレーニングされているBTBエントリごとに決定する。
BTBテーブル301~303のそれぞれは、異なるサイズまたは幅313、314、315(特に示されない限り、「サイズ」及び「幅」は本明細書では交換可能に使用される)のターゲットアドレスフィールド310、311、312を含む。例えば、第二BTBテーブル302は、第二アドレスサイズ314のアドレス311を含む。いくつかの実施形態によれば、第二アドレスサイズ314は、第一アドレスサイズ313よりも小さい。第二アドレスサイズ314は、第三BTBテーブル303のターゲットアドレスフィールド312の第三アドレスサイズ315よりも大きい。ある特定の実施形態では、例えば、第一BTBテーブル301のBTBエントリの第一セットにおけるBTBエントリ数と比較して、第三BTBテーブル303のBTBエントリの第三セットには、より多くのBTBエントリがある。これが可能であるのは、ターゲットアドレスフィールド312についてのビット数または幅315を減らすことにより、その他のフィールド309、318のサイズを一定に保つときに、第三BTBテーブル303についてより多くのエントリが可能であることからである。すなわち、各BTBテーブル301、302、303についての同じ量のプロセッサフットプリントに対して、幅315が縮小されることにより、第三BTBテーブル303は、指定領域306の固定サイズに対してより多くのエントリを含むことが可能である。他の実施形態では、すべてのターゲットアドレスに対して一定幅のターゲットアドレスフィールドを有する単一のBTBテーブルを含む以前の実施形態と比較して、より小さな指定領域306が可能である。したがって、この実施例では、第三BTBテーブル303は、その他のBTBテーブル301、302よりも小さなフットプリントをプロセッサ300及び指定領域306では占めてもよいが、第二BTBテーブル302及び第一BTBテーブル301よりもサイズ(エントリ)が大きいと見なされる。
第三BTBテーブル303におけるエントリの第三アドレス312、または第二BTBテーブル302におけるエントリの第二アドレス311のような、アドレスビットを保持するために追加のビットが必要とされる場合に、追加のアドレステーブル(図3には示されていない)は、第一、第二、及び第三BTBテーブル301、302、303の間で共有される。アドレスフィールドのビットに格納されるアドレス値の代わりに、追加のアドレステーブルが使用されるときに、複数のアドレスビットは、追加のアドレステーブル内のエントリにインデックス付けされる。すなわち、追加のアドレステーブルのエントリへのポインタは、分岐ターゲットアドレスフィールド310、311、312のうちの対応する1つに指定されるBTBエントリの少なくとも一部分に格納される。
図4は、いくつかの実施形態による、分岐タイプに基づいてBTBテーブルを含むプロセッサ400のブロック図である。分岐タイプに基づくBTBテーブル構成は、テーブルを異なる値のBTBエントリに割り当て、テーブルのサイズを適切に設定して、さらなるスペースを高位の値のエントリに割り当てることにより、向上したパフォーマンスを提供する。プロセッサ400は、追加の構造及び機能を有する、図1のプロセッサ120及びBTBテーブル105の特定の実施例である。プロセッサ400は、第一指定領域406内に複数のプロセッサコアのうちの第一プロセッサコア405を含む。第一プロセッサコア405は、分岐予測器404によって使用される第一BTBテーブル401、第二BTBテーブル402、及び第三BTBテーブル403を含むBTBテーブルと相互運用する。いくつかの実施形態によれば、各プロセスサイクルにおいて、分岐予測器404は、1つ以上の分岐命令からの1つまたは2つの予測を提供する。
各BTBテーブル401、402、403は、エントリが属する予測アドレスを識別するために使用されるタグフィールド407、408、409、1つまたは複数の分岐のターゲットを格納するために使用されるターゲットアドレスフィールド410、411、412、ならびに予測ウィンドウ内の分岐位置、及び分岐タイプを格納するために使用される情報フィールド416、417、418を含む。図2の分岐予測トレーナー205などの分岐トレーナーは、それぞれのBTBテーブルに投入され、BTBエントリが第一BTBテーブル401、第二BTBテーブル402、または第三BTBテーブル403に記録されているかどうかを、トレーニングされているBTBエントリごとに決定する。さらに、BTBテーブル401~403のそれぞれは、それぞれの分岐タイプについてターゲットアドレスフィールド410、411、412を含む。BTBテーブル401~403のそれぞれは、そこに格納される分岐アドレスのそれぞれ1つ以上のタイプに典型的なターゲットアドレスサイズに基づいて、異なるサイズまたは幅413、414、415のターゲットアドレスフィールド410、411、412を含んでもよい。BTBテーブル401、402、403のそれぞれは、1つ以上の分岐タイプに指定される。例えば、第二BTBテーブル402は、第一BTBテーブル401のエントリとは異なる分岐タイプについてのアドレス411を格納する。ある特定の実施形態では、例えば、第三BTBテーブル403内のエントリのタイプが、BTBエントリに関して正しく予測するときに節約されるサイクル数の観点から、プロセッサ400の運用効率にとってより有益であるため、第二BTBテーブル402のBTBエントリのセット内のBTBエントリの数と比較して、第三BTBテーブル403のBTBエントリの第三セット内により多くのBTBエントリがある。それぞれのBTBテーブル401~403のサイズ(エントリ数)は選択され、BTBテーブル401~403は、そこに格納される分岐アドレスタイプ、及びそれらの相互の運用効率に基づいて構築される。一実施形態では、各BTBエントリは、それぞれのフィールドに少なくともタグ及びターゲットアドレスを含む。各エントリは、スレッドID、及び共有インジケータまたはフラグなどの他の情報も含んでもよい。
図5は、いくつかの実施形態による、異なるレベルのメモリ内に複数のBTBテーブルを含むプロセッサのブロック図である。プロセッサ500は、分岐命令を処理する分岐予測器502を有するプロセッサコア501を含む。分岐予測器502は、レベル1のBTBテーブル503、1セットのレベル2のBTBテーブル504、505、506、及びレベル3のBTBテーブル507を含むさまざまな構造を有し、それらと相互運用する。レベル1のBTBテーブル503は、第一レベルのメモリ508にある。レベル2のBTBテーブル504、505、506は、第二レベルのメモリ509にある。レベル3のBTBテーブル507は、第三レベルのメモリ510にある。いくつかの実施形態によれば、1セットのレベル1のBTBテーブル503がフルである場合、またはBTBエントリのすべてのセットがフルである場合、BTBエントリは、レベル1のBTBテーブル503から、複数の、または1セットのレベル2のBTBテーブル504~506のうちの1つに上書きされる、またはエビクトされる。レベル2のBTBテーブル504~506のそれぞれは、特定のターゲットアドレスサイズ、もしくはターゲットアドレスサイズの範囲に対して、または他の図に関連して説明されているような特定の分岐命令タイプに対して作成される。
レベル2のBTBテーブル504、505、506のうちの1つがフルである場合、プロセッサ500は、そこにBTBエントリを上書きする、またはそこからBTBエントリを第三レベルのメモリ510内のレベル3のBTBテーブル507にエビクトする。いくつかの実施形態では、最下位のエントリなどのBTBエントリは上書きされる。他の実施形態では、BTBエントリは、図示されていない1つ以上のBTBテーブルのうちの1つにエビクトされる。そのような他のBTBテーブルは、別のレベルのメモリ508~510内のBTBテーブルなどの同じ、もしくは別のメモリに、またはプロセッサ内の別の位置に、またはプロセッサコア501の外部のメモリに、またはバスもしくはブリッジによってプロセッサ500に結合されるメモリ内などのプロセッサ500自体にあってもよい。例えば、エビクションは、レベル2のメモリ509内のオーバーフローBTBテーブルに対するものである。いくつかの実施形態によれば、分岐タイプまたは分岐ターゲットアドレスサイズに基づいて、1サブセットのBTBエントリのみ、例えば、BTBテーブル504、505、506のうちの1つの中のそれらのBTBエントリのみをエビクトすることが可能である。
例示的な実施形態によれば、レベル2のBTBテーブル504、505、506のそれぞれは、レベル2のメモリ509にある。いくつかの実施形態では、BTBテーブル504、505、506のそれぞれは、4ウェイアソシアティブである1,024個のエントリを含む。各BTBエントリは、サイズが68ビット(68b)であり、最大37ビットのターゲットサイズを記録することができる。37ビットよりも大きいサイズのターゲットは、間接レベルを介して別のテーブルに記録されることができる。本明細書に記載されるサイズは、図3のBTBテーブル301~303、図4のBTBテーブル401~403、及び図5のBTBテーブル503~507などに可能なさまざまなサイズの例示である。いくつかの実施形態では、BTBテーブルは、仮想フェッチアドレスのハッシュを使用してインデックス付け及びタグ付けされる。
いくつかの実施形態によれば、BTBテーブルは、分岐予測サイクルあたり最大2つの分岐の予測をサポートする。他の実施形態では、プロセスサイクルまたは分岐予測サイクルあたり1つの分岐のみが評価される。好ましくは、BTBテーブルは、すべての分岐タイプ及びターゲットサイズをサポートする。各BTBエントリ、例えば図5のレベル1のBTBテーブル503内のそれらのエントリは、予測アドレスから開始し、アライメントされた64Bの終了、または第一静的分岐の終了、または予測ウィンドウ内の「最後ではない」(NLIPW)第一動的分岐もしくは分岐対のいずれか早い方の終了まで延びる予測ブロックに関する、最大2つのターゲット、及び付随する分岐情報を格納する。
いくつかの実施形態によれば、プロセッサ設計に応じて、BTBテーブル内の各エントリは、ある特定のフィールドを含む。説明するために、図6は、いくつかの実施形態によるBTBテーブルについてのBTBエントリ600のブロック図である。図6では、以下は、BTBテーブルについての68ビットエントリに関するBTBエントリ600内のそれぞれの位置ビットでのフィールドの記述であり、各BTBエントリ600は、ゼロ(0)から67までインデックス付けされる68ビットを含む。ビットのサイズまたは数は一例に過ぎず、他のサイズ及びビット分布は本明細書に提供されるガイドラインを使用して実装されてもよい。AUXPREDEN601は、位置[67]における1ビットであり、補助予測器の有効化を示す。SHRD602は、位置[66]における1ビットであり、エントリがスレッド間で共有されているか、共有可能であるかを示す。TID603は、位置[65]における1ビットであり、スレッド識別子(ID)を示す。TAG604は、位置[64:52]に位置している13ビットであり、分岐エントリについてのタグを格納する。LE605は、位置[51:50]における2ビットであり、符号長または「レングス符号化」を示す。LE605の状態は、これらの値1,1と1,0と0,1に関する状態を含む。PAIR606は、位置[49]における1ビットであり、オーバーフローアドレスバッファと対になることを示す。BRTYPE607は、位置[48:44]内にある5ビットであり、以下でより詳細に説明されるように、分岐タイプの符号化を示す。BR1END608は、位置[43:38]にある6ビットであり、[5:0]の範囲に関して1インクリメントされ得るBranch1のエンドポインタを示す。
LE605及びPAIR606の状態は、合わせて、各(第一レベルまたは第二レベルの)BTBエントリの位置[37:0]におけるビットがどのように使用されるかを示す。USEOVERFLOW(USEOA)609は、位置[37]における1ビットであり、オーバーフローアドレスバッファの使用を示す。例えば、位置[48:32]にあるターゲットは、オーバーフローアドレス識別子OAIDX610(以下を参照)として示されるオーバーフローアドレスバッファのエントリからのものであり、PAIR=0の場合に使用される。OAIDX610は、位置[36:32]にある5ビットであり、オーバーフローアドレスバッファのインデックスを示す。OAIDX610は、PAIR=0及びUSEOA=1の場合に使用される。BR0END611は、位置[37:32]における6ビットの代替の割り当て612であり、[5:0]の範囲に関して1インクリメントされ得るBranch0のエンドポインタを示す。
BR0TGT613は、インデックス(X+1)から31までの第一範囲615にわたるBranch0ターゲット、または第一分岐ターゲットアドレスであり、ここでXは整数であり、第一分岐ターゲットアドレスはLE605の2ビットの状態に応じて可変長のものである。例えば、BR0TGT613は、LE=1,1についての位置[31:20]における12ビットであり、BR0TGT613は、LE=1,0についての位置[31:16]における16ビットであり、そしてBR0TGT613は、LE=0,1についての位置[31:12]における20ビットである。LE=0,0の場合、BR0TGT613は、有効ではない、または使用されない。
BR1TGT614は、位置インデックス[0]から位置インデックス[X]までの第二範囲616にわたるBranch1ターゲット、または第二分岐ターゲットアドレスであり、ここでXは整数である。例えば、BR1TGT614は、PAIR=0及びUSEOA=0の場合に位置[36:0]において37ビットであり、BR1TGT614は、PAIR=0及びUSEOA=1の場合に位置[31:0]において32ビットであり、BR1TGT614は、PAIR=1及びLE=1,1の場合(BR0TGT613は上記のように12ビットである場合)に位置[19:0]において20ビットであり、BR1TGT614は、PAIR=1及びLE=1,0の場合(BR0TGT613は上記のように16ビットである場合)に位置[15:0]において16ビットであり、そしてBR1TGT614は、PAIR=1及びLE=0,1の場合(BR0TGT613は上記のように20ビットである場合)に位置[11:0]において12ビットである。このようにして、BTBテーブルの各レベル1、レベル2、またはレベル3のBTBエントリは、いくつかの実施形態による、2つの分岐ターゲットアドレスBR0TGT613及びBR1TGT614を格納することができる。
分岐タイプ符号化に関して、いくつかの実施形態によれば、5ビット分岐タイプは、Branch1の以下の特性を示す。5ビット分岐タイプの最初の2ビットに対して、各分岐命令についての分岐タイプは、位置[1:0]において次の、値0,0に関する第一状態が無効に対応し、値0,1に関する第二状態がJMP(ジャンプタイプ)に対応し、値1,0に関する第三状態がCALL(呼び出しタイプ)に対応し、値1,1に関する第四状態がRET(戻りタイプ)に対応するように指定される。5ビット分岐タイプの位置[2]において、1ビットは、値0についての固定ターゲット、及び値1についての可変ターゲットを指定する。分岐は、デフォルトによって固定ターゲットとしてインストールされ、これらの分岐がたとえBTBエントリに最初にインストールされたものとは異なるターゲットを取得しても、間接分岐のみが可変ターゲットに変換される。
5ビット分岐タイプの最後の2ビットに対して、方向性ステータスは、次のスキームに従って位置[4:3]に提供される。直接固定分岐及び間接固定分岐は、位置[4:3]を見ることによって区別される。0,0の値は、DE(復号)リダイレクトを介して見つかる無条件直接(UD)に対応する。いくつかの実施形態によれば、UDは静的であり、定義によって固定される。分岐が属しているレベル2のBTBのテーブルを知るために、UDには区別が必要とされる。位置[4:3]における1,0の値は、UDではなく静的に対応する。これらの分岐は、デフォルトによる方向に関して静的としてインストールされ、条件分岐が不成立としてリダイレクトされる場合、条件分岐のみが動的方向に変換される。
位置[4:3]における1,1の値は、「UDではなく、動的で、予測ウィンドウ内の最後(LIPW)」の状態に対応する。LIPWは、プロセッサが64Bキャッシュライン内の最後の分岐として識別するいずれかの分岐に設定される。このステータスは、BTBエントリではどの分岐も成立ではない場合に、BTB読み出しロジックが次のフェッチアドレス(FA)を決定するのに役立つ。本来であれば、次のFAは、BTBエントリ内の最後の分岐の直後の命令アドレスであるが、LIPWが設定されている(そしてどの分岐も成立ではないと仮定する)場合、次のFAは、シーケンシャルキャッシュラインアドレスである。位置[4:3]における0,1の値の状態は、「UDではなく、動的NLIPW」に対応する。
第一分岐が不成立であると予測されることができる場合にのみ、分岐ターゲットが対になる値を含むことから、Branch0は、動的な固定JMPタイプの分岐のみであることができる。一実施形態では、分岐ターゲット対は、以下の特性を有する。対あたり1つの分岐のみが、可変ターゲットのものであることができる。これらの対は、Call/Call、Call/Ret、Ret/Call、またはRet/Retを含むことができない。これらの対は、前述のように、複数のターゲットサイズの組み合わせをサポートする。対になることが可能であるかどうか、そしてどの組み合わせを使用するべきかを知るために、単一のタイプは、短い分岐予測ターゲット、中間の分岐予測ターゲット、及び長い分岐予測ターゲットの間で区別する。この区別も使用して、別のBTBテーブルからオーバーフローレベル2のBTBテーブルまたはレベル3のBTBテーブルなどに、分岐ターゲットアドレスをビクティムにする、またはエビクトするときに、これらのBTBテーブルのうちのどのBTBテーブルを使用するべきかを選択する。
以下の説明は、例示的な一実施形態による、図4のBTBテーブル401、402、403、及び図5のBTBテーブル503~507などの第一BTBテーブルの第一BTB分岐ターゲットアドレスビットに関してさらなる詳細を提供する。いくつかの実施形態によれば、ターゲットアドレス相当の2つの分岐を格納し、分岐タイプなどに基づいて、これら2つの分岐に可能なケースの多くをカバーするために、ターゲットフィールドに32ビットが必要とされる。必要なターゲットサイズは、直接分岐全体で1ビットから49ビットまで変わるが、戻りタイプの分岐は、いかなるターゲットビットをも必要としない。可変ターゲット分岐について、発生した第一ターゲットは、本明細書でさらに説明されるようにBTBにおいてトレーニングされ、他のターゲットは、間接ターゲット予測器においてトレーニングされる。
ターゲットフィールドは、ターゲット間で共有され、それぞれは、エントリが2つの分岐ターゲットアドレスを格納する場合に、通常、異なる長さを有する。可変長分岐を実装することにはタイミングの観点からコストがかかりすぎるため、ターゲットを格納する、より最適化されたアプローチは、2つの分岐に対して3つのターゲット長のバリエーションを使用し、図4のBTBテーブル401、402、403、及び図5のBTBテーブル504、505、506などのそれぞれのBTBテーブルにおいて、ジャンプタイプ、呼び出しタイプ、戻りタイプなどの分岐タイプを使用して符号化することである。分岐ターゲットが大きすぎて、第二分岐のターゲットと並べて収めることができないケースがある。このようなケースでは、分岐は完全なターゲットアドレスまたはターゲットビットを格納するために独自のBTBエントリを必要とする。2つのケースがあり、(1)その他の分岐タイプのフィールド及び終了フィールド(上記のとおり)がターゲットビットとして再利用される、エントリストレージあたりの単一の分岐、というケースがある。このメカニズムにより、37ビットのターゲットアドレスにサポートが可能である。そして(2)OAIDXフィールドが指すオーバーフローアドレスエントリによって上位ビットが提供される、37ビットより長いターゲット、というケースがある。第一BTBにヒットした後にオーバーフローアドレス構造を必要とするターゲットアドレスについてのリダイレクトは、追加のリダイレクトペナルティを負う。BTB置き換えポリシーについての例として、いくつかの実施形態によれば、第一BTBテーブル401またはBTBテーブル503は、置き換えポリシーの一部分としてラウンドロビンスキームを使用する。第一BTBテーブル内の256セットのそれぞれは、2ビットのラウンドロビン(RR)カウンタを含む。
図1の命令パイプラインアーキテクチャ100、図4のプロセッサ400、または図5のプロセッサ500などにおける、パイプラインに関して、BTBテーブルは、省電力のために読み出しが抑制されない限り、すべての予測フローについて読み出される。いくつかの実施形態によれば、第一BTB読み出しは、BP0と指定される第一ステップで開始される。後続のステージは、予測パイプラインにおけるステージのようなBP1、BP2などとして設計される。BTBテーブルは、BP2からBP0にリダイレクトする。
図4のプロセッサ400、及び図5のプロセッサ500などのプロセッサのいくつかの実施形態によれば、上記のように、BTBテーブル401、402、403、及びテーブル504、505、506に具現化されるような3つの論理テーブルがある。BTBテーブルの各テーブルは、図4のような分岐タイプ、または図3のようなターゲットサイズのサブセットをサポートする。BTBテーブル401~403、503~507に具現化される、そのようなマルチテーブルBTBは、いくつかの利点を提供する。例えば、そのような配置は、プロセッサでは面積効率がよい。各BTBテーブル401~403、504~506は、その分岐タイプまたはターゲットサイズのサブセットについてストレージ容量のみを有する。いくつかの実施形態では、各BTBテーブルは高い連想度を提供するが、ある特定の実施形態では、各BTBテーブル401~403、504~506はフルLRUを実装することができる。高い実際の連想度を使用することは、実装するのにコストがかかる。複数のBTBテーブルの使用は、より高い値の分岐(例えば、対になった分岐、及び動的分岐)を他の分岐と区別する。複数のBTBテーブル301~303、401~403、503~507は、無制限の分岐ターゲットサイズをサポートするが、複数のBTBテーブル301~303、401~403のうちの1つのBTBテーブルのみが全分岐ターゲットアドレスサイズをサポートする必要がある。複数のBTBテーブルの使用は、プロセッサフロアプランの柔軟性を向上させる。例えば、BTBテーブル401~403のうちの2つのみが、動的分岐をサポートする必要がある。したがって、これらのBTBテーブルは、条件予測器の近くに配置されることができる。動作中に、プロセッサの特定の実施形態によれば、BTBテーブルのうちの2つのみが、著しい数のターゲットアドレスビットを駆動する。
以下は、例示的なBTB構成及びサイズ設定スキームに関するさらなる詳細を提供する。第一BTBテーブル401などの第一BTBテーブル(インデックス0)は、小さなエントリを格納する。第二BTBテーブル402などの第二BTBテーブル(インデックス1)は、DEリダイレクトを通して探索される分岐(例えば、これらの分岐は低いリダイレクトペナルティを有する)を格納する。第三BTBテーブル403などの第三BTBテーブル(インデックス2)は、すべての他のタイプを格納する。例えば、分岐タイプは次のように割り振られる。第一BTBテーブルは、単一のRET分岐タイプ、及び単一の静的固定条件付きJMPの短い分岐タイプについてのアドレスを格納する。第二BTBテーブルは、「超長」分岐タイプではない単一の静的固定無条件直接呼び出し、及び超長分岐タイプではない単一の静的固定無条件直接ジャンプを格納する。第三BTBテーブルは、すべての他の分岐タイプを格納する。他の数のBTBテーブル、ならびに他のタイプ及びターゲットサイズの割り振りは、図3~5に関連して説明されるものを超えることができる。
BTBテーブルの容量の一実施例は、合計5,632個のBTBエントリを含む例示的実施態様では次の通りである。第一BTBテーブルは、合計2,048個のBTBエントリについて、512セット及び4ウェイを含む。第一BTBエントリは、小計73,728ビットについて、エントリあたり36ビットを含む。第二BTBテーブルは、合計1,024個のBTBエントリについて、256セット及び4ウェイを含む。第二BTBエントリは、小計65,536ビットについて、エントリあたり64ビットを含む。第三BTBテーブルは、合計2,560個のBTBエントリについて、512セット及び5ウェイを含む。第三BTBエントリは、小計184,320ビットについて、エントリあたり72ビットを含む。合計では、BTBテーブルのセットは、13ウェイ、5,632個のエントリを含み、図4の指定領域406などの1つ以上の指定領域内の要素などの323,584ビットを必要とする。
この実施例では、マルチテーブルのBTBテーブルについて、オーバーフローアドレスバッファは、図4の複数のBTBテーブル401~403のセット、または図5のBTBテーブル504~506のセットの間で共有される。分岐タイプ符号化は、第一BTBテーブル401、504、第二BTBテーブル402、505、及び第三BTBテーブル403、506の間で異なる。ただし、{LE、PAIR、TYPE}に従って定義されたBTB分岐タイプと、{TableNumber、LE、PAIR、TYPE}に従って記述されたBTBテーブル分岐タイプとの間には直接マッピングがある。これらのBTB記述(フィールド)は、スワップ及びBTBエビクション中に使用される。
他の実施形態によれば、図4の第一BTBテーブル401などの第一BTBテーブル内のBTBエントリに対するフィールド及び位置ビットについて、これらのフィールド及び位置ビットは、位置[35:34]における2ビットに関するUNUSED、位置[33]における1ビットに関するSHRD、位置[32]における1ビットに関するTID、位置[31:20]における12ビットに関するTAG、位置[19:14]における6ビットに関するBREND、位置[13:12]における2ビットに関するBRTYPE、位置[11:0]における12ビットに関するBRTGTを含む。UNUSEDフィールドは、対応するマクロ位置に未使用のビットがあるかどうかを示す。SHRDフィールドは、BTBエントリがスレッド間で共有されるか、共有可能であるかを示す。TIDフィールドはスレッドIDである。BRENDフィールドは、[5:0]の範囲に関して1インクリメントされ得る、分岐エンドポインタである。BRTYPEフィールドは、分岐タイプ符号化を示す。いくつかの実施形態によれば、第一BTBテーブル401は、RET(戻り)タイプの分岐、及び少なくとも1つのタイプのJMP分岐を含むいくつかのタイプの分岐に関する情報を含む。いくつかの実施形態によれば、BRTYPEフィールドは、戻りタイプについての全分岐タイプを記録する位置[4:0]におけるBRTGTに関して、以下の、状態0,X(Xは0または1であることができる)が無効状態に対応し、値1,0に関する状態がJUMPに対応し、値1,1に関する状態がRETに対応するように符号化される。
図7は、いくつかの実施形態による、第二BTBテーブルについてのBTBエントリ700のブロック図である。以下は、図4の第二BTBテーブル402、または図5の第二BTBテーブル505などの第二BTBテーブル内のBTBエントリについてのフィールド及び位置ビットの記述である。図7の各BTBエントリ700は、図6のBTBエントリ600よりも短い、64ビット幅である。図7では、BTBエントリ700は、以下の、位置[63]における1ビットに関するSHRD701、位置[62]における1ビットに関するTID702、位置[61:49]における13ビットに関するTAG703、位置[48:47]における2ビットに関するLE704、位置[46:45]における2ビットに関するBRTYPE705、位置[44:39]における6ビットに関するBREND706、位置[38:0]における39ビットに関するBRTGT707というフィールドを含む。SHRD701は、BTBエントリがスレッド間で共有されるか、共有可能であるかを示す。TID702はスレッドIDである。LE704は、レングス符号化を指し、第一BTBテーブル401などの第一BTBテーブルのLE605についてのものと同じ符号化を用いる。BRTYPE705は、分岐タイプ符号化を示す。いくつかの実施形態によれば、第二分岐タイプBTBは、無条件直接分岐のみなど、ただ1つの分岐タイプに関する情報を含む。このフィールドは、JMP、CALL、及び無効の間の区別を符号化するためのものである。いくつかの実施形態による第二分岐タイプのBTBについてのBRTYPEは、以下の、値0,0に関する状態が無効状態に対応し、値0,1に関する状態がJMP(ジャンプ)分岐タイプに対応し、値1,0に関する状態がCALL分岐タイプに対応し、値1,1に関する状態が別の不正状態に対応するように符号化される。第二BTBエントリ700についてのBREND706は、[5:0]の範囲に関して1インクリメントされる分岐エンドポインタである。BRTGT707は、第一BTBエントリ600についてのものと同じまたは同様のフォーマットに従った分岐ターゲットである。オーバーフローアドレスバッファに利用可能なアドレスの追加のビットを必要とする分岐は、図8のBTBエントリ800などでの第三分岐タイプのBTBに割り当てられる。したがって、1ビットのUSEOAフィールドは、アドレスの追加のビットについての必要性に対応するために、いくつかの実施形態による第二分岐タイプのBTBに含まれない。本明細書で言及されるように、OAは、オーバーフローアドレス、またはその中の特定のフィールド、ビット、もしくはフラグを指す。
図8は、いくつかの実施形態による、第三BTBテーブルについての第三BTBエントリ800のブロック図である。以下は、図4の第三BTBテーブル403、または図5の第三BTBテーブル506内のBTBエントリなどについての、第三分岐タイプのBTBエントリ800内のエントリについてのフィールド及び位置ビットの記述である。各BTBエントリ800は、ゼロ(0)から71までインデックス付けされた72ビット幅であり、以下の、位置[71]における1ビットに関するUNUSED801、位置[70]における1ビットに関するAUXPREDEN802、位置[69]における1ビットに関するSHRD803、位置[68]における1ビットに関するTID804、位置[67:56]における12ビットに関するTAG805、位置[55:54]における2ビットに関するLE806、位置[53:52]における2ビットに関するBR1LBIAS807、位置[51]における1ビットに関するPAIR808、位置[50:46]における5ビットに関するBRTYPE809、位置[45:40]における6ビットに関するBR1END810、及び位置[39:38]における2ビットに関するBR0LBIAS811というフィールドを含む。フィールド{BREND812,BRTGT814}のグループは、位置[37:0]においてそれぞれの可変長範囲813、815にわたって分散される。例えば、BREND812は、(Y+1)から37に置かれており、BRTGT814は、0から(Y)に置かれており、ここでYは整数である。UNUSED801は、対応するマクロ位置に未使用のビットがあるかどうかを示す。AUXPREDEN802は、ループ出口予測器などの補助予測器の有効化を示す。SHRD803は、BTBエントリがスレッド間で共有されるか、共有可能であるかを示す。TID804はスレッドIDである。LE806は、レングス符号化を指し、第一BTBテーブル401などの第一BTBテーブルの同じLEフィールドについてのもの、及び図6のLE605に関して上述されるようなものと、同じ符号化を使用する。図8では、BR1LBIAS807は、Branch1についてローカルバイアスがあるかどうかを示す。PAIR808は、本明細書の他の箇所でさらに説明されるように使用される。いくつかの実施形態による第三分岐タイプのBTBエントリ800についてのBRTYPE809は、第一BTBエントリ600などの他のBTBテーブルに関するBRTYPEについて説明されるように符号化される。第三分岐タイプのBTBエントリ800についてのBR1END810は、[5:0]の範囲に関して1インクリメントされるBranch1についての分岐エンドポインタである。BR0LBIAS811は、Branch0についてローカルバイアスがあるかどうかを示す。BREND812及びBRTGT814は、第一BTBテーブル401などの第一BTBテーブルからのフィールドUSEOA、OAIDX、BR0END、BR1TGT、及びBR0TGTに関連して、それぞれ、Branch0及びBranch1について1つまたは2つの分岐ターゲットを格納するために使用される。第一、第二、及び第三分岐タイプのBTBテーブル401~403、及びそれぞれのBTBエントリ600、700、800を参照して記述されるビット(幅)及び位置の数は、一例に過ぎない。プロセッサまたはシステムに複数のBTBテーブルを実装する場合、記述されたフィールド、または他の変数もしくはフィールドについてのビット及び位置の他の数が可能である。
例示的な複数のBTBテーブル置き換えポリシーに関して、いくつかの可能な実施形態の1つとして以下が提供される。この実施形態では、第一のレベル1のBTBテーブルは、1セットのエントリのうちの1つ以上がフルになるまで、すべてのBTBエントリを最初に許容し、この実施例でのセットは、エントリのセット関連グループのセットを指す。別の実施例では、第一のレベル1のBTBテーブルは、レベル1のBTBテーブルがフルになるまで、すべてのBTBエントリを最初に許容する。次に、プロセッサまたはプロセッサコアが動作すると、BTBエントリは、複数のレベル2のBTBテーブルのうちの1つにエビクトされ、これら複数のレベル2のBTBテーブルは、図3のBTBテーブル301~303、及び図4のBTBテーブル401~403などの、ターゲットアドレスサイズまたは分岐タイプに基づいてそれぞれ設計される。例えば、置き換えポリシーは、図3のBTBテーブル301~303、及び図4のBTBテーブル401~403などの各レベル2のBTBテーブルについてのフルLRUである。分岐タイプのBTB置き換えポリシーは、最近最も使用されていない(LRU)か、最近最も使用された(MRU)かいずれかとしてエントリをマーク付けすることをサポートする。セットのウェイは、ウェイがクリアされた後にLRUとしてマーク付けされることにより、次回、そのセットに新しいBTBエントリが書き込まれ、空いたエントリが置き換えられ、有効なエントリは上書きされない。ウェイがインストールされた後、ウェイはMRUとしてマーク付けされることにより、ウェイは置き換えのためにキューの最後に移動する。以下の表1は、レベル1がレベル1のメモリを指すケース、レベル2がレベル2のメモリを指すケースなどを詳述する。
以下の記述は、いくつかの実施形態によるパイプライン操作に関連するさらなる詳細を提供する。分岐タイプのBTBは、パワーフィルタによってキャンセルされない限り、予測フローごとに読み出される。読み出しは、第一位置BP0で開始され、BP4からBPN1にリダイレクトされ、ここでNは後続のサイクルを指す。レベル1のBTBはミスする/レベル2のBTBはヒットするというスワップケースのパイプラインタイミングを以下の表2に示す。レベル1のBTBからのビクティムウェイと、レベル2のBTBからのヒットウェイとの両方が記録される。ビクティムウェイは、特別な配慮を必要とする、ヒットウェイとは異なるレベル2のBTBテーブル及びバンクを含むことができる。例えば、レベル2のビクティムバンクは、LRU状態に基づいて選択され、上書きされる。レベル1のBTB、及びレベル2のBTBへの書き込みは、実際の書き込みが位置BP5にありながら、BP4にアサートされる書き込みイネーブル(WrEn)信号によって発生する。
以下の記述は、いくつかの実施形態による、図4のプロセッサ400などのプロセッサにおけるレベル2のBTB物理構成に関するさらなる詳細を提供する。第一のレベル2のBTBテーブルは、4ウェイに関する512セット、エントリあたり36ビット、セットあたり2個のマクロ、72bのマクロタイプ、及び合計8個のマクロを含む。第二のレベル2のBTBテーブルは、4ウェイに関する256セット、エントリあたり64ビット、セットあたり4個のマクロ、64bのマクロタイプ、及び合計8個のマクロを含む。第三のレベル2のBTBテーブルは、5ウェイに関する512セット、エントリあたり72ビット、セットあたり5個のマクロ、72bのマクロタイプ、及び合計20個のマクロを含む。
インデックスの1つ以上の上位ビットは、読み出しイネーブルとして使用されるため、1つのマクロの半分だけが第一のレベル2のBTBテーブルについてのウェイあたりの読み出しであり、1つのマクロが第二及び第三のレベル2のBTBテーブルについてのウェイあたりの読み出しである。第一及び第三のレベル2のBTBテーブルが図4のレベル1のBTBテーブル401などのレベル1のBTBテーブルの2倍多いセットを含むことから、タグの下位ビットは、これらのBTBテーブルについてのインデックスの最上位ビット(MSB)として使用されるので、BTBテーブルは、12ビットのタグのみを格納する必要がある。
比較的小型のクライアントデバイスまたは携帯電話用のプロセッサの実施形態では、複数の分岐タイプのBTBテーブルの使用は、パフォーマンスに比べて高い電力コストを有するため、消費電力を減らす追加の方法を実行することができる。例えば、静的な方法は、一部またはすべての時間についてのレベル2のBTBテーブルのパワーゲーティングと、一部またはすべての時間についてのレベル2のBTBテーブルのクロックゲーティングを含む。各ステップでは、BIOSまたはヒューズなどによってレベル2のBTBイネーブル機能を構成することができる。消費電力を減らす動的な方法は、特定のレベル2のBTBテーブルがいつ必要になるかを認識する追加の制御によって適応的にレベル2のBTBテーブルをパワーゲーティングすることを含む。別の動的な方法は、アプリケーションによる電力の好ましい使用に応じて、またはアプリケーションがアクティブであるオペレーティングシステム、ファームウェア、もしくはデバイスの電力設定に応じて、アプリケーションがレベル2のBTBテーブルのその使用を適応させるように、オペレーティングシステム、ファームウェアなどによって実行されるアプリケーションを適応させることを含む。
以下の記述は、図3の第一BTBテーブル301、第二BTBテーブル302、及び第三BTBテーブル303、ならびに図4の対応する類似のテーブルなどの複数のBTBテーブルによる使用のためのオーバーフローアドレスバッファに関するさらなる詳細を提供する。予測構造にすべてのビットを格納する必要なしに、最大49ビットのターゲットサイズの分岐をサポートするために、オーバーフローアドレスバッファは、プロセッサに提供される。オーバーフローアドレスバッファを使用して、ある特定のビット数、例えば分岐ターゲットアドレスの先頭の、または1セットの17ビットなどを格納する。いくつかの実施形態によれば、BTBテーブルなどの予測器構造によって参照される先頭の17ビットがポインタを介してオーバーフローアドレスバッファにあることによって、BTBテーブル内のストレージスペースを節約する。オーバーフローアドレスバッファは、多数のターゲットアドレスビットを格納するために必要とされる場合に使用される。テストによれば、トレース分析は、所与のトレースについて、フェッチアドレスの先頭の17ビットが、1セットの命令内のさまざまな分岐に対して限られた数の値のみを取ることを示す。
いくつかの実施形態によれば、オーバーフローアドレス(OA)バッファは、32個のエントリを含み、各エントリは、本明細書で説明されるように、位置[48:32]におけるBTBエントリ内の位置に仮想アドレスについての単一のフィールドを含む。各オーバーフローアドレスバッファのエントリは、スレッド間で共有される。予測時に、オーバーフローアドレスバッファは、BTBが提供する5ビットのポインタに基づいて、アドレスの先頭の17ビットをBTBに提供する。ポインタが予測器の1つに記録されたことから、予測時に使用されたオーバーフローアドレスバッファのエントリが上書きされた可能性がある。このような場合には、予測は、誤っており、リダイレクトされることにより、予測器が訂正させられる。異なる予測器は、予測パイプの異なるステージにおいてオーバーフローアドレスバッファを読み出すため、オーバーフローアドレスバッファからの複数の同時読み出しを必要とする。
オーバーフローアドレスバッファは、BTBのトレーニング中に次のように割り振られる。分岐ターゲットが範囲[48:32]についての現在のアドレスと異なるかどうかをトレーニングが最初に判定する場合には、オーバーフローアドレスバッファが必要とされる。オーバーフローアドレスバッファが必要とされる場合、現在のオーバーフローアドレスバッファのエントリを、位置[48:32]におけるターゲットアドレスと比較して、オーバーフローアドレスバッファのエントリが位置[48:32]における所望のターゲットアドレスをすでに含むかどうかを判定する。マッチング時に、マッチングするオーバーフローアドレスバッファのインデックスは、予測器のBTBテーブルに記録される。オーバーフローアドレスバッファのエントリが位置[48:32]におけるターゲットにマッチングしない場合、フルLRU置き換えポリシーを使用して、オーバーフローアドレスバッファに新しいエントリが割り振られる。いくつかの実施形態によれば、書き込みをトレーニングすることは、投機的であり、いくつかのオーバーフローアドレスバッファのエントリは、不適切なパス上にありながら割り振られたために、全く有用ではないものが割り振られる場合がある。
以下の記述は、BTBトレーニングに関連するさらなる詳細を提供する。予測がリダイレクトされる(予測パイプラインの復号及び実行ステージなどにおいて)ときに、BTBテーブルをトレーニングアルゴリズムによって更新し、この予測がプログラムシーケンス中に再度発生するときに、予測アドレスでの予測精度を向上させる。リダイレクトを受信するときに、リダイレクトソースからのリダイレクトタイプ、分岐ターゲット、及びEndAddrを、予測履歴バッファからの予測分岐タイプ、分岐ターゲット、EndAddr、及び他の状態とともに使用して、どの種類のトレーニング/更新アクションが必要とされるかを決定する。
次のリダイレクトのケースは、1つのBTBテーブル、または1セットのBTBテーブルをトレーニングする必要がある。ケース1:成立と予測された分岐がいかなる分岐ともマッチングしなかったことは、予測に使用されたBTBエントリを無効にすることに対応する。ケース2:予測された分岐がないことは、BTBで新しく見つかった分岐をトレーニングにすることに対応する。ケース3:リダイレクトされた分岐EndAddrは、いずれかの予測された分岐のEndAddrにマッチングせず、BTBで新しく見つかった分岐をトレーニングすることに対応する。ケース4:リダイレクトされた分岐EndAddrは、予測された分岐のEndAddrにマッチングするが、Typeにはマッチングせず、BTBで分岐タイプを更新することに対応する。この4番目のケースは、分岐を動的または可変としてマーク付けするために分岐タイプを変更する必要がある場合のケースを含む。
BTBトレーニングプロセスは、トレーニングパイプを介して行われる。各スレッドは、スレッドについて最後に確認されたリダイレクトに関する情報を捕捉し、BTB更新が要求されているかどうかを示す誤予測レジスタに関連付けられる。トレーニングパイプは、要求に基づいて2つのスレッド間で選択し、両方のスレッドがBTBトレーニングを同時に要求するときに発生する要求競合の場合に、ラウンドロビンを介して調停する。一般に、一方のスレッドについてのトレーニングは、他方のスレッドがすでにトレーニングパイプにある間に開始することができる。ただし、他方のスレッドが同じBTBインデックスについて現在トレーニングされており、この同じインデックスでの第二トレーニングによって可視であるBTBテーブルを時間内に更新しない場合、スレッドは選択されることができない。BTBトレーニングは、投機的に起こり、誤ったパスでリダイレクトが発生することにより、BTBを更新させる可能性がある。ただし、誤予測レジスタが上書きされる場合、スレッドに対して進行中のトレーニングはキャンセルされる。
トレーニングパイプは、トレーニング要求が与えられるサイクルBTN2で開始し、サイクルBTN1、サイクルBT0、サイクルBT1、サイクルBT2、サイクルBT3、サイクルBT4が続き、BTBが書き込まれるサイクルBT5で完了する。いくつかの実施形態によれば、図4の第一BTBテーブル401などの第一BTBテーブルのみが、新しいエントリ、または変更されたエントリによって更新される。トレーニングパイプは、1サイクルの間、予測パイプをストールするtrain-check-read(TCR)プロセスを開始する。TCRプロセスの1つの目的は、エントリがトレーニングルックアップ位置において現在、レベル1のBTBに存在するか、レベル2のBTBテーブルのうちの1つに存在するかを確認することである。マッチングがレベル2のBTBテーブルで見つかる場合、TCRプロセスは、レベル2のBTBと、レベル1のBTBとの間にスワップをトリガした後に、トレーニングフローを繰り返す。
レベル2のBTBにヒットしないTCRプロセスに続いて、さまざまなトレーニングタスクが次のように処理される。無効化は、TCRがヒットする場合にのみ実行される。新しい書き込み及び更新について、BTB更新トレーニングは、誤予測された分岐をBTBエントリヒットとマージする、新しいBTBエントリを作成する、またはこれら両方のアクションを実行する。さまざまなシナリオは次のとおりである。TCRプロセスがレベル1のBTBでミスするときに、置き換えポリシーに基づいてウェイを選択すること、及び該当する場合には選択されたエントリをレベル2のBTBにエビクトすることなどによって、ルックアップアドレスに新しいBTBエントリを作成する。いくつかの実施形態では、TCRプロセスは、本明細書に記載されるようにミスを考慮し、後続のステップを実行するときに、BTBテーブルの3つのレベルのうちの3つすべてのエントリをチェックする。
TCRプロセスがBTBテーブルでヒットするなど、レベル1のBTBでヒットするときに、ルックアップアドレスには既存のBTBエントリがある、すなわち、このBTBエントリにはすでに1つまたは2つの分岐がある。トレーニングタスクが更新である場合、誤予測EndAddrは、見つかった分岐のうちの1つにマッチングする。それ以外は、新しい分岐を導入する必要がある。BTBに書き戻される必要がある、最大3つの分岐がある。これらの分岐は、EndAddrに基づいて順序付けされ、Pos0、Pos1及びPos2とラベル付けされる。次のケースは、以下のとおりに処理される。ケース1は、Pos0のみが有効である場合に発生する。次に、TCRルックアップアドレスにおいて、Pos0分岐をトレーニングすることを実行する。ケース2は、Pos0及びPos1のみが有効である場合に発生する。Pos0及びPos1の分岐を対にすることができる場合、この対をトレーニングすることを、TCRルックアップアドレスで実行する。それ以外は、Pos1が誤予測された分岐である場合、TCRルックアップアドレスではPos0のみを、予測ウィンドウ内の「最後ではない」(NLIPW)としてトレーニングし、Pos1に対して新しいトレーニングフローをPos0EndAddr+1ルックアップアドレスで開始する。Pos1が誤予測された分岐ではない場合、トレーニングはドロップされる。ケース3は、Pos0、Pos1及びPos2が有効である場合に発生する。Pos0分岐及びPos1分岐を対にすることができる場合、この対をTCRルックアップアドレスではNLIPWとしてトレーニングし、Pos2が誤予測された分岐である場合、Pos2に対して新しいトレーニングフローをPos1EndAddr+1ルックアップアドレスで開始する。Pos2が誤予測された分岐ではない場合、トレーニングはドロップされる。それ以外は、Pos0のみをTCRルックアップアドレスではNLIPWとしてトレーニングする。Pos0が誤予測された分岐ではない場合、誤予測された分岐に対して新しいトレーニングフローをPos0EndAddr+1ルックアップアドレスで開始する。ここでも、Pos1、Pos2、またはPos1及びPos2の両方をドロップする。
上記のトレーニングプロセスは、誤予測された分岐の前のすべての分岐を保持しようとし、誤予測された分岐をTCRフローによってインストールしようとする。各リダイレクトは、2つ以下のトレーニングフローをトリガするように制限されているため、誤予測された分岐をトレーニングすることが保証されない。ただし、エントリをNLIPWとマーク付けすることにより、次の予測を引き起こし、予測ウィンドウをいくつかの予測に分割するため、新しい分岐を最終的にトレーニングすることができる。各ルックアップアドレスでのTCRフローは、レベル1/レベル2のBTBスワップをトリガし、TCRフローをリプレイさせる。その結果、所与のリダイレクトに対して最大4つのTCRフローが発生することができる。
図9は、いくつかの実施形態による、複数のBTBテーブルのうちの1つにターゲットアドレスサイズごとに分岐ターゲットアドレスを格納する方法900である。方法900は、図1に示される命令パイプラインアーキテクチャ100のいくつかの実施形態、図2に示される処理システム200のいくつかの実施形態、及び図3のプロセッサ300のいくつかの実施形態において実施される。図示された実施形態では、プロセッサ命令は、図3に示されるプロセッサ300内のプロセッサコア305などの処理システム内の1つ以上のプロセッサコア上での実行のために、行われているか、割り振られているか、スケジュールされている。本明細書に考察されるように、プロセッサ命令は分岐命令を含む。
ブロック901では、BTBトレーニングロジックは、ターゲットアドレスを分岐命令の予測アドレスと比較することによって、命令ターゲットアドレスサイズを決定する。この方法は、ターゲットアドレスサイズに基づいて、予測されたターゲットアドレスを格納する複数のサイズベースのBTBテーブルのうちの1つを決定する、または選択することを含む。例えば、ブロック902では、プロセッサは、ターゲットサイズが第一サイズ「サイズ1」以下であるかどうかを決定する。そうである場合、ブロック903では、プロセッサは、図3の第一BTBテーブル301などのサイズベースのBTBテーブルの第一サイズベースのBTBエントリにBTBエントリを格納する。そうでない場合、ブロック904では、プロセッサは、ターゲットアドレスサイズが、3つのサイズのBTBシステムについての第二サイズ「サイズ2」以下であるかどうかを決定する。そうである場合、ブロック905では、プロセッサは、分岐ターゲットを第二サイズベースのBTBテーブルに格納する。例えば、ターゲットアドレスは、図3の第二BTBテーブル302に格納されている。ブロック904では、分岐命令タイプが第二サイズ「サイズ2」以下でない場合、ブロック906では、プロセッサは、第三サイズベースのBTBに分岐ターゲットを格納する。
図10は、いくつかの実施形態による、複数のBTBテーブルのうちの1つに分岐タイプごとに分岐ターゲットアドレスを格納する方法を示す方法1000である。方法1000は、図1に示される命令パイプラインアーキテクチャ100のいくつかの実施形態、図2に示される処理システム200のいくつかの実施形態、図4のプロセッサ400、及び図5のプロセッサ500において実施される。図示された実施形態では、プロセッサ命令は、図4のプロセッサ400内のプロセッサコア405などの処理システム内の1つ以上のプロセッサコア上での実行のために、行われているか、割り振られているか、スケジュールされている。本明細書に考察されるように、プロセッサ命令は分岐命令を含む。
方法1000は、3つのBTBテーブルシステムの例示的なコンテキストに記述される。ブロック1001では、プロセッサは、条件命令についてのBTBエントリタイプを決定する。分岐命令タイプに基づいて、ブロック1002では、プロセッサは、分岐命令タイプがBTBテーブルシステムについて高い値のBTBエントリであるかどうかを決定する。そうである場合、ブロック1003では、プロセッサは、図4のBTBテーブル401などの第一BTBテーブルにBTBエントリを格納する。そうでない場合、ブロック1004では、プロセッサは、分岐命令タイプが中間の値のBTBエントリであるかどうかを決定する。そうである場合、ブロック1005では、プロセッサは、図4のBTBテーブル402などの第二BTBテーブルにBTBエントリを格納する。そうでない場合、ブロック1006では、プロセッサは、アドレスを含むBTBエントリを、図4のBTBテーブル403などの第三BTBテーブルのエントリに格納する。
高い値、中間の値などに関して、ある特定のタイプである条件分岐命令は、高い値、中間の値、または他のタイプのBTBエントリであってもよい。例えば、ジャンプタイプは高い値のエントリであってもよく、戻りタイプの命令は中間の値のエントリであってもよい。いくつかの実施形態によれば、エントリの値は、エントリを保持しないことと比較して、またはBTBもしくはBTBテーブルにセーブされ得る他の可能なエントリと比較して、複数のプロセッササイクルをセーブするエントリに対応する。分岐命令が今後のプロセスサイクルに有用であるなどの価値がある場合、プロセッサは、分岐ターゲットをBTBテーブルに格納する。例えば、ターゲットアドレスは、図4のこのタイプのBTBテーブル401~403のうちの1つに格納されている。分岐命令タイプが有用な分岐タイプでない場合、プロセッサは、ターゲットアドレスをBTBテーブルのエントリに格納しない。
本明細書に開示されるように、いくつかの実施形態では、プロセッサは、命令実行パイプラインと、第一分岐ターゲットバッファ(BTB)テーブルのエントリの第一数を含む第一BTBテーブルであって、各第一BTBテーブルのエントリは第一タグ及び第一ターゲットアドレスを含み、各第一ターゲットアドレスは第一幅を有する、第一BTBテーブルと、第二BTBテーブルのエントリの第二数を含む第二BTBテーブルであって、各第二BTBテーブルのエントリは第二タグ及び第二ターゲットアドレスを含み、各第二ターゲットアドレスは第一幅とは異なる第二幅を有する、第二BTBテーブルと、所与の予測アドレスに対して予測されたターゲットアドレスを提供するように構成される分岐予測器とを含み、プロセッサは、分岐命令の分岐特性に基づいて、第一BTBテーブルの第一BTBテーブルエントリか、第二BTBテーブルの第二BTBテーブルエントリかいずれかに第一ターゲットアドレスを含む分岐記述子を格納するように構成される。一態様では、分岐特性は、分岐ターゲットアドレスサイズである。別の態様では、分岐特性は分岐タイプである。さらに別の態様では、第一BTBテーブルのエントリは、ジャンプ分岐命令、呼び出し分岐命令、戻り分岐命令、及び条件分岐命令のうちの少なくとも1つに対して設定される。
一態様では、分岐特性は、BTBエントリに格納される分岐の数である。別の態様では、分岐特性は、BTBエントリのスレッド識別子である。さらに別の態様では、プロセッサは、第一メモリレベルキャッシュ及び第二メモリレベルキャッシュを含み、第一BTBテーブル及び第二BTBテーブルは、プロセッサの同じメモリレベルキャッシュに含まれる。さらに別の態様では、第一BTBテーブルの第一BTBテーブルエントリは、予測ルックアップに対してNウェイアソシアティブであり、第二BTBテーブルの第二BTBテーブルエントリは、予測ルックアップに対してMウェイアソシアティブであり、M及びNは1以上であり、MはNとは異なる。
別の態様では、第一BTBテーブルエントリの第一数は、第二BTBテーブルエントリの第二数とは異なる。さらに別の態様では、各BTBテーブルエントリは、それぞれのBTBエントリを、セット内の最近最も使用された(MRU)ステータス、及び最近最も使用されていない(LRU)ステータスのうちの1つとしてマーク付けする、最近使用されたステータスビットを含み、プロセッサは、最近使用されたステータスビットの状態に基づく置き換えポリシーに従って、セット内のBTBエントリをエビクトするように設定される。
本明細書に開示されるように、いくつかの実施形態では、方法は、分岐命令に対する誤予測によって引き起こされるリダイレクトに基づいて、分岐ターゲットバッファ(BTB)エントリの分岐タイプを決定することと、BTBエントリの決定された分岐タイプに基づいて、プロセッサの第一分岐ターゲットバッファ(BTB)テーブルの第一エントリであって、この第一エントリはBTBエントリの第一分岐タイプに対応する第一ターゲットアドレス幅を有する、第一エントリ、及びプロセッサの第二BTBテーブルの第二エントリであって、第二エントリは第一分岐タイプとは異なる第二分岐タイプに対応する、第一ターゲットアドレス幅とは異なる第二ターゲットアドレス幅を有する、第二エントリのうちの1つにBTBエントリを格納することとを含む。一態様では、分岐タイプは、分岐ターゲットアドレスサイズである。別の態様では、BTBエントリの格納は、プロセッサの予測トレーナーユニットによって実行される。
一態様では、この方法は、セット内で最近最も使用された(MRU)ステータス、及び最近最も使用されていない(LRU)ステータスのうちの1つとしてBTBエントリをマーク付けする最近使用されたステータスビットに基づいて第一BTBテーブルまたは第二BTBテーブルのBTBエントリを識別することと、そこにエントリを格納する前に、第一BTBテーブルまたは第二BTBテーブルの識別されたBTBエントリをエビクトすることとを含む。別の態様では、第一BTBテーブル及び第二BTBテーブルは、プロセッサの同じメモリレベルキャッシュに含まれる。さらに別の態様では、この方法は、BTBエントリを格納する前に、分岐命令の命令タグに基づいて、第一BTBテーブル及び第二BTBテーブルのうちの少なくとも1つを検索することと、BTBエントリを格納する前に、BTBエントリが第一BTBテーブル及び第二BTBテーブルのうちの少なくとも1つに見つからないことを識別することとを含む。さらに別の態様では、この方法は、BTBエントリのターゲットアドレスのサイズが第一BTBテーブルまたは第二BTBテーブルのそれぞれのBTBエントリについてのアドレスサイズを上回る場合に、BTBエントリのターゲットアドレスのオーバーフロービットをオーバーフローBTBテーブルに格納することを含む。
本明細書に開示されるように、いくつかの実施形態では、方法は、プロセッサのBTBの複数の分岐ターゲットバッファ(BTB)テーブルをルックアップすることによって、現在予測されたブロックの終了アドレス、及び次の予測されたブロックの開始アドレスを予測することであって、BTBは現在の予測アドレスでは第一BTBテーブル及び第二BTBテーブルを含む、予測することと、予測された終了アドレス、及び予測された開始アドレスのうちの少なくとも1つに基づいて、プロセッサでの実行のための命令の一部分として予測を提供することとを備える。一態様では、第一BTBテーブルのBTBエントリは、第二BTBテーブルのBTBエントリのターゲットアドレスフィールドの第二幅よりも小さい第一幅のターゲットアドレスフィールドを含む。別の態様では、現在の予測アドレスは、プログラムカウンタに関連している。
いくつかの実施形態では、前述の装置及び技法は、図1~7を参照して前述されたシステム、プロセッサ、及びBTBテーブルなど、1つ以上の集積回路(IC)デバイス(集積回路パッケージまたはマイクロチップとも称される)を含むシステムに実装される。電子設計自動化(EDA)及びコンピュータ支援設計(CAD)ソフトウェアツールは、これらのICデバイスの設計及び製作で使用され得る。それらの設計ツールは典型的には、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、1つ以上のICデバイスの回路を表すコード上で作動して、回路を製造するための製造システムを設計するかまたは適応させるためのプロセスの少なくとも一部を実行するようにコンピュータシステムを操作するためにコンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、または命令及びデータの組み合わせを含むことができる。設計ツールまたは製作ツールを表すソフトウェア命令は、典型的には、コンピューティングシステムにアクセス可能なコンピュータ可読記憶媒体に格納される。同様に、ICデバイスの設計または製造の1つ以上の段階を表すコードは、同じコンピュータ可読記憶媒体または異なるコンピュータ可読記憶媒体に格納され、そこからアクセスされ得る。
コンピュータ可読記憶媒体は、命令及び/またはデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによりアクセス可能な任意の非一時的記憶媒体、または非一時的記憶媒体の組み合わせを含み得る。このような記憶媒体には、光学媒体(例えばコンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイディスク)、磁気媒体(例えばフロッピーディスク、磁気テープ、または磁器ハードドライブ)、揮発性メモリ(例えばランダムアクセスメモリ(RAM)またはキャッシュ)、不揮発性メモリ(例えば読み出し専用メモリ(ROM)またはフラッシュメモリ)、または微小電気機械システム(MEMS)ベース記憶媒体が含まれ得るが、これらに限定されない。コンピュータ可読記憶媒体は、コンピューティングシステムに組み込まれてもよく(例えば、システムRAMまたはROM)、コンピューティングシステムに固定して取り付けられてもよく(例えば、磁気ハードドライブ)、コンピューティングシステムに取り外し可能に取り付けられてもよく(例えば、光学ディスクまたはユニバーサルシリアルバス(USB)ベースフラッシュメモリ)、または有線もしくは無線ネットワークを介してコンピュータシステムに結合されてもよい(例えば、ネットワークアクセス可能ストレージ(NAS))。
いくつかの実施形態において、上述される技法の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサにより実施され得る。ソフトウェアは、非一時的なコンピュータ可読記憶媒体上に、格納される、またはその他の方法により有形に具現化される、実行可能命令の1つ以上のセットを含む。ソフトウェアが1つ以上のプロセッサによって実行されるときに、1つ以上のプロセッサを操作して、上記の技法の1つ以上の態様を実行する命令及び特定のデータを、ソフトウェアは含むことができる。非一時的なコンピュータ可読記憶媒体には、例えば、磁気ディスクまたは光ディスクの記憶デバイス、フラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)などのソリッドステート記憶デバイス、またはその他の単一または複数の不揮発性メモリデバイスなどが含まれ得る。非一時的なコンピュータ可読記憶媒体上に格納される実行可能な命令は、1つ以上のプロセッサにより、解釈される、またはその他の方法により実行可能である、ソースコード、アセンブリ言語コード、オブジェクトコード、または他の命令フォーマットにあってもよい。
一般的な記述の中で上述されるすべてのアクティビティまたは要素が必要なわけではなく、特定のアクティビティまたはデバイスの一部が必要ではない場合があり、記述されるそれらに加えて、1つ以上のさらなるアクティビティが実行され得る、または1つ以上のさらなる要素が含まれてもよい。さらに、アクティビティがリストにされている順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して記載された。しかしながら、当業者は、下記の特許請求の範囲に記載されるように本開示の範囲から逸脱することなく、さまざまな変更及び変形を行うことが可能であることを理解する。したがって、本明細書及び図面は、限定的な意味ではなく例示的な意味で考えられるべきであり、すべてのこれらの変更形態は、本開示の範囲内に含まれることが意図される。
利益、他の利点、及び問題に対する解決策を、具体的な実施形態に関して、上記にて説明してきた。しかしながら、課題に対する利点、長所、解決策、及び何らかの利点、長所または解決策を生じさせ得る、もしくは顕著にし得る特徴(複数可)は、いずれかまたはすべての請求項の、重要であるか、必要であるか、または本質的特徴として解釈されるというわけではない。さらに、開示された発明の主題が本明細書に教示の利益を有する当業者へ明らかである、異なるが均等な方式において変更され、実施され得るように、上記に開示される特定の実施形態は、例示に過ぎない。下記の特許請求の範囲に記述される以外の、本明細書に示される構成または設計の詳細への制限を意図しない。したがって、上記に開示される特定の実施形態が変更、または修正されてもよく、すべてのこれらのような変形形態が開示された発明の主題の範囲内にあるとみなされる。その結果、本明細書に求められる保護は、下記の特許請求の範囲内に記載されるようなものである。