JP2019526873A - 分岐ターゲットバッファの圧縮 - Google Patents

分岐ターゲットバッファの圧縮 Download PDF

Info

Publication number
JP2019526873A
JP2019526873A JP2019532918A JP2019532918A JP2019526873A JP 2019526873 A JP2019526873 A JP 2019526873A JP 2019532918 A JP2019532918 A JP 2019532918A JP 2019532918 A JP2019532918 A JP 2019532918A JP 2019526873 A JP2019526873 A JP 2019526873A
Authority
JP
Japan
Prior art keywords
branch
target buffer
branch target
compressed
uncompressed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2019532918A
Other languages
English (en)
Other versions
JP6796717B2 (ja
Inventor
アール. ハヴリール スティーブン
アール. ハヴリール スティーブン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2019526873A publication Critical patent/JP2019526873A/ja
Application granted granted Critical
Publication of JP6796717B2 publication Critical patent/JP6796717B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

分岐ターゲットバッファ(BTB)動作を改善する技術である。圧縮BTBは、非圧縮BTBと共に分岐予測ユニット内に含まれている。サイクル毎に最大2つの分岐命令の予測をサポートするために、非圧縮BTBは、最大2つの分岐予測に関するデータをそれぞれ記憶するエントリを含む。圧縮BTBは、単一の分岐命令を非圧縮BTBに記憶することがそのバッファ内のスペースを無駄にするような状況のために、当該単一の分岐命令のみに関するデータを記憶するエントリを含む。サイクル毎に2つの分岐ルックアップをサポートするために、2つの分岐に関する予測データが、単一のエントリに共に記憶されるために共通する特定の機能(キャッシュラインアドレス等)を有する必要があるという事実に起因して、非圧縮BTB内のスペースが無駄になる。【選択図】図3

Description

(関連出願の相互参照)
本願は、2016年8月30日に出願された米国特許出願第15/252,164号の利益を主張し、その内容は、完全に記載されているかのように、参照により本明細書に組み込まれる。
マイクロプロセッサでは、命令は、分岐が発生するまで順次実行するためにフェッチされる。分岐は、命令がフェッチされるアドレスの変更を生じさせ、命令フェッチスループットの遅延に関連する場合がある。例えば、分岐が成立するかどうかを判別すると共に分岐先を判別するために当該分岐の評価を要する場合がある。しかしながら、分岐が実際に命令実行パイプラインに入るまで当該分岐を評価することができない。分岐の遅延は、分岐がフェッチされる時間と、その分岐の結果を判別し、これにより何れの命令が次にフェッチされる必要があるかを判別するために分岐を評価する時間と、の間の差に関連している。
分岐予測は、命令アドレス及び分岐評価履歴に基づいて分岐命令の存在及び結果を予測することによって、この遅延を軽減するのに役立つ。分岐予測技術は、分岐条件付き判別(例えば、成立する又は成立しない)のグローバル履歴及び最新のプログラムカウンタ値を使用して、分岐が存在するかどうか及び分岐が成立するかどうかの予測を行う。分岐ターゲットバッファは、プログラムカウンタアドレスを分岐ターゲットと関連付ける情報を記憶する。分岐ターゲットバッファ内にエントリが存在することは、当該エントリに関連するプログラムカウンタに分岐が存在することを暗黙的に示している。分岐予測子は、分岐予測判別を行うために、グローバル履歴及び分岐ターゲットバッファデータを使用することができる。分岐命令に関連する遅延のために、効率的な分岐予測及び好適に設計された分岐予測ロジックが、マイクロプロセッサ設計において重要である。
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が得られるであろう。
1つ以上の開示された実施形態を実施することができる例示的なデバイスのブロック図である。 図1のプロセッサ内に配置された命令実行パイプラインのブロック図である。 例示的な分岐予測ユニットを示すブロック図である。 一例による、非圧縮分岐ターゲットバッファ及び圧縮分岐ターゲットバッファの両方のエントリを示す図である。 一例による、圧縮分岐ターゲットバッファ及び非圧縮分岐ターゲットバッファを使用して分岐ターゲット予測データを取得する方法のフロー図である。 一例による、非圧縮分岐ターゲットバッファ及び圧縮分岐ターゲットバッファを更新する方法のフロー図である。
圧縮分岐ターゲットバッファは、非圧縮分岐ターゲットバッファと共に分岐予測ユニットに含まれる。サイクル毎に最大2つの分岐命令の予測をサポートするために、非圧縮分岐ターゲットバッファは、最大2つの分岐予測に関するデータをそれぞれ記憶するエントリを含む。圧縮分岐ターゲットバッファは、単一の分岐命令を非圧縮分岐ターゲットバッファに記憶することが当該バッファ内のスペースを無駄にするような状況のために、単一の分岐命令のみに関するデータを記憶するエントリを含む。2つの分岐に関する予測データが、単一のエントリに共に記憶されるために共通する特定の機能(キャッシュラインアドレス等)を有する必要があるという事実に起因して、非圧縮分岐ターゲットバッファ内のスペースが無駄になる。ある分岐が他の分岐とかかる機能を共有していない場合、当該分岐は、非圧縮分岐ターゲットバッファ内に独自のエントリを必要とする。代わりに、その分岐は、圧縮分岐ターゲットバッファに記憶される。
図1は、本開示の態様が実施される例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス100は、プロセッサ102と、メモリ104と、ストレージデバイス106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、入力ドライバ112及び出力ドライバ114をオプションで含むことができる。デバイス100は、図1に示されていない追加のコンポーネントを含んでもよいことを理解されたい。
プロセッサ102は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサを含み、各プロセッサコアはCPU又はGPUである。メモリ104は、プロセッサ102と同じダイ上に配置されてもよいし、プロセッサ102とは別に配置されてもよい。メモリ104は、例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM若しくはキャッシュ等の揮発性又は不揮発性メモリを含む。
ストレージデバイス106は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等の固定又は取り外し可能なストレージデバイスを含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続(例えば、無線IEEE802信号を送信及び/若しくは受信するための無線ローカルエリアネットワークカード)を含む。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバック装置、1つ以上のライト、アンテナ又はネットワーク接続(例えば、無線IEEE802信号を送信及び/若しくは受信するための無線ローカルエリアネットワークカード)を含む。
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114は、オプションのコンポーネントであり、デバイス100は、入力ドライバ112及び出力ドライバ114が存在しない場合であっても同様に動作することに留意されたい。
図2は、図1のプロセッサ102内に配置された命令実行パイプライン200のブロック図である。命令実行パイプライン200は、データをメモリに出力し、命令実行パイプライン200内の要素(例えば、レジスタファイル218内のレジスタ等)の状態を変更する命令をメモリから取り出して実行する。
命令実行パイプライン200は、命令キャッシュ202を介してシステムメモリ(メモリ104等)から命令をフェッチするように構成された命令フェッチユニット204と、フェッチされた命令をデコードするように構成されたデコーダ208と、命令を処理するための計算を実行するように構成された機能ユニット216と、データキャッシュ220を介してシステムメモリからデータをロードし、システムメモリにデータを記憶するように構成されたロード/ストアユニット214と、命令に対する作業データを記憶するレジスタを含むレジスタファイル218と、を含む。リオーダ(reorder)バッファ210は、現在インフライトの命令を追跡し、インフライトの間にアウトオブオーダの実行を許容するにも関わらず命令のインオーダリタイアメントを保証する。「インフライト」命令は、リオーダバッファ210によって受信されたが、プロセッサのアーキテクチャの状態にコミットされた結果(例えば、レジスタファイルに書き込まれた結果等)を未だ有していない命令を指す。予約ステーション212は、インフライト命令を維持し、命令オペランドを追跡する。全てのオペランドが特定の命令の実行のために準備されている場合に、予約ステーション212は、命令を、実行するために機能ユニット216又はロード/ストアユニット214に送信する。完了した命令は、リオーダバッファ210へのリタイアメント(退避)のためにマークされ、リオーダバッファキュー210の先頭にある場合にリタイアされる。リタイアメントは、命令の結果をプロセッサのアーキテクチャの状態にコミットする動作を指す。例えば、加算命令によって、加算結果をレジスタに書き込むことと、ロード命令によって、ロードされた値をレジスタに書き込むことと、又は、分岐命令によって、命令フローを新たな位置にジャンプさせることと、の全ては、命令のリタイアメントの例である。
命令実行パイプライン200の様々な要素は、共通データバス222を介して通信する。例えば、機能ユニット216及びロード/ストアユニット214は、依存命令の実行のために予約ステーション212によって読み出され得る結果であって、実行が終了したインフライト命令の最終的な処理結果としてリオーダバッファ210によって読み出され得る結果を、共通データバス222に書き込む。また、ロード/ストアユニット214は、共通データバス222からデータを読み出す。例えば、ロード/ストアユニット214は、完了した命令の結果を共通データバス222から読み出し、ストア命令に対して、当該結果を、データキャッシュ220を介してメモリに書き込む。
通常、命令フェッチユニット204は、メモリ内の命令をシーケンシャルフェッチする。シーケンシャル制御フローは、命令パイプライン200に非シーケンシャルアドレスから命令をフェッチさせる分岐命令によって中断されることがある。分岐命令は、条件付きであってもよく、特定の条件が満たされる場合にのみ分岐を生じさせてもよいし、条件付きでなくてもよく、ターゲットを直接又は間接的に指定してもよい。直接的なターゲットは、命令バイト自体の定数によって指定され、間接的なターゲットは、何等かの計算によって指定される。直接的な分岐及び間接的な分岐は、条件付きであってもよいし、条件付きでなくてもよい。
命令のシーケンシャルフェッチは、命令実行パイプライン200にとって比較的単純である。命令フェッチユニット204は、実行のために連続して記憶された命令の大部分をシーケンシャルフェッチする。しかしながら、分岐命令は、いくつかの理由でかかるフェッチを中断することがある。より具体的には、分岐命令のタイプに応じて、命令デコーダ208が、命令が実際には分岐命令であると判別することと、機能ユニット216が、分岐命令のターゲットを計算することと、機能ユニット216が、分岐命令の条件を評価することと、のうち何れか又は全てが分岐命令の実行に関して行われてもよい。命令フェッチユニット204による実行のために分岐命令がフェッチ及び発行されるときと、分岐命令が命令実行パイプライン200によって実際に実行されるときと、の間に遅延が存在するので、命令フェッチユニット204は、分岐予測ユニット206を含む。
分岐予測ユニット206は、フェッチされる命令のアドレスに基づいて分岐条件付き予測(例えば、成立する又は成立しない)及び分岐ターゲット予測を生成する。分岐予測ユニット206は、様々な既知の技術の何れかを介して維持及び操作された分岐条件付き履歴と、命令プログラムカウンタを分岐ターゲットアドレスと相関させる分岐ターゲット履歴と、を使用することができる。分岐予測ユニット206は、予測された分岐を検出し、予測された分岐の予測されたターゲットアドレスを識別し、ターゲットパスが成立したと予測すると、予測されたターゲットアドレスからの命令のフェッチを命令フェッチユニット204に開始させる。したがって、分岐予測ユニット206は、分岐命令の結果として生じる遅延を減らすのに役立つ。
分岐は、分岐予測ユニット206によって予測されるが、このような予測は不正確である可能性がある。したがって、分岐命令は、依然として、実行のために残りの命令実行パイプライン200に送信される。分岐予測が正確であると判別されると、プロセッサ命令フローは修正されない。しかしながら、分岐予測が不正確(予測ミス)であると判別されると、命令実行パイプライン状態をリセットすることと、分岐予測ユニット206によって記憶された分岐予測データを修正することと、を含む是正措置がもたらされる。
より具体的には、命令実行パイプライン200が分岐命令を実行し、その結果を分岐予測と比較することによって、予測ミスが検出される。命令実行パイプライン200は、分岐が予測ミスであるという判別を行うと、プログラムカウンタを含むプロセッサ状態を修正し、この修正されたプログラムカウンタに基づいて命令のフェッチを開始する。プロセッサ状態を修正することは、予測ミスの分岐命令に関連する制御フローパスからのインフライト命令をフラッシュすることと、予測ミスの制御フローパスに関連する命令を把握するために他のパイプライン状態データを元に戻すことと、を含む場合があり、性能が大幅に低下する可能性がある。このため、正確な分岐予測は、全体的な処理性能を向上させる。
図3は、例示的な分岐予測ユニット206を示すブロック図である。図示するように、分岐予測ユニット206は、条件付き予測器304と、非圧縮分岐ターゲットバッファ(BTB)310と、圧縮BTB312と、グローバル履歴メモリ308と、予測器306と、を含む。圧縮BTB312及び非圧縮BTB310は、共にBTB302を含む。
分岐予測ユニット206のユニットは、協働して、検査中の分岐命令の結果を予測し、予測された分岐結果に基づいて、命令フェッチのために予測されたアドレスを命令フェッチユニット204に提供する。予測器306から出力された予測情報は、次の命令をフェッチするための予測アドレスと、条件付き分岐が成立するか否かを表す予測条件付き判別と、を含む。予測器306は、更なる予測のために、アドレス及び条件付き判別を、グローバル履歴メモリ308と、条件付き予測器304と、非圧縮BTB310と、圧縮BTB312と、に提供する。グローバル履歴308は、予測情報に基づいて分岐予測履歴の内部記憶を更新し、グローバル履歴値を条件付き予測器304に出力する。また、条件付き予測器304は、条件付き予測を提供するために、予測された次のアドレスを予測器306から受信する。条件付き予測器304は、任意の既知の技術に従って条件付き予測を提供してもよい。一例では、条件付き予測器304は、BTB312内のエントリに基づいて、特定の命令が分岐命令であると予測されることを識別し、グローバル履歴メモリ308からグローバル分岐履歴ビット値を取得し、予測アルゴリズムに基づいてグローバル分岐履歴ビット値のビットを処理し、処理されたビットに基づいて予測結果を取得する。また、予測された次のアドレスは、命令ストリーム内の分岐命令の識別及びこれらの分岐命令の予測されたターゲットアドレスの判別のために、非圧縮BTB310及び圧縮BTB312にも並列に提供される。
非圧縮BTB310は、高い予測スループットをサポートするために、サイクル毎に最大2つの分岐のルックアップを可能にする。この機能は、最大2つの分岐についてのデータを、非圧縮BTB310の各エントリに含めることによって実現される。より具体的には、非圧縮BTB310内のエントリは、命令キャッシュラインアドレスによってタグ付けされる。よって、単一の提供された命令キャッシュラインアドレスに対するヒットは、最大2つの予測された分岐ターゲット及び分岐命令であると予測された2つの命令がサイクル毎に提供されることを可能にする。しかしながら、非圧縮BTB310内の単一のエントリが、2つ以上の予測された分岐命令についてのデータを記憶することができない状況が存在する場合がある。例えば、キャッシュラインが1つの分岐命令のみを含む場合、(キャッシュラインアドレスによってタグ付けされた)BTBエントリは、1つの分岐命令についてのデータのみを含むことができる。このような状況では、第2の予測された分岐命令に対応するエントリ内の追加のスペースが無駄になる。
したがって、圧縮BTB312も含まれる。圧縮BTB312は、単一の分岐予測ターゲットのみについてのデータサイズのエントリを含む。したがって、圧縮BTB312内のエントリは、非圧縮BTB310内のエントリ全体を満たすのに十分な分岐ターゲット予測データが特定のキャッシュラインに対して存在しない場合に使用されてもよい。圧縮BTB312内のエントリは、非圧縮BTB310と同様に、分岐予測が実行されているキャッシュラインのキャッシュラインアドレスを使用してルックアップされる。
非圧縮BTB310に記憶されることになる分岐属性データの1つ以上の項目を圧縮することによって、圧縮BTB312内のエントリにおける追加のスペースを節約することができる。いくつかの例では、この圧縮は、特定の属性についての「一般的な場合(common case)」の値を想定することによって達成される。一般的な場合と一致しない全ての分岐命令を圧縮BTB312内に記憶することができず、圧縮BTB312内の対応するエントリを有する全ての分岐命令は、一般的な場合の値を有すると想定される。また、圧縮は、特定の数のビットを必要とする値を、より少ないビットを必要とする他の値に置き換えることによって、又は、2つ以上の独立した属性フィールドを、2つ以上の独立した属性フィールドの共通の組み合わせを示す共有フィールドに変換することによって、より複雑な方法で実現することができる。ここで、共有フィールドは、独立した属性フィールドよりも少ないビットを有する。「一般的」とみなされる属性値のみを圧縮BTB312に記憶することが許可され、一般的でない(非一般的な)属性値を有する分岐の分岐予測データは、非圧縮BTB310に記憶される。単一の圧縮BTB312のみが示されているが、分岐予測ユニット206は、代替的に、それぞれ異なる圧縮スキームを有する複数の圧縮BTBを含んでもよい。例えば、1つの圧縮BTB内のエントリの属性は、1つの特定の値を有すると想定することができ、別の圧縮BTB内のエントリの属性は、異なる特定の値を有すると想定することができる。圧縮スキームは、他の点で異なっていてもよい。
「非一般的な属性値」を有するために圧縮することができないエントリに加えて、他のタイプの1つのエントリを圧縮BTB312に記憶することができない。より具体的には、いくつかの分岐ターゲットバッファエントリは、「ラージ(large)」分岐ターゲットバッファエントリとみなされる。ラージエントリは、短縮されたターゲットアドレスではなく、完全な長さのターゲットアドレスを含むエントリである。より具体的には、分岐命令は、通常、分岐命令自体のアドレスに比較的近いターゲットを有する。したがって、分岐命令のターゲットは、フルアドレスサイズよりも少ないビット数で分岐ターゲットバッファに記憶することができる。しかしながら、分岐命令が分岐命令のアドレスから十分に離れたターゲットを有する場合、分岐ターゲットバッファは、より多数のアドレスビットを記憶する必要がある。記憶に必要なビット数が多いので、このようなタイプの分岐命令は、非圧縮BTB310に記憶され、圧縮BTB312に記憶することができない。
圧縮BTB312及び非圧縮BTB310は、分岐予測の目的で現在検査されているキャッシュラインのキャッシュラインアドレスによってインデックスされたキャッシュとして具現化することができる。一例では、圧縮BTB312及び非圧縮BTB310は、nウェイのアソシアティブキャッシュを形成し、nウェイの第1の番号は、圧縮BTB312を含み、nウェイの別の番号は、非圧縮BTB310を含む。よって、キャッシュラインアドレスをタグとして提供し、更なる処理のために非圧縮BTB312又は圧縮BTB310の何れかから一致するエントリを識別することによって、非圧縮BTB310及び圧縮BTB312上で並行してルックアップを実行することができる。所定のタグに対して複数のエントリが存在する場合、競合するルックアップは、分岐予測のために単一のエントリからのデータの選択及び出力をもたらす。最新のすっくアップの全ての分岐が成立しないと予測される場合、残りのデータを取得するために、次のサイクルで同じキャッシュラインがルックアップされる。このシーケンシャルルックアップは、所定のキャッシュラインに対して更なるエントリが存在しなくなるまで、別のキャッシュラインへの分岐が発生すると予測されるまで、又は、PC若しくは予測されたPCが何らかの理由で変更するまで続く。
図4は、一例による、非圧縮BTB310及び圧縮BTB312の両方のエントリを示す図である。シングル分岐(圧縮)BTBエントリ402と、ダブル分岐(非圧縮)BTBエントリ404と、シングル分岐ラージターゲット(非圧縮)BTBエントリ406と、が示されている。
シングル分岐(圧縮)BTBエントリ402は、タグと、圧縮属性と、タイプと、オフセットと、ターゲットと、を含む。タグは、分岐命令が見つかったキャッシュラインのアドレスである。圧縮属性は、圧縮属性値を含む。上述したように、属性データを省略することによっていくつかの属性を圧縮することができるので、圧縮BTB312内の何れかのエントリについての対応する属性は、その属性について特定の値を有すると想定される。属性に対応するビット数を減らし、特定の属性値を有する予測された分岐に対応する分岐予測データを圧縮BTB312に記憶するのを可能にすることのみによって、他の属性を圧縮することができる。2つの属性フィールドを、2つの異なる属性に対する値の特定の組み合わせに対応する値を有する共有属性フィールドに組み合わせることによって、更に他の属性を圧縮することができる。
タイプフィールドは、分岐のタイプを記憶する。タイプフィールドのいくつかの例は、分岐が非条件付きジャンプ、条件付きジャンプ、間接呼び出し、呼び出し、リターン、又は、間接ジャンプであることの指標を含む。
オフセットフィールドは、分岐命令が見つかったキャッシュライン内の位置を示す。ターゲットフィールドは、分岐命令の予測されたターゲットアドレスを示す。上記のように、ターゲットフィールドは、分岐が通常近くにターゲットを有しているので、ターゲットのフルアドレスよりも短くてもよい。実際に、圧縮BTB312内の全てのエントリは、このような短縮されたターゲットを記憶する。エントリが、短くないターゲットフィールド(すなわち、「ラージターゲット」である)を必要とする場合、当該エントリは、ラージターゲットBTBエントリ406として非圧縮BTB310に記憶される。
ダブル分岐BTBエントリ404は、2つの分岐についてのデータを含む。ダブル分岐BTBエントリ404には1つのタグのみが存在するので、これらの2つの分岐は、両方とも同じキャッシュライン内で見つかることに留意されたい。また、ダブル分岐BTBエントリ404内のデータは、非圧縮方式で記憶される。より具体的には、各属性のデータは明示的に記憶され、タイプフィールドは圧縮されず、圧縮BTB312内で圧縮される他のデータは圧縮されない。また、ダブル分岐BTBエントリ404は、2つの記憶された分岐ターゲット毎に1つのタイプフィールド及び1つのオフセットフィールドを含む。
よって、圧縮BTB312内のエントリから省略されるビットが含まれ、圧縮される値が非圧縮方式で記憶され、共有フィールドが個々のフィールドに分割される。圧縮BTB312内で圧縮又は共有することができるタイプフィールドは、ダブル分岐BTBエントリ404では圧縮されていない。
ラージターゲットBTBエントリ406は、シングル分岐ターゲットについてのタグと、属性と、タイプフィールドと、シングルラージターゲットフィールドと、を全て非圧縮方式で記憶する。ラージターゲットBTBエントリ406は、ラージターゲットBTBエントリ406が、1つの分岐のみについてのデータを含み、ターゲット値がダブル分岐BTBエントリ404内のターゲットフィールドよりも大きく、多くのビットを含むことを除いて、ダブル分岐BTBエントリ404と同様である。
いくつかの例示的な属性圧縮について説明する。これらの圧縮のいくつかが、「属性」フィールドに加えて「タイプ」フィールドを含んでもよいことに留意されたい。圧縮することができる属性の一例は、ラストインキャッシュラインフィールド(LICフィールド)である。このフィールドは、特定のエントリが、特定のキャッシュライン内の最後の分岐である分岐についてのデータを記憶しているかどうかを示している。このフィールドの目的は、特定のBTBエントリを取得した後に、次のサイクルで分岐についての特定のキャッシュラインをスキャンし続けるかどうか、又は、当該特定のキャッシュラインに更なる分岐が残っていないことを理由に、次のサイクルで次のキャッシュラインに進むかどうかを分岐予測ユニット206に知らせるのを可能にすることである。
一般的な場合では、特定のキャッシュラインに多数の分岐があることは稀であることから、LICフィールドの値は、特定の分岐がキャッシュラインの最後の分岐であることを示している。よって、圧縮BTB内のエントリは、キャッシュライン内の最後の分岐命令であるという、この一般的な場合であると想定される。BTBエントリがラストインキャッシュライン分岐を含まない場合、当該BTBエントリは、非圧縮BTBエントリとして非圧縮BTB310に記憶される必要がある。しかしながら、エントリがラストインキャッシュライン分岐である分岐を含み、そうでなければ当該エントリを圧縮BTB312に記憶することができる場合、圧縮BTB312に対してこのようなエントリが生成され、LICフィールドには値が含まれない。圧縮BTB312内の全てのエントリは、ラストインキャッシュライン分岐を包むと想定される。(「ラストインキャッシュライン」という用語は、キャッシュライン内の最後に予測された分岐を意味することに留意されたい)。
別の例示的な圧縮技術は、有効フィールドを圧縮し、タイプフィールド内の特定の値を使用して無効エントリを示すことである。分岐のタイプを示すタイプフィールドは、複数の値のうち1つの値を有することができる。特定の分岐タイプは、レアであるとみなされる。圧縮BTB312では、1つのレアタイプを示す代わりに、1つのレアタイプの値を有するタイプフィールドが、当該エントリが無効であることを代わりに示す。レアタイプを有する分岐を、圧縮BTB312に記憶することができず、代わりに、非圧縮BTB310に記憶する必要がある。
よって、有効フィールドは、圧縮BTBエントリ内で完全に省略されてもよい。より具体的には、非圧縮BTBエントリでは、有効フィールドは、予測された分岐データの1つのセットのみが有効であるかどうか、両方のセットが有効であるかどうか、エントリがラージターゲット分岐に対するものであるかどうか、又は、エントリ全体が無効であるかどうかを示すことができる。圧縮BTBエントリが2つの分岐についてのデータを記憶することができず、ラージターゲット分岐についてのデータも記憶することができないので、これらのエントリタイプの「有効フィールド」の符号化は不要である。圧縮BTBエントリに対して行う必要がある唯一の差は、有効と無効との間である。上記のように、無効エントリは、特定のタイプフィールド符号化によって示される。よって、無効フィールドを示さないタイプフィールド符号化は、エントリが有効であることを示す。このため、圧縮BTBエントリに対して別の有効フィールドが必要とされない。有効フィールド符号化は、上述した共有フィールド圧縮の一例であり、タイプフィールド及び有効フィールドが単一の共有タイプ/有効フィールドに圧縮されることに留意されたい。
圧縮可能なフィールドの別の例は、スレッド間共有フィールドである。非圧縮BTB310では、スレッド間共有フィールドは、特定のエントリが命令実行パイプライン200内で実行中の2つのスレッド間で共有されていることを示すために使用される。実行中、実行パイプライン200は、異なるスレッドからの命令を処理し、当該命令(分岐を含む)が何れのスレッドに属しているかを追跡してもよい。共有実行モードでは、2つのスレッドが協働して、同じ命令セットを実行することができる。分岐予測ユニット206では、共有実行モードで実行している2つのスレッドがBTBエントリを共有し、これにより、エントリが2つのスレッドについて重複しない。共有実行が一般的ではないので、スレッド間共有フィールドが圧縮BTB312内で圧縮されてもよい。よって、圧縮BTB312内のエントリに対して共有ビットが記憶されない。代わりに、圧縮BTB312内の全てのエントリは、非共有であると想定される。共有分岐のエントリは、非圧縮BTB310に記憶される。
上記の圧縮は一例に過ぎない。本明細書で説明する技術の異なる実装形態は、他の属性を圧縮してもよいし、及び/又は、上記の属性を異なる方法で圧縮してもよい。
データを圧縮BTB312に書き込むために、属性ビットを圧縮又は除去するロジックが分岐予測ユニット206に含まれる。同様に、圧縮BTB312からデータを読み出すために、属性ビットを復元又は圧縮解除するロジックが分岐予測ユニット206に含まれる。
タグがキャッシュラインアドレスであると説明したが、これは、タグのフォーマットの一例に過ぎない。タグは、キャッシュラインアドレスの一部のみを含んでもよいし、データがBTBに記憶される予測された分岐のキャッシュラインアドレスに関連するか関連しない他の何等かの値であってもよい。
図5は、一例による、圧縮及び非圧縮分岐ターゲットバッファを使用して分岐ターゲット予測データを取得する方法500のフロー図である。図1〜図4に関して示されたシステムに関して説明したが、技術的に実行可能な順序で方法を実行するように構成された任意のシステムが本開示の範囲内にあることを理解されたい。
図示するように、方法500は、ステップ502において開始し、予測器306は、ルックアップのために次のアドレスを識別する。この次のアドレスは、分岐予測を検査するために次のキャッシュラインのキャッシュラインアドレスを含む。予測器306は、前の分岐予測演算に基づいて、このキャッシュラインアドレスを識別する。例えば、予測器306が、分岐が成立したと以前に予測し、当該分岐についての予測されたターゲットアドレスを取得した場合、予測器306は、分岐ターゲットのキャッシュラインに対応するキャッシュラインを提供する。予測器306が、分岐が成立していないと以前に予測していた場合、予測器306は、予測のために検査される次の順次キャッシュラインのアドレスを提供する。圧縮BTB312及び非圧縮BTB310内の単一のキャッシュラインについて複数のヒットがあるために、現在のキャッシュラインが依然として予測について検査されている場合、予測器306は、現在のキャッシュラインのアドレスを提供する。
ステップ504において、非圧縮BTB310及び圧縮BTB312は、予測器306からキャッシュラインアドレスを受信する。キャッシュラインアドレスは、圧縮BTB312及び非圧縮BTB310内のエントリをルックアップするためのタグとして機能する。ステップ506において、非圧縮BTB310及び圧縮BTB312は、タグと一致するエントリを識別し、更なる処理のために当該エントリを予測器306に提供する。上述したように、非圧縮BTB310及び圧縮BTB312は、非圧縮BTB310及び圧縮BTB312によって共に構成されるnウェイアソシアティブキャッシュの異なるウェイに対応する。よって、タグを、同じサイクルにおいて、非圧縮BTB310及び圧縮BTB312の両方に並列して提供することができる。ヒットが発生しない場合、非圧縮BTB310も圧縮BTB312もルックアップされているキャッシュラインに対する予測された一致を示さない。単一のヒットが圧縮BTB312又は非圧縮BTB310の何れかで発生した場合、ヒットが発生したBTBは、予測された分岐データを、予測のために予測器306に提供する。複数のヒットが発生した場合、圧縮BTB312又は非圧縮BTB310は、データを、予測のために単一のエントリから予測器306に提供する。ステップ508に関して以下に説明するように、この状況では、圧縮BTB312及び非圧縮BTB310は、そのキャッシュラインの分岐予測データが依然として存在しているので、次のサイクルで同じキャッシュラインアドレスで別のルックアップを実行する。一例では、圧縮BTB312及び非圧縮BTB310は、予測データが未だ予測器306に提供されていない現在のキャッシュライン内の「最も早い」(すなわち、最も低いPC)エントリに対応するエントリを選択する。
ステップ508において、圧縮BTB312及び非圧縮BTB310は、同じキャッシュラインアドレスに対応する追加のエントリが存在するかどうかを判別する。追加のこのようなエントリが存在する場合、方法500は、ステップ504に戻り、同じタグが、同じキャッシュラインアドレスの追加のエントリをルックアップするために再度提供される。このような追加のエントリが存在しない場合、方法500は、ステップ502に戻り、予測器306は、予測のために別のキャッシュラインアドレスを取得する。
BTBをルックアップするためにキャッシュラインアドレスをタグとして提供することは一例に過ぎず、他のタグタイプを使用することができる。例えば、タグは、代わりに、キャッシュラインアドレスの一部のみを含んでもよいし、キャッシュラインアドレス又はその一部から導出された何等かの値を含んでもよいし、データがBTBに記憶された予測された分岐のキャッシュラインアドレスに関連する又は関連しない何等かの値であってもよい。
図6は、一例による、非圧縮BTB310及び圧縮BTB312を更新する方法600のフロー図である。図1〜図4に関して示されたシステムに関して説明したが、技術的に実行可能な順序で方法を実行するように構成された任意のシステムが本開示の範囲内にあることを理解されたい。
図示するように、方法600は、ステップ602において開始し、分岐予測ユニット206は、非圧縮BTB310、圧縮BTB312、又は、これらの両方に対する変更が実行されると判別する。分岐予測ユニット206は、分岐予測ミスが発生したことを検出すると、このような判別をする。分岐予測ミスは、誤った方向(例えば、成立/不成立の判別が誤って予測されている)、誤ったターゲット(BTBに記憶されたターゲットアドレスが誤っている)、誤ったタイプの分岐予測(予測された分岐タイプが誤っている)、又は、分岐ではない(分岐として予測された命令が分岐でないことが判明した)場合がある。命令実行パイプライン200は、分岐命令を実行し、実行された分岐命令の結果を以前に発生した分岐予測と比較することによって、分岐予測ミスを検出する。予測と実行の違いは、分岐予測ミスが発生したことを意味する。命令実行パイプライン200は、予測ミスに関する情報を分岐予測ユニット206に提供して、将来の分岐予測の精度が向上するようにその内部状態を修正する。
ステップ604において、圧縮BTB312、非圧縮BTB310、又は、これらの両方が変更されるという指示を受信したことに応じて、分岐予測ユニット206は、変更される1つ以上のエントリを識別する。変更は、特定の分岐命令に関するデータの削除、分岐命令に関するデータの変更、又は、分岐命令に関するデータの追加を含むことができる。また、分岐予測ユニット206は、キャッシュラインアドレスに基づいて、同じキャッシュラインについて他の分岐予測データが既に存在しているかどうかに基づいて、及び、分岐予測データを圧縮することができるかどうかに基づいて、圧縮BTB312又は非圧縮BTB310内のエントリを識別する。削除及び変更のために、分岐予測ユニット206は、問題の分岐のキャッシュラインアドレス及び問題の分岐の当該キャッシュラインのオフセットと一致するタグを有するエントリを識別する。
分岐データを削除する場合、分岐予測ユニット206は、分岐命令のアドレスに基づいて、既存のBTBエントリを、無効又は変更されるエントリとして識別する。
分岐データを変更する場合、分岐予測ユニット206は、分岐命令のアドレスに基づいて既存のエントリを識別し、エントリを圧縮できなくする変更等の理由や他の理由のために、変更されたエントリを圧縮BTB312と非圧縮BTB310との間で移動する必要があるかどうかに応じて、他のエントリを識別することができる。
ステップ606において、分岐予測ユニット206は、要求された変更に対応するために、1つ以上の識別されたエントリを変更する。変更が圧縮BTB312又は非圧縮BTB310から分岐に関するデータを削除することを要求する場合、分岐予測ユニット206は、BTBエントリ全体を削除する。
変更が特定のエントリ内に記憶された特定の分岐に関するデータを変更することを必要とする場合、分岐予測ユニット206は、変更されたエントリを圧縮することができるかどうかにおける変更に起因して、変更されたエントリが、圧縮BTB312から非圧縮BTB310に移動されるかどうかを判別する。例えば、変更される場合に、圧縮されたエントリを圧縮することができない場合、分岐予測ユニット206は、エントリを、圧縮BTB312から非圧縮BTB310に移動させる。このような変更が行われない場合、分岐予測ユニット206は、エントリ内のデータを単に規定通りに変更する。このような変更が行われた場合、分岐予測ユニット206は、対応するデータを移動させ、元のエントリを無効にし、新たなエントリを宛先に書き込む。
変更が、圧縮BTB312又は非圧縮BTB310に以前に記憶されていない分岐に関するデータを追加することを必要とする場合、分岐予測ユニット206は、分岐に関するデータを、他の分岐に関するデータと共にダブル分岐BTBエントリ404に記憶することができるかどうかを判別する。追加される分岐に関するデータを他の分岐に関するデータと共に記憶することができる場合であって、他の分岐が圧縮BTB312に記憶される場合、分岐予測ユニット206は、他の分岐に関するシングル分岐BTBエントリ402を無効にし、両方の分岐に関するデータを記憶する新たなダブル分岐BTBエントリ404を生成する。分岐がキャッシュラインアドレスを共有し、分岐がラージターゲットBTBエントリ406を必要としない場合、2つの分岐に関するデータが共に記憶されてもよい。
追加される分岐に関するデータを他の分岐に関するデータと共に記憶することができないが、圧縮することができる場合、分岐予測ユニット206は、新たなシングル分岐BTBエントリ402を圧縮BTB312内に生成し、新たな分岐に関するデータを当該エントリに記憶する。追加される分岐に関するデータを他の分岐に関するデータと共に記憶することができず、圧縮することもできない場合、分岐予測ユニット206は、新たなエントリを非圧縮BTB310内に生成し、新たな分岐に関するデータを当該新たなエントリに記憶する。データの属性が、図3及び図4に関して上述したように分岐の「一般的な場合」と一致する場合、及び、データがラージターゲットBTBエントリ406を必要としない場合に、当該データを圧縮することができる。
本明細書で説明した技術は、コンピュータプロセッサにおける分岐予測動作を改善する。より具体的には、並行して検索することができる圧縮及び非圧縮BTBを提供することによって、未使用の分岐データスペースに関連するスペースを大きく無駄にすることなく、サイクル毎の最大2つの分岐についての予測データを取得することができる。
本明細書における開示に基づいて多くの変形が可能であることを理解されたい。上記では、特徴及び要素が特定の組み合わせで説明されているが、各特徴又は要素は、他の特徴及び要素無しに単独で使用されてもよいし、他の特徴及び要素を伴って又は伴わずに様々な組み合わせで使用されてもよい。
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、他のタイプの集積回路(IC)、及び/又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令(このような命令は、コンピュータ可読媒体に記憶することが可能である)の結果及びネットリストを含む他の中間データを用いて製造プロセスを構成することによって製造され得る。このようなプロセスの結果は、実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
本明細書で提供された方法又はフロー図は、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、例えば読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク、リムーバブルディスク等の磁気媒体、光磁気記憶媒体、例えばCD−ROMディスク及びデジタル多用途ディスク(DVD)等の光学媒体が含まれる。

Claims (20)

  1. 分岐ターゲットバッファデータを操作する方法であって、
    ルックアップタグを圧縮分岐ターゲットバッファ及び非圧縮分岐ターゲットバッファに提供することであって、前記非圧縮分岐ターゲットバッファは、2つ以上の分岐に関するデータを含むエントリを記憶するように構成されており、前記圧縮分岐ターゲットバッファは、単一の分岐のみに関するデータをそれぞれ含むエントリを記憶するように構成されている、ことと、
    前記ルックアップタグに基づいて、前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファの一方又は両方から分岐ターゲットバッファエントリを識別することと、
    分岐を予測するために、前記分岐ターゲットバッファエントリに対応するデータを分岐予測ロジックに出力することと、を含む、
    方法。
  2. 前記ルックアップタグは、分岐予測のために検査されたキャッシュラインのキャッシュラインアドレスに関連する値を含み、
    前記非圧縮分岐ターゲットバッファは、同じキャッシュラインアドレスを共有する分岐に関するエントリを記憶するように構成されている、
    請求項1の方法。
  3. 前記圧縮分岐ターゲットバッファは、1つ以上の属性が圧縮されているエントリを記憶するように構成されており、
    前記非圧縮分岐ターゲットバッファは、属性が圧縮されていないエントリを記憶するように構成されている、
    請求項1の方法。
  4. 前記非圧縮分岐ターゲットバッファのエントリは、第1属性フィールドに対する第1属性値を含み、
    前記圧縮分岐ターゲットバッファのエントリは、前記第1属性フィールドに対する属性値を含まず、
    前記圧縮分岐ターゲットバッファの全てのエントリは、前記第1属性フィールドに対して同じ値を有する、
    請求項1の方法。
  5. 前記非圧縮分岐ターゲットバッファのエントリについての第1属性フィールドは、エントリがキャッシュライン内で最後に予測された分岐である分岐に関するデータを含むかどうかを示すラストインキャッシュラインフィールドを含み、
    前記圧縮分岐ターゲットバッファの全てのエントリは、キャッシュライン内で最後に予測された分岐である分岐に関するデータを記憶するが、前記ラストインキャッシュラインフィールドを含まないように構成されている、
    請求項1の方法。
  6. 前記分岐ターゲットバッファエントリを識別することは、
    前記圧縮分岐ターゲットバッファ又は前記非圧縮分岐ターゲットバッファ内の複数の分岐ターゲットバッファエントリが前記ルックアップタグとタグを共有していることを検出することを含み、
    前記方法は、出力のために、前記複数の分岐ターゲットバッファエントリのうち1つを選択することをさらに含む、
    請求項1の方法。
  7. 前記1つ以上の分岐ターゲットバッファエントリのうち1つが選択される第1サイクルに続く処理サイクルにおいて、出力のために、前記複数の分岐ターゲットバッファエントリのうち第2分岐ターゲットバッファエントリを選択することをさらに含む、
    請求項6の方法。
  8. 単一の分岐のみに関するデータをそれぞれ含むエントリを記憶するように構成された圧縮分岐ターゲットバッファと、
    2つ以上の分岐に関するデータを含むエントリを記憶するように構成された非圧縮分岐ターゲットバッファと、を備え、
    前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファの両方は、
    提供されたルックアップタグに基づいて、1つ以上の分岐ターゲットバッファエントリを識別することと、
    分岐を予測するために、識別された前記1つ以上の分岐ターゲットバッファエントリに対応するデータを予測ロジックに出力することと、
    を行うように構成されている、
    分岐予測ユニット。
  9. 前記ルックアップタグは、分岐予測のために検査されたキャッシュラインのキャッシュラインアドレスに関連する値を含み、
    前記非圧縮分岐ターゲットバッファは、同じキャッシュラインアドレスを共有する分岐に関するエントリを記憶するように構成されている、
    請求項8の分岐予測ユニット。
  10. 前記圧縮分岐ターゲットバッファは、1つ以上の属性が圧縮されているエントリを記憶するように構成されており、
    前記非圧縮分岐ターゲットバッファは、属性が圧縮されていないエントリを記憶するように構成されている、
    請求項8の分岐予測ユニット。
  11. 前記非圧縮分岐ターゲットバッファのエントリは、第1属性フィールドに対する第1属性値を含み、
    前記圧縮分岐ターゲットバッファのエントリは、前記第1属性フィールドに対する属性値を含まず、
    前記圧縮分岐ターゲットバッファの全てのエントリは、前記第1属性フィールドに対して同じ値を有する、
    請求項8の分岐予測ユニット。
  12. 前記非圧縮分岐ターゲットバッファのエントリについての第1属性フィールドは、エントリがキャッシュライン内で最後に予測された分岐である分岐に関するデータを含むかどうかを示すラストインキャッシュラインフィールドを含み、
    前記圧縮分岐ターゲットバッファの全てのエントリは、キャッシュライン内で最後に予測された分岐である分岐に関するデータを記憶するが、前記ラストインキャッシュラインフィールドを含まないように構成されている、
    請求項8の分岐予測ユニット。
  13. 前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファは、前記圧縮分岐ターゲットバッファ又は前記非圧縮分岐ターゲットバッファ内の複数の分岐ターゲットバッファエントリが前記ルックアップタグとタグを共有していることを検出することによって、前記1つ以上の分岐ターゲットバッファエントリを識別することを行うように構成されており、
    前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファは、出力のために、前記複数の分岐ターゲットバッファエントリのうち1つを選択するように構成されている、
    請求項8の分岐予測ユニット。
  14. 前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファは、前記1つ以上の分岐ターゲットバッファエントリのうち1つが選択される第1サイクルに続く処理サイクルにおいて、出力のために、前記複数の分岐ターゲットバッファエントリのうち第2分岐ターゲットバッファエントリを選択することをさらに行うように構成されている、
    請求項13の分岐予測ユニット。
  15. 分岐予測結果を出力するように構成された分岐予測ユニットと、
    前記分岐予測結果に基づいて、実行するための命令を出力するように構成された命令フェッチユニットと、
    前記命令フェッチユニットから出力された命令を実行するように構成された命令実行パイプラインと、を備え、
    前記分岐予測ユニットは、
    単一の分岐のみに関するデータをそれぞれ含むエントリを記憶するように構成された圧縮分岐ターゲットバッファと、
    2つ以上の分岐に関するデータを含むエントリを記憶するように構成された非圧縮分岐ターゲットバッファと、を備え、
    前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファの両方は、
    提供されたルックアップタグに基づいて、1つ以上の分岐ターゲットバッファエントリを識別することと、
    分岐を予測するために、識別された前記1つ以上の分岐ターゲットバッファエントリに対応するデータを予測ロジックに出力することと、
    を行うように構成されている、
    プロセッサ。
  16. 前記ルックアップタグは、分岐予測のために検査されたキャッシュラインのキャッシュラインアドレスに関連する値を含み、
    前記非圧縮分岐ターゲットバッファは、同じキャッシュラインアドレスを共有する分岐に関するエントリを記憶するように構成されている、
    請求項15のプロセッサ。
  17. 前記圧縮分岐ターゲットバッファは、1つ以上の属性が圧縮されているエントリを記憶するように構成されており、
    前記非圧縮分岐ターゲットバッファは、属性が圧縮されていないエントリを記憶するように構成されている、
    請求項15のプロセッサ。
  18. 前記非圧縮分岐ターゲットバッファのエントリは、第1属性フィールドに対する第1属性値を含み、
    前記圧縮分岐ターゲットバッファのエントリは、前記第1属性フィールドに対する属性値を含まず、
    前記圧縮分岐ターゲットバッファの全てのエントリは、前記第1属性フィールドに対して同じ値を有する、
    請求項15のプロセッサ。
  19. 前記非圧縮分岐ターゲットバッファのエントリについての第1属性フィールドは、エントリがキャッシュライン内で最後に予測された分岐である分岐に関するデータを含むかどうかを示すラストインキャッシュラインフィールドを含み、
    前記圧縮分岐ターゲットバッファの全てのエントリは、キャッシュライン内で最後に予測された分岐である分岐に関するデータを記憶するが、前記ラストインキャッシュラインフィールドを含まないように構成されている、
    請求項15のプロセッサ。
  20. 前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファは、前記圧縮分岐ターゲットバッファ又は前記非圧縮分岐ターゲットバッファ内の複数の分岐ターゲットバッファエントリが前記ルックアップタグとタグを共有していることを検出することによって、前記1つ以上の分岐ターゲットバッファエントリを識別することを行うように構成されており、
    前記圧縮分岐ターゲットバッファ及び前記非圧縮分岐ターゲットバッファは、出力のために、前記複数の分岐ターゲットバッファエントリのうち1つを選択するように構成されている、
    請求項15のプロセッサ。
JP2019532918A 2016-08-30 2016-09-13 分岐ターゲットバッファの圧縮 Active JP6796717B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/252,164 US10592248B2 (en) 2016-08-30 2016-08-30 Branch target buffer compression
US15/252,164 2016-08-30
PCT/US2016/051527 WO2018044333A1 (en) 2016-08-30 2016-09-13 Branch target buffer compression

Publications (2)

Publication Number Publication Date
JP2019526873A true JP2019526873A (ja) 2019-09-19
JP6796717B2 JP6796717B2 (ja) 2020-12-09

Family

ID=61242686

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019532918A Active JP6796717B2 (ja) 2016-08-30 2016-09-13 分岐ターゲットバッファの圧縮

Country Status (6)

Country Link
US (1) US10592248B2 (ja)
EP (1) EP3507688B1 (ja)
JP (1) JP6796717B2 (ja)
KR (1) KR20190039290A (ja)
CN (1) CN109643237B (ja)
WO (1) WO2018044333A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021527892A (ja) * 2018-06-18 2021-10-14 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated 分岐命令のタイプに基づく先行分岐予測の選択的実行

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7010683B2 (ja) * 2017-12-08 2022-01-26 キオクシア株式会社 データ処理装置、メモリシステム及びデータ処理方法
US11238155B2 (en) * 2018-06-28 2022-02-01 Intel Corporation Microarchitectural mechanisms for the prevention of side-channel attacks
US10713054B2 (en) * 2018-07-09 2020-07-14 Advanced Micro Devices, Inc. Multiple-table branch target buffer
WO2021108007A1 (en) * 2020-05-30 2021-06-03 Futurewei Technologies, Inc. Apparatus and method for dual branch prediction
US20220197662A1 (en) * 2020-12-22 2022-06-23 Niranjan Kumar Soundararajan Accessing A Branch Target Buffer Based On Branch Instruction Information
US12014182B2 (en) 2021-08-20 2024-06-18 International Business Machines Corporation Variable formatting of branch target buffer
US11915002B2 (en) * 2022-06-24 2024-02-27 Microsoft Technology Licensing, Llc Providing extended branch target buffer (BTB) entries for storing trunk branch metadata and leaf branch metadata

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008535063A (ja) * 2005-03-23 2008-08-28 クゥアルコム・インコーポレイテッド インデックス当り2つ以上の分岐ターゲットアドレスを記憶する分岐ターゲットアドレスキャッシュ
US20120324209A1 (en) * 2011-06-17 2012-12-20 Tran Thang M Branch target buffer addressing in a data processor

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574871A (en) 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
US5794028A (en) * 1996-10-17 1998-08-11 Advanced Micro Devices, Inc. Shared branch prediction structure
JPH10133874A (ja) 1996-11-01 1998-05-22 Mitsubishi Electric Corp スーパスカラプロセッサ用分岐予測機構
US5805878A (en) 1997-01-31 1998-09-08 Intel Corporation Method and apparatus for generating branch predictions for multiple branch instructions indexed by a single instruction pointer
US6427192B1 (en) 1998-09-21 2002-07-30 Advanced Micro Devices, Inc. Method and apparatus for caching victimized branch predictions
US20020194462A1 (en) * 2001-05-04 2002-12-19 Ip First Llc Apparatus and method for selecting one of multiple target addresses stored in a speculative branch target address cache per instruction cache line
US7234045B2 (en) * 2001-07-03 2007-06-19 Ip-First, Llc Apparatus and method for handling BTAC branches that wrap across instruction cache lines
US7203824B2 (en) * 2001-07-03 2007-04-10 Ip-First, Llc Apparatus and method for handling BTAC branches that wrap across instruction cache lines
US7152154B2 (en) * 2003-01-16 2006-12-19 Ip-First, Llc. Apparatus and method for invalidation of redundant branch target address cache entries
US7124287B2 (en) * 2003-05-12 2006-10-17 International Business Machines Corporation Dynamically adaptive associativity of a branch target buffer (BTB)
US7752426B2 (en) * 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
US7707396B2 (en) * 2006-11-17 2010-04-27 International Business Machines Corporation Data processing system, processor and method of data processing having improved branch target address cache
JP5145809B2 (ja) * 2007-07-31 2013-02-20 日本電気株式会社 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム
US7873819B2 (en) * 2008-01-03 2011-01-18 Freescale Semiconductor, Inc. Branch target buffer addressing in a data processor
JP2013214832A (ja) * 2012-03-30 2013-10-17 Fujitsu Ltd 圧縮及び伸長システム、圧縮装置、伸長装置、圧縮及び伸長方法、圧縮プログラム及び伸長プログラム
US9235419B2 (en) 2012-06-11 2016-01-12 International Business Machines Corporation Branch target buffer preload table
US9372696B2 (en) * 2013-10-18 2016-06-21 Via Technologies, Inc. Microprocessor with compressed and uncompressed microcode memories
US9996358B2 (en) * 2015-09-30 2018-06-12 Ecole Polytechnique Federale De Lausanne Unified prefetching into instruction cache and branch target buffer
CN105867880B (zh) * 2016-04-01 2018-12-04 中国科学院计算技术研究所 一种面向间接跳转分支预测的分支目标缓冲器及设计方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008535063A (ja) * 2005-03-23 2008-08-28 クゥアルコム・インコーポレイテッド インデックス当り2つ以上の分岐ターゲットアドレスを記憶する分岐ターゲットアドレスキャッシュ
US20120324209A1 (en) * 2011-06-17 2012-12-20 Tran Thang M Branch target buffer addressing in a data processor
JP2013004101A (ja) * 2011-06-17 2013-01-07 Freescale Semiconductor Inc データプロセッサ内での分岐先バッファのアドレス指定

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021527892A (ja) * 2018-06-18 2021-10-14 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated 分岐命令のタイプに基づく先行分岐予測の選択的実行
JP7160956B2 (ja) 2018-06-18 2022-10-25 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 分岐命令のタイプに基づく先行分岐予測の選択的実行

Also Published As

Publication number Publication date
CN109643237A (zh) 2019-04-16
EP3507688A1 (en) 2019-07-10
KR20190039290A (ko) 2019-04-10
WO2018044333A1 (en) 2018-03-08
EP3507688A4 (en) 2020-04-22
US10592248B2 (en) 2020-03-17
US20180060073A1 (en) 2018-03-01
EP3507688B1 (en) 2021-07-14
CN109643237B (zh) 2023-11-03
JP6796717B2 (ja) 2020-12-09

Similar Documents

Publication Publication Date Title
JP6796717B2 (ja) 分岐ターゲットバッファの圧縮
CN110069285B (zh) 一种检测分支预测的方法及处理器
US7376817B2 (en) Partial load/store forward prediction
US7685410B2 (en) Redirect recovery cache that receives branch misprediction redirects and caches instructions to be dispatched in response to the redirects
KR100974384B1 (ko) 분기 명령들을 예측하기 위한 방법 및 장치
KR101376900B1 (ko) 이력에 의한 다음 인출 예측기 트레이닝
JP2003005956A (ja) 分岐予測装置、プロセッサ、及び分岐予測方法
JP5231403B2 (ja) スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ
JP2009536770A (ja) ブロックに基づく分岐先アドレスキャッシュ
US11579884B2 (en) Instruction address translation and caching for primary and alternate branch prediction paths
US11620224B2 (en) Instruction cache prefetch throttle
US20200081717A1 (en) Branch prediction circuitry
US11249762B2 (en) Apparatus and method for handling incorrect branch direction predictions
JP5415268B2 (ja) 分岐先アドレスキャッシュにおけるルックアップの低減方法および装置
US20140250289A1 (en) Branch Target Buffer With Efficient Return Prediction Capability
US20040225866A1 (en) Branch prediction in a data processing system
US7343481B2 (en) Branch prediction in a data processing system utilizing a cache of previous static predictions
CN117130666A (zh) 配置方法、分支预测器、指令识别器和电子设备
JP4113227B2 (ja) 分岐予測機構を有する情報処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190829

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201013

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20201027

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201116

R150 Certificate of patent or registration of utility model

Ref document number: 6796717

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250