ちょっとCPU設計のフロントエンドについて勉強がしたくなって、プリフェッチに関する論文を読むことにした。
この論文はArmの人が書いたもので、「アカデミックのフロントエンド設計はだめだ!産業界のリーダーが本物を教えてやる」という感じで書かれている。割と詳細に書いてあるのでちゃんと読んでみることにしよう。
命令プリフェッチに関する論文。特にFetch Directed Prefetch(FDP)について紹介する。
用語確認。
- Fetch Target Queue(FTQ) : 分岐予測器が生成したアドレスを格納するためのQueue。SonicBOOMの説明にも同じ用語がある。ここでいうFTQも、命令がROBから解放されるまで解放されないのだろうか?そんなことはないような気がするが...たぶん下記のFTQとここでいうFTQは役割が違うと思う。
The Fetch Target Queue The Fetch Target Queue is a queue that holds the PC received from the i-cache and the branch prediction info associated with that address. It holds this information for the pipeline to reference during the executions of its Micro-Ops (UOPs) . It is dequeued by the ROB once an instruction is committed and is updated during pipeline redirection/mispeculation.
最近の学術研究ではフロントエンドを小さくする傾向にあるため、産業界の実際の時代とは異なっているように見える。本論文では、FDPの詳細なマイクロアーキテクチャを紹介し、高性能なプリフェッチ機構を紹介する。
命令プリフェッチは、命令キャッシュのミスを減らすための良く知られた技法であり、Next Line Prefetchはシーケンシャルな命令に対して有効である。
しかし分岐による不連続な制御フローに関してはその効果が薄く、そのためにTemporal Prefetch機構、命令キャッシュの時間的に創刊したストリームを追跡するものなどの提案がある。
Fetch-Directed Prefetching (FDP)は、Directional PredictorやBranch Target Buffer(BTB)などのコンポーネントを活用しつつ、かつわずかなハードウェアオーバヘッドで使用することができる。
FDPは分離型フロントエンド設計[24]の上に構築されているものであり、Fetch Target Queue(FTQ)と呼ばれる専用の構造体に予測された命令アドレスを格納し、FTQエントリが指す命令キャッシュラインは、要求リクエストの前に命令キャッシュにフェッチされる。
これにより、プロセッサは命令フェッチと無関係に、将来の命令ストリームを予測して先行してフェッチを実行できる。最近公開された商用CPUの設計[25]-[28]は、FDPの一種を採用している。
FDPは分岐予測器の正確性と、十分に大きいBTBに依存している。BTBは命令フェッチ時の分岐情報検出のみに利用される。FDPでは予測された制御フローをBTBが上手くカバーできない場合に、分岐履歴の管理に起因する問題などに直面する。
BTBがいくつかの分岐をカバーしていない場合、予測器は方向予測を行うことが出来ず、分岐履歴は更新されない。FDPの効果を高めるために、最近のCPUに見られるように、商用プロセッサは分岐予測器のリソースを増やす傾向にある。
しかし学術的な研究では逆の傾向になっていることが多い。命令プリフェッチチャンピオンシップで用いられたデザインでは、フロントエンドと基本的なFDPの容量を分離しているが、FTQのサイズは12命令分しかなく、FDPがフェッチ能力を制限している。
FDPを制約することによる影響を比較するために、IPC-1のTop-3プリフェッチメカニズムをFDPありと無しで比較した。Top-3のプリフェッチャはベースラインに比べて28%の性能向上を達成しているが、一方でFDPを用いたプリフェッチャにベースラインを切り替えても、これらのプリフェッチャは利益をもたらさなかった。
- アカデミックで使用されているベースラインは産業界のものに比べて遅れている
- FDPの上に追加のプリフェッチ機構を採用することは、極めて高い性能向上が無ければ正当化できない
限られたサイズのBTBサイズの実装の代わりに、BTBをプリフェッチする機構が提案されている。BTBをプリフェッチする機構は、命令キャッシュのミスやその後のリフィルの際に、同じ命令キャッシュの命令をプリデコードし、BTBに識別された分岐情報を追加するものである。
産業界と学界のフロントエンドベースラインの差を縮めるため、我々はFDPの設計を再検討し、より現代的なCPUを代表するマイクロアーキテクチャの詳細を提供します。また、FDPをさらに改善するために、2つの機能を評価しました。第一に、多くの論文で用いられている全枝の分岐方向履歴ではなく、取られた枝のみの履歴を用いることで、FDPはBTBミス枝に対してより耐性を持つことができます。分岐方向履歴は、BTB-miss not-taken分岐によって容易に乱される可能性があります。また、BTBはtakenされた枝のみを保持することができるため、BTBの利用率が向上します。
本論文では、学術界と産業界のフロントエンドの差を縮めるため、FDPの設計を再検討し、産業界のCPUマイクロアーキテクチャの詳細を提供する。
- 多くの論文で用いられている全ての分岐方向履歴ではなく、Takenな分岐のみの履歴を用いることで、FDPはBTBミス枝に対してより耐性を持つことができます。
- 分岐方向履歴は、BTB-miss not-taken分岐によって容易に乱される可能性がある
- BTBはtakenされた分岐のみを保持することができるため、BTBの利用率が向上する
- ポストフェッチ機構により、BTB-Miss Taken分岐によるミス予測ペナルティを迅速に回復することができる。
- PFCを使用しない場合、BTBミスによる分岐が発生すると、分岐予測が特定された後にパイプラインフラッシュが開始されるまで、コアは間違った経路の命令を実行し続けることになる。
本論文の貢献は以下のとおりである。
- FDP設計のための包括的なマイクロアーキテクチャを提示し、FDPを向上させる2つの機能を評価する。
- FDP設計は、195バイトのハードウェアオーバヘッドでベースライン(プリフェッチ無し、FDP無し)よりも41.0%性能が良く、128kBのストレージバジェットを持つIPC-1商社よりも性能が優れている。