前回の続き:
"The MIPS R10000 Superscalar Microprocessor" の論文を改めて読んでみて、NotebookLMを使ってまとめてみた。すごく便利だ。便利すぎて頭に入らないよ。
以下の文章は全部AIで生成してもらったので注意です。
レジスタリネーミング
アウトオブオーダー実行を実現するために、R10000はレジスタリネーミングを使用する。
論理レジスタと物理レジスタ
プログラマには見えない形で、命令フィールドで参照される論理レジスタ番号が、ハードウェアレジスタファイル内の物理レジスタ番号に動的にマップされる。
物理レジスタの数
物理レジスタは論理レジスタよりも多く、コミットされた値と、完了したがグラデュエートしていない命令の一時的な結果の両方を保持する。
- 整数レジスタ: 33の論理レジスタ(1~31、Hi、Lo)と64の物理レジスタ
- 浮動小数点レジスタ: 32の論理レジスタ(0~31)と64の物理レジスタ
レジスタマップテーブル
論理レジスタから物理レジスタへの現在の割り当てを保持する。整数用と浮動小数点用で独立している。
フリーリスト
現在割り当てられていない物理レジスタのリストを保持する。
アクティブリスト
プロセッサ内で現在アクティブなすべての命令を記録する。グラデュエーションまたは例外/誤予測分岐によるアボート時に命令がリストから削除される。最大32命令がアクティブである可能性があり、アクティブリストは4つの並列、8段の循環FIFOで構成されている。
ビジービットテーブル
各物理レジスタが現在有効な値を含んでいるかを示すビットを保持する。
命令キュー
R10000は、命令タイプに応じて3つの命令キューに命令を配置する。
整数キュー
16エントリを持ち、ALUへの発行時にエントリを解放する。オペランドの準備状況に基づいてアウトオブオーダーで発行される。
アドレスキュー
16エントリの循環FIFOで、オリジナルのプログラム順序を維持する。ロード/ストア命令を処理し、メモリ依存性を判断する。アドレスキューはロード/ストア命令を元の順序とは異なる順序で実行するが、逐次メモリ一貫性を維持する。
逐次メモリ一貫性の維持
外部インターフェースがキャッシュラインを無効化した後に、そのデータがレジスタにロードされ、しかしそのロード命令がグラデュエートする前にデータが使用された場合、キューはロード命令にソフト例外を生成する。これによりパイプラインがフラッシュされ、ロード命令とその後のすべての命令がアボートされ、古いデータが使用されないようにする。その後、例外を継続するのではなく、プロセッサはアボートされたロード命令から通常の実行を再開する。
ロードリンク (LL) およびストア条件付き (SC) 命令
MIPSアーキテクチャは、ロードリンク (LL) とストア条件付き (SC) 命令ペアでアトミックメモリ操作をシミュレートする。これらの命令はメモリへのロックアクセスを必要としないため、システム設計を複雑にしない。SC命令は、競合がなくリンクワードがキャッシュに残っている場合にのみメモリに書き込む。
浮動小数点キュー
16エントリを持ち、整数キューと似ているが、即値は含まれない。
実行ユニット
整数実行ユニット
ALU1とALU2
それぞれ64ビット加算器と論理ユニットを含む。ALU1はシフタと分岐条件ロジックを、ALU2は部分整数乗算アレイと整数除算ロジックを含む。
乗算と除算
ALU2で反復的に計算される。乗算はBoothのアルゴリズムを、除算は非回復型アルゴリズムを使用する。
浮動小数点実行ユニット
加算器と乗算器
3ステージパイプラインで、単一サイクル繰り返しレートのフルパイプラインである。
除算と平方根
独立した反復ユニットが、SRTアルゴリズムを使用してサイクルあたり2ビット生成する。除算ユニットはサイクルあたり4ビット生成するために2つのステージをカスケード接続する。
メモリ階層
R10000は、ノンブロッキングの2レベルセットアソシアティブキャッシュメモリ階層を実装している。
プライマリキャッシュ (オンチップ)
命令キャッシュ (32KB)
8,192命令ワードを格納し、各ワードは36ビット形式にプリデコードされる。同時に両方のキャッシュウェイから4つの命令をフェッチし、キャッシュヒットロジックが目的の命令を選択する。
データキャッシュ (32KB)
帯域幅を増やすために2つの16KBバンクをインターリーブする。
セカンダリキャッシュ (外部)
基本仕様
512KBから16MBまでの外部同期SRAMチップで実装された2ウェイセットアソシアティブキャッシュである。ラインサイズは16または32ワードに構成可能である。
疑似セットアソシアティブ
標準SRAMと1つの追加アドレスピンで2ウェイの疑似セットアソシアティブを実現する。
エラー訂正コード (ECC)
データ整合性のため、各データクワッドワードに9ビットのECCコードとパリティビットを格納する。
システムインターフェース
R10000は、64ビットのスプリットトランザクションシステムバスを使用して外部と通信する。
クラスター接続
最大4つのR10000チップを直接クラスター接続できる。
ノンブロッキングキャッシュリフィル
最大4つの未処理の読み取り要求をサポートする。
キャッシュコヒーレンシ
8エントリのクラスターバッファが未処理の操作を追跡し、キャッシュコヒーレンシを確保する。
クロック
オンチップのPLLが、外部システムインターフェースクロックと同期してすべてのタイミングを生成する。システム設計の柔軟性のため、セカンダリキャッシュとシステムインターフェースのクロック周波数を独立して設定できる。
パイプラインクロックの2倍で動作するPLLクロックを基準としている。パイプラインが200MHzで動作する場合、PLLは400MHzで動作し、ユーザーはシステムインターフェースを200、133、100、80、66.7、57、または50MHzで設定できる。また、セカンダリキャッシュを200MHzから66.7MHzの間で独立して設定できる。
出力ドライバー
4つのバッファグループがあり、LVCMOSまたはHSTL規格に個別に設定可能である。キャッシュアドレスバッファは大きなトーテムポールトランジスタを使用して複数の分散負荷を高速駆動する。キャッシュクロックバッファは最小出力遅延で低インピーダンス差動信号を駆動する。低ジッタ遅延要素がこれらのクロックを精密にアライメントし、プリント基板のクロックネットでの伝播遅延に合わせて静的に設定されるため、クロックの立ち上がりエッジがプロセッサの内部クロックと同時にキャッシュに到達する。
パフォーマンス
200MHzのR10000マイクロプロセッサ、4MBセカンダリキャッシュ(200MHz)、100MHzシステムインターフェースバス、および180nsメモリレイテンシを持つシステムでの予測パフォーマンスは以下の通りである。
- SPEC95int (ピーク): 9
- SPEC95fp (ピーク): 19
まとめ
MIPS R10000は、当時の最先端のアウトオブオーダー実行技術を駆使した革新的なプロセッサであった。レジスタリネーミング、投機的実行、ノンブロッキングキャッシュなどの技術により、高い命令レベルの並列性を実現し、複雑なリアルワールドアプリケーションにおいて優れたパフォーマンスを発揮した。
特に注目すべきは、逐次メモリ一貫性を保ちながらアウトオブオーダー実行を実現した点である。これにより、プログラマには逐次実行と同じ見た目を提供しつつ、内部では高い並列性を実現するという、理想的な設計を実現している。
R10000の設計思想と技術は、その後のプロセッサ設計に大きな影響を与え、現代の高性能プロセッサの基礎となっている。