FPGA開発日記

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

Alpha 21264に関する論文を読む (2. 命令発行キュー)

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

ieeexplore.ieee.org


アウトオブオーダ実行

21264は毎サイクル4つの命令をフェッチし、不必要なレジスタ依存を避けるためにレジスタリネームを行い、オペランドまたは機能ユニットが利用可能になるまで命令を待機する。

最大で6命令を動的に発行(4つの整数命令と2つの浮動小数点命令)する。インオーダ命令リタイアにより、プログラマにインオーダな実行モデルを提供する。

レジスタリネーム

レジスタリネームにより、不要な依存関係が排除され、投機的実行が可能となり、命令並列性が顕在化する。レジスタリネームによりWrite-After-WriteおよびWrite-After-Readの依存性を排除するが、正しい計算に必要なRead-After-Writeのレジスタ依存性は維持される。

図5の左側はレジスタリネームの段階をより詳細に示したものである。プロセッサは物理レジスタと論理レジスタ(ISAレジスタ)の次いで管理する。従って、レジスタのリネームは、宛先レジスタの物理レジスタ割り当てとともに、レジスタソースをCAMで検索することになる。レジスタマップステージ以降のすべてのパイプラインステージでは、論理ISAレジスタではなく、内部物理レジスタを操作することになる。

31本の整数、浮動小数点ISA論理レジスタのほかに、41本ずつ整数及び浮動所数点レジスタが利用可能となっている。レジスタマッパーは、投機実行の失敗が発生した場合にマシンアーキテクチャの状態を復元できるように、レジスタマップの状態を保存する。

Alphaの条件付き移動命令は、マップステージで特別に処理される。この命令は、2つのソースレジスタのうちの1つを書き込みレジスタに条件付きで移動する。この命令は、2つのソースレジスタ、書き込みレジスタ、古い値を保持するレジスタの3つのレジスタソースが必要となる。

21264では、条件付き移動命令を2つの命令に分割してマッピングしている。

アウトオブオーダ発行キュー

発行キューは、整数用と浮動小数点用の2種類のペンディングキューを管理している。各サイクルにおいて、キューの論理はこれらの命令からオペランドが使用可能になった命令を選択する。レジスタの管理には整数レジスタ番号に基づくレジスタスコアボードを使用する。これらのスコアボードは内部の物理レジスタ番号の状態をトラッキングする。

機能ユニット、もしくはロードデータの結果が入手可能となると、スコアボードユニットはキュー内の当該レジスタを使用するすべての命令に通知する。20エントリの整数命令キューから4つの命令を発行することができ、15エントリの浮動小数点命令キューからは2つの命令を発行することができる。この命令キューは図5に示したものである。

整数命令側のキューは格納される前に、2つのアービタのうちの1つに静的に割り当てられる。書くアービタは、キューに入った命令のうち、最も古い2つの命令を各サイクル動的に発行する。整数キューは、2つお整数実行エンジンの使用率を均等にするために、命令フェッチの位置に基づいて命令をスロットに割り当てる。

整数命令キューと浮動小数点キューは、投機的に命令を発行する。各キュー内における元も古いオペランドレディな命令を選択して実行する。命令が発行されたり投機ミスで廃棄されると、そのエントリはすぐに利用可能となる。新しい整数命令は4つ以上の利用可能なキュースロットがある場合に発行キューに入ることができ、浮動小数点命令は十分に利用可能なキュースロットがある場合に入ることができる。

命令のリタイアと例外のハンドリング

命令はがアウトオブオーダに発行された土地世とm、命令のフェッチとリタイアはインオーダである。インオーダリタイアのメカニズムによって、プログラマから見て命令をインオーダに実行しているように見せかけることができる。リタイアメカニズムによってインフライトウィンドウ内のスロットにフェッチの順番で命令をマッピングする。命令が実行を開始すると、過去のすべての命令がリタイアし、例外が発生しないことを確認できた段階で、その命令もリタイア可能となる。命令のリタイアにより、その命令は非投機的であることが保証される。

21264はプリサイスな例外モデルを使用し、インオーダなリタイアを実現している。

リタイアメカニズムは、インフライトな命令の内部の物理レジスタの状態も記録している。対応する命令の書き込みレジスタの過去の値を保持している。このレジスタは、命令がリタイアした後、他の命令が使用するために開放することができる。

例外が発生すると、例外が発生した命令よりも新しいインフライトな命令はすべて破棄される。レジスタマップは最後の命令が破棄される前の状態にバックアップされる。各インフライト命令のマップ状態は保存されているため、簡単に復元することができる。リタイアした命令で確保されていたレジスタはすぐに使用可能となる。