FPGA開発日記

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

Alpha 21264に関する論文を読む (4. 実行ユニット / メモリアクセスユニット)

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

ieeexplore.ieee.org


実行エンジン

図6は、6つの実行パイプラインを示したものである。各パイプラインは、対応するレジスタファイルの上下に配置されている。

2つのレジスタファイルが用意されているのは、クラスタ0とクラスタ1でレジスタの読み書きを分離し、合計で4ウェイ整数命令実行をサポートしている。クラスタリングアービトレーションの簡素化により、性能コストは数パーセントダウンするが受け入れ可能である。

図6には浮動小数点実行パイプラインの構成も示している。1つのクラスタに2つの浮動小数点実行パイプラインがあり、72エントリの物理レジスタファイルを備えている。

図は本論文中より引用

21264には、21164には搭載されていなかった新規命令が搭載されている。

内部メモリシステム

内部メモリシステムにおいて、整数実行パイプから最大で2つのメモリアクセスを実行することができる。この2つのメモリアクセス命令はアウトオブオーダで実行される。

  • 最大32個のインフライトメモリロード
  • 最大32個のインフライトメモリストア
  • 8つのインフライトキャッシュミス

を管理することができる。

64kBの2-wayセットアソシアティブデータキャッシュを搭載している。

データパス

21264は、1サイクル当たり2つのロード・ストア命令の任意の組み合わせをサポートしている。データキャッシュは、2ポートアクセスを許可するためにダブルポンプされている。これは、データキャッシュは毎サイクル2回参照され、クロックフェース上で2回アクセスが実行されている。

図7は、メモリシステムの内部データ経路を示したものである。

  • 64ビットデータバス(x2) : 非常に重要なもので、各ロード命令、データキャッシュ、ストアデータバッファ、L2フィルなどのデータはこのデータバスを通じて授受される。
  • ストア命令
    • データバスを介して投機的ストアバッファにデータを転送する。
    • ストア命令がリタイアすると、投機的ストアバッファに残されたデータをキャッシュに書き込む。
      • 2つのストア命令を1つに統合するため、各ストアデータエントリは128ビットをキャッシュに書き込むことができる。この書き込みもダブルバンプデータキャッシュである。
      • 投機的ストアバッファ内部に存在しているとき、後続のロード命令にそのデータを転送することができる。
      • ストールしているロード命令は、自分のAgeとアドレスをこれらのストールしているストア命令を比較し、一致した場合はストア命令からエントリにフォワードされる。

図7は、内部メモリシステムとデータの出入り口についても示している。フィルされたデータはデータバスを経由して渡される。また、データフィルと同時にそのキャッシュの内容が読みだされ、バスインタフェースユニットを通じてそのEvictionデータを外部に書き戻す。

図は本論文中より引用