FPGA開発日記

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

Alpha 21264に関する論文を読む (6. バスインタフェースユニット)

Alpha 21264は非常に有名なプロセッサで、コンピュータアーキテクチャ系を生業とする者ならば必ず読んでおかなければならないものの一つに入る論文だと聞いている。が、私はまじめに読んだことが無いのでこの際きちんと理解しようと思う。

ieeexplore.ieee.org


バスインタフェースユニット

21264のバスインタフェースユニット(Bus Interface Unit: BIU)は、内部メモリシステムと外部(チップ外)のL2キャッシュ及び他のシステムを相互に接続するためのものである。

  • 内部システムメモリからMAF(これはどういう意味?)を受け取ると、L2キャッシュヒットした場合はL2キャッシュから、それ以外の場合はシステムからデータを取得する。
  • データキャッシュからL2へEvictionデータを転送する。L2からシステムでEvictionデータを転送する。
  • システムからキャッシュのプロービングを受信し、必要なキャッシュコヒーレスの動作を実行して応答する。

21264はWrite-Invalidateの共有メモリマルチプロセッシングのキャッシュコヒーレスをサポートしている(注: Write Invalidateは、あるコアがキャッシュラインに書き込みを行った場合、それ以外のコアが保持している同等のキャッシュラインを無効化すること)。

図9は21264の外部インタフェースを示している。L2のインタフェースとシステムインタフェースは分離されている。

図は本論文中より引用

L2キャッシュは、プライマリのキャッシュの高速バックアップストアをサポートしている。

  • ダイレクトマップ方式
  • 命令とデータで共用
  • 1~16MByteのサイズでコンフィギャラブル
  • 転送速度はピークで1.5CPUサイクルで16倍と
  • 最小レイテンシ6サイクルのSRAMを使用するができる。

21264のシステムバスにおいて、Address OutとAddress Inが分離されていることにより、システムからの要求とコアからの要求を分離することができる。BIUは、保留中のシステムプローブをプローブキューに格納し、順番にプローブの対応を行う。

また、21264は多くのコヒーレンス動作をサポートしており、ディレクトリベースのシステムにも拡張できる。標準的なMOESI (Modified, Owned, Exclusive, Shared, Invalid)のキャッシュ状態をサポートしている。

BIU は、幅広いシステムデータバススピードをサポートしています。システムデータインターフェースのピーク帯域幅は、1.5CPUサイクルあたり8バイトのデータで、400MHzの転送速度では3.2Gバイト/秒となる。ロードレイテンシ(ロードの発行からコンシューマの発行まで)は、DRAMアクセス時間60nsで160nsと低い値を実現しています。8つのインフライトMAFと8つのインフライトビクティムにより、多くの並列メモリオペレーションが可能となり、SRAMDRAMの高い効率性を実現するスケジュールを組むことができます。これは、キャッシュミスがあったとしても、高いメモリシステム性能につながります。例えば、21264 は Stream ベンチマークで 1.3Gbytes/sec (ユーザー可視) を超えるメモリバンド幅を維持しました7。

動的な実行例

この節では、2つの例で21264の動的適用性を説明する。

ストア/ロード メモリオーダリング

21264のメモリシステムは、アウトオブオーダ実行をサポートしつつ、インオーダアーキテクチャと同様のメモリモデルをサポートしている。レジスタのリネーム論理と異なり、Read After Writeのメモリ依存性を静的に検出ることができないため、メモリシステムは命令が発行されたあと、問題となるケースを動的に検出することができる。

ここでは、21264がロード命令の投機的実行に失敗した際のコストを回避するための方法示している。ここでは、最初の投機的実行失敗を記録し、それ以降の実行ではロードの実行を遅らせる。

図10では、21264がRead After Writeのハザードを解決する方法示している。左側の命令リストでは、ストア命令(STQ)に対してロード命令(LDQ)が実行される。ロード命令ができるだけ早く発行され、ストア命令よりも前に発行される。これにより間違ったデータを受け取ってしまう。これを検出したあと、以降の実行では、フェッチ時にロードに対応するストアテーブルのビットが設定され、ストア・ロードの順序違反を検出し、ロード命令が投機的に実行されることを防ぐ。

図は本論文中より引用

つまり、マークされたロード命令はストア命令が実行されるまで待ち、マークされていないロード命令は可能な限り早く発行しようとする。

ロードヒット・ミス予測

21264の陶器実行ロード命令では、整数ロードヒットレイテンシを3サイクルで達成するために、整数ロードによるデータを使用する命令(データ使用命令)を投機的に発行する必要がある。これによりデータ使用命令は可能な限り早くロード命令からのデータをバイパスすることができる。データキャッシュのステージは命令発行ステージの3サイクル後である。ロード命令のデータキャッシュにおけるヒット・ミスを識別するために、さらにもう1サイクル必要となる。

このような状況下で、整数ロードデータのキャッシュミスが発生し後続のデータ命令の実行を中止するために、命令パイプライン全体を再起動する必要があるが、コストが掛かりすぎるので、ミニスタート機構で実現する。

ロードミスが発生した命令の3サイクル後にデータ処理命令が投機的に命令を発行すると、ミスが発生した時点で後で再発行されるように発行キューに引き戻される。ロードがヒットすれば、図11に示したようなスケジュールで命令が実行される。しかし、ロードのミスが発生した場合に、5サイクル目と6サイクル目に無関係な命令L5とL6が実行される。

この2サイクルのウィンドウは、プロセッサのパイプラインを完全に再起動するよりはコストは小さい。21264はロード命令がいつミスするかを予測し、その場合はデータ消費命令を投機的に発行しないように予測している。

図11の下半分は、予測を行った場合の命令スケジュール例である。ミス予測が行われたロード命令のデータ使用命令は、レイテンシは3サイクルではなく5サイクルとなる。

図は本論文中より引用