FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

A Scalable Front-End Architecture for Fast Instruction Delivery (3. FTBの構成)

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設計にいくつかの変更を加えたもの。
    1. Seldom Taken (めったに取られない)分岐やフォールスルー基本ブロックはFTBに保存されない。
    2. フォールスルーアドレスの全体を保存するのではなく、部分的な低ビットとキャリービットのみを保存する。
  • 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 predictorbimodalglobal predictorのどれを選択するかを選択するための記述子である。
    • これの選択方法はいろいろあるようだが、
    • local predictorはNビットのlocal predictorを使用して、pattern history tableにアクセスして予測値を得る。結果はlocal predに記録される?
    • bimodalは単純な2ビットの予測を使用する。

過去の記事はこちら。


msyksphinz.hatenablog.com

msyksphinz.hatenablog.com