A Scalable Front-End Architecture for Fast Instruction Deliveryの続き。
https://web.eecs.umich.edu/~taustin/papers/ISCA99-ftb.pdf
https://dl.acm.org/doi/10.1145/307338.300999
フェッチターゲットバッファ (FTB)
- FTBは、BBTB設計にいくつかの変更を加えたもの。
- Seldom Taken (めったに取られない)分岐やフォールスルー基本ブロックはFTBに保存されない。
- フォールスルーアドレスの全体を保存するのではなく、部分的な低ビットとキャリービットのみを保存する。
- FTBエントリには、タグ、Takenアドレス、部分的なフォールスルーアドレス、フォールスルーキャリービット、分岐タイプ、オーバーサイズビット、および条件付き分岐予測情報が含まれている。
まずFTBのアクセス・インデックスは、現在のPCを使用する。これがpredicted targetの部分だと思う。このPCをどのようにFTBのインデックスにしているのかはよくわからないが、まあPCの然るべき場所を引き抜けばいいと思う。
tag
を用いて、現在のPCとテーブルが一致しているかをチェックする。carry
ビットとpartial fall thruは、分岐予測がfalseの場合の次キャッシュ・ブロックのどこから読み始めるかを指定している。- 図においては、フォールスルーアドレスを用いるときは、現在のPCの値とのCONCATによって生成している。
- 予測のTrue/Falseに応じて、targetとfall-thruアドレスを切り替えている。
- 予測がTrueの場合はtargetを使用する。
- 予測がFalseの場合はそのまま後続のキャッシュブロックおよびブロック内のどのアドレスを使用するかを指定している。
target
は分岐ターゲットアドレスになる。ここでは15ビットが指定されているけども、PC全ビット格納する必要があるのだろうか。これも構成に寄るのだと思う。type
は分岐命令の種類を示す。oversize
は分岐命令が、キャッシュブロック内で収まっていない(2つのキャッシュブロックにまたがっている)ことを示す。- metaは
local predictor
、bimodal
、global predictor
のどれを選択するかを選択するための記述子である。- これの選択方法はいろいろあるようだが、
- local predictorはNビットのlocal predictorを使用して、pattern history tableにアクセスして予測値を得る。結果はlocal predに記録される?
- bimodalは単純な2ビットの予測を使用する。
過去の記事はこちら。