レジスタリネーミング【register renaming】

CPUがプログラムを実行する際、命令列には同じレジスタを読み書きする箇所が頻繁に登場する。このとき、ある命令の書き込み先レジスタを後続の命令が参照している場合(RAW:Read After Write)は真のデータ依存であり順序を守る必要がある。
しかし、ある命令の書き込み後に後続の命令も書き込みしている場合(WAW:Write After Write)や、読み込み後に書き込みしている場合(WAR:Write After Read)については命令間でレジスタを介したデータのやり取りをしておらず、単に前後でレジスタ名が重複しているだけである。これを「偽依存」と呼び、レジスタリネーミングはこれを解消するための仕組みである。
具体的には、命令が指定する論理レジスタ(CPUアーキテクチャ上のレジスタ名)を、CPU内部に用意された多数の物理レジスタへと動的に対応づける。異なる命令が同じ論理レジスタ名を指名していても、それぞれ別の物理レジスタに割り当てることで依存関係がなくなり、順序を入れ替えて並列実行することが可能になる。この対応づけを管理するハードウェア構造は「RAT」(Register Alias Table)あるいは「レジスタマップ」(register map)と呼ばれる。
この技術は、「スーパースカラ」や「アウトオブオーダー実行」などの高速化技術を採用する多くの現代的なCPUで重要な役割を果たしている。内部では「リオーダバッファ」(ROB: Reorder Buffer)などの構造と組み合わせて実装され、プログラムの見かけ上の実行順序を保ちながら、CPU内部で効率的な並列処理を実現する。パソコンで主流のx86アーキテクチャはプログラムから見えるレジスタ数が少ないため、レジスタリネーミングによる恩恵が特に大きいとされる。