レジスタ・リネーミング
上述を踏まえ、以下のようなコードをアウト・オブ・オーダー実行CPUで動作させることを考える。
#4, 5, 6 の命令は #1, 2, 3 の命令とはやろうとしていることに依存関係はない。 しかし、命令#4 は命令#3 が完了しないと実行できない。 さもなくば、命令#3 は間違った値を書き込んでしまうかもしれないからである。具体的には、レジスタ1の内容が、命令#3で読み取っている最中に 命令#4で書き換えられてしまう可能性がある。
これは、レジスタの名前を変えるだけで解決可能である。
これで命令#4,5,6 と命令#1,2,3は並行して実行できるようになり、プログラムが高速化される。
可能ならば、コンパイラはこの種のリネーミングを行う工夫を行う。しかしレジスタ数はどのプロセッサでも少ないため、コンパイラ(ソフトウェア)でできることは限られる。
多くの高性能CPUは、公開されている仕様より多くの実レジスタを持っていて、レジスタをいわば仮想化し 命令が示すレジスタと実レジスタの対応をハードウェアで動的に切り替えて( レジスタ リネーミングして )いる。このようなリネーミングにより並列性を高めている。