レジスタ・リネーミング(コンピュータアーキテクチャ技術)
CPUレジスタに関する偽の依存関係を取り除き、アウト・オブ・オーダー実行と高い命令レベル並列性を可能にするハードウェア手法。
概要
レジスタ・リネーミングは、同じアーキテクチャ・レジスタを再利用するプログラム命令の不要な直列化を防ぐために、コンピュータ工学で用いられるハードウェア技術である。各書き込みに一意の物理的な出力先を与えることで、プロセッサは真のデータ依存関係と偽の依存関係を区別し、独立した演算を同時に実行できる。
仕組み
プロセッサは、アーキテクチャ・レジスタ(プログラマから見える名前)から、より大きな物理レジスタ群への対応付けを維持する。パイプラインのリネーム段階では、空きプールから出力先レジスタが割り当てられ、対応表が更新される。そのアーキテクチャ・レジスタを読み取る後続命令は、新しい物理的なコピーを参照する。リネームされた値が不要になると、物理レジスタは空きリストへ戻される。
- 対処する依存関係:リネーミングは偽の依存関係、すなわちリード・アフター・ライト(逆依存)およびライト・アフター・ライト(出力依存)を除去する。ただし、真のライト・アフター・リードのデータフロー依存関係は除去しない。
- 主要な構造:レジスタ別名表(RAT)、物理レジスタ・ファイル、空きリスト、リオーダ・バッファ(ROB)、またはリザベーション・ステーション。
偽の依存関係を排除する初期のハードウェア方式には、スコアボーディングとトマスロのアルゴリズムがある。現代のスーパースカラ・プロセッサおよびアウト・オブ・オーダー実行プロセッサでは、投機的実行と並列実行を可能にするため、リネーム/ディスパッチ段階の一部としてレジスタ・リネーミングが実装されている。
利点とトレードオフ
リネーミングは命令レベル並列性を高め、パイプラインの利用効率を改善するため、短命なレジスタ値が多数あるワークロードで性能向上を可能にする。一方で、追加の物理レジスタ用シリコン、正確な例外処理と回復のためのより複雑な管理、空きリストが枯渇した場合に発生し得るストールというコストがある。
レジスタ・リネーミングは、コンパイラのレジスタ割り付けとは異なる。コンパイラはコンパイル時に限られたアーキテクチャ・レジスタ群を変数へ割り当てるのに対し、ハードウェア・リネーミングは実行時に、それらのアーキテクチャ・レジスタを物理ストレージへ動的に再対応付けする。より技術的な解説については、入門書やプロセッサ設計の文献、技術概要、およびCPUマイクロアーキテクチャ論文の実装事例(命令レベルの考慮事項の例)を参照。
関連項目
著者
AlegsaOnline.com レジスタ・リネーミング(コンピュータアーキテクチャ技術) Leandro Alegsa
URL: https://ja.alegsaonline.com/art/81904
出典
- lmi17.cnam.fr : "Implementing Precise Exceptions in Pipelined Processors"