FPGA開発日記

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

A Scalable Front-End Architecture for Fast Instruction Delivery (2. 各ブロックの概要)

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

アーキテクチャの設計ポイントについてまとめていく。

  • アーキテクチャの設計
    • 命令キャッシュと分岐予測器を分離する。これにより、フロントエンドのクリティカルパスから遅いキャッシュを排除する。
    • さらに、命令キャッシュと分岐予測器はそれぞれ独自のフェッチアドレスとプログラムカウンタに基づいて動作する。
  • Fetch Target Queue (FTQ)
    • 分岐予測器と命令キャッシュの間に、Fetch Target Queue(FTQ)を設置する。
    • 分岐予測器は毎サイクルフェッチターゲットブロックを生成し、それをFTQに保存する。これを命令キャッシュ側で消費することになる。
  • Fetch Target Buffer (FTB)

    • 分岐予測器とBTBを小さく保ちつつ、多くの分岐とターゲットを予測したい。
    • このために、多階層のメモリを使用してFetch Target Buffer (FTB)を使用する。
    • FTBが生成するもの:
      • 次のフェッチブロックの開始アドレス、終了アドレス
      • 次のサイクルでの予測に使用される予測ターゲットアドレス
  • BTB(Branch Target Buffer)とBBTB(Basic Block Target Buffer)

    • BBTB : 基本ブロックの開始アドレスでインデックスされている。タグ・タイプ情報・基本ブロックのターゲットアドレス・フォールスルーアドレスなどを含む。
    • FTBはBBTBを基本とし、以下の変更を加えている。
      • Seldom Taken (めったに取られない)分岐やフォールスルー分岐を保存しない。
      • フォールスルーアドレスの全体を保存するのではなく、一部分とキャリービットのみを保存する。
    • FTBの基本エントリ
      • タグ・Takenアドレス・フォールスルーアドレスの一部、分岐の種類、オーバサイズビット、条件分岐の分岐予測情報
図は本論文より引用
  • 分岐方向の予測:
    • ローカル履歴ベース・グローバル履歴ベース・バイモーダル予測器によるメタ予測を行う。
  • 履歴の回復

    • 分岐予測ミスが発生した場合、Speculative History Queue (SHQ)を使用して分岐履歴を回復する。
  • Return Address Stack (RAS)

    • FTBは複数のコールとリターンを予測する可能性があり、Return Addres Stackを汚染する可能性がある。
    • このため、Speculative RASとNon-speculative RASを用意する。

過去の記事はこちら。


msyksphinz.hatenablog.com