"The MIPS R10000 Superscalar Microprocessor" の論文を改めて読んでみて、NotebookLMを使ってまとめてみた。すごく便利だ。便利すぎて頭に入らないよ。
以下の文章は全部AIで生成してもらったので注意です。
はじめに
MIPS R10000は、シリコン・グラフィックス社(Silicon Graphics, Inc.)によって開発された、動的なアウトオブオーダー実行機能を備えた64ビットのスーパースカラーマイクロプロセッサである。 MIPS IV命令セットアーキテクチャを実装しており、複雑なリアルワールドアプリケーションにおいて高いパフォーマンスを発揮するように設計されている。
主要な特徴
アウトオブオーダー・スーパースカラー実行
R10000の最大の特徴は、アウトオブオーダー・スーパースカラー実行である。 キャッシュミスによって停止した命令のさらに先の命令を実行することで、レイテンシによる時間ロスを最小限に抑える。 これにより、他の命令を完了させ、後続のキャッシュ・リフィルを早期に開始することができる。
MIPS IV ISAの64ビット実装
64ビットのMIPS IV命令セットアーキテクチャを完全に実装しており、当時の最新の命令セット機能を活用している。
高性能な命令フェッチとデコード
サイクルあたり4つの命令をフェッチおよびデコードし、5つのフルパイプライン、低レイテンシの実行ユニットに動的に発行する。 これにより、高い命令レベルの並列性を実現している。
投機的実行
分岐を超えて投機的に命令をフェッチし、実行することができる。分岐予測の精度が高い場合、パイプラインの停止を大幅に削減できる。
順序通りのグラデュエーション
命令は完了時に順序通りにグラデュエート(完了)する。 これにより、プログラムの意味論を保ちながら、アウトオブオーダー実行の利点を享受できる。
逐次メモリ一貫性と正確な例外処理
実行はアウトオブオーダーであるが、逐次メモリ一貫性と正確な例外処理を提供する。 これにより、プログラマには逐次実行と同じ見た目を提供しつつ、内部では高い並列性を実現している。
階層型ノンブロッキングメモリシステム
2レベルのセットアソシアティブ、ライトバックキャッシュにより、メモリレイテンシを隠蔽する。 この階層型のノンブロッキングメモリシステムは、メモリレイテンシを効果的に隠蔽する。
モジュラーデザイン
複雑性に対処するため、アクティブリスト、レジスタマップテーブル、命令キューなど、多くの制御ロジックを規則的な構造内に配置したモジュラーデザインを採用している。
製造技術
0.35μm CMOS技術を使用し、16.64x17.934mmのチップ上に680万個のトランジスタ(プライマリキャッシュアレイに440万個)を搭載している。この298 mm²のチップは、当時の最先端の製造技術を活用している。
設計理念
メモリ帯域幅とレイテンシが多くのプログラムのパフォーマンスを制限するため、R10000はこれらのリソースを効率的に利用するように設計されている。
レジスタマッピングとノンブロッキングキャッシュ
キャッシュリフィル操作をオーバーラップさせるために相互に補完する仕組みを採用している。これにより、命令がキャッシュミスした場合でも、他の命令はアウトオブオーダーで実行を継続できる。
動的命令リオーダー
オペランドの可用性に基づいて命令実行を動的にリオーダーする複雑なハードウェアを備えている。これはキャッシュミスが命令を遅延させる際に即座に適応する仕組みである。
命令ウィンドウ
最大32命令を先読みし、並列処理の可能性を探す。 これはセカンダリキャッシュからのリフィルレイテンシのほとんどを隠蔽するのに十分な大きさであるが、メインメモリのレイテンシの一部しか隠蔽できない。 メインメモリのレイテンシは通常、セカンダリキャッシュよりもはるかに長いためである。
パイプラインと命令実行
R10000は、6つのほぼ独立したパイプラインを持っている。
命令フェッチパイプライン (ステージ1-3)
ステージ1: 命令フェッチとアライメント
次の4つの命令をフェッチしてアラインする。
ステージ2: デコードとリネーム
命令をデコードおよびリネームし、ジャンプおよび分岐命令のターゲットアドレスを計算する。
ステージ3: キューへの書き込み
リネームされた命令をキューに書き込み、オペランドが最初にビジーであるかを判断するためにビジービットテーブルを読み取る。オペランドがすべて準備できるまで、命令はキューで待機する。
実行パイプライン (ステージ3-X)
ステージ3 (後半): 命令発行とオペランド読み取り
キューが命令を発行し、レジスタファイルからオペランドを読み取る。5つの実行パイプラインは、ステージ3でキューが命令を発行したときに開始される。プロセッサはステージ3の後半にレジスタファイルからオペランドを読み取り、ステージ4で実行を開始する。
ステージ4: 実行開始
実際の命令実行が開始される。
レイテンシ
- 整数パイプライン: 1ステージ
- ロードパイプライン: 2ステージ
- 浮動小数点パイプライン: 3ステージ
結果の書き込み
結果は次のステージの前半にレジスタファイルに書き込まれる。
独立した整数/浮動小数点セクション
最大限の並列操作を可能にするために、独立した命令キュー、レジスタファイル、データパスを持っている。
命令フェッチと分岐予測
高帯域幅のフェッチ
プロセッサは、実行できるよりも高い帯域幅で命令をフェッチおよびデコードする必要がある。これにより、分岐予測ミスやキャッシュミスによる停止を最小限に抑えることができる。
投機的フェッチ
分岐予測に基づいて、投機的に命令をフェッチする。誤予測された分岐の後の命令は破棄される。この仕組みにより、分岐予測が成功した場合のパフォーマンス向上を実現している。
分岐予測
512エントリの分岐履歴テーブルに基づいた2ビットアルゴリズムを使用する。Spec92整数プログラムでは87%の予測精度を示す。この高い予測精度により、投機的実行の効果を最大化している。
アラインされていない命令フェッチ
16ワードの命令キャッシュライン内の任意のワードアラインメントで、4つの命令を並行してフェッチする。これにより、命令の配置に関係なく、高いフェッチ帯域幅を維持できる。