レジスタ・リネーミング
そのタグをソースタグとして持っている命令が発行キューにあると、そのタグはレディ状態に変化する。 リマップ・ファイルでも同様にマッチしたタグをレディ状態に変更し、対応する物理レジスタが使用可能であることを示す。
発行キュー上の命令の全てのオペランドがレディになると、その命令が実行可能となる。 発行キューはサイクル毎に実行可能となった命令を取り出して機能ユニットに送る。 実行可能になっていない命令はキューに留められる。このように発行キューから順番とは関係なく命令を取り除くことによって性能が向上するのである。
実行される命令はタグインデックス付物理レジスタファイルから読み込んで、処理を実行する。
実行結果はタグインデックス付物理レジスタファイルに書き込まれ、そのタグがレディになったことが全体に通知される。
実行完了すると、結果格納したアーキテクチャ上のレジスタに以前対応していたタグがフリータグFIFOにつながれ再利用される。
例外や分岐予測失敗が発生すると、正しく完了している命令までの結果でリマップ・ファイルを戻す。 この機構があって、いかなるリマップ状態にも戻せるので、分岐予測失敗処理は対応する分岐命令が実行完了する前に完了できる。 そのため分岐予測失敗による遅延は発生しない。 (予測失敗していなければもっと性能向上したのにという話は、まったく別のことである。)
Future File と組み合わせて使われる。
上書きされるレジスタの古い値を格納。
その古い値を作った命令が実行中なら、それはHistory Bufferの番号でインデックスされたRAMかもしれない。
分岐予測が失敗した場合、History Buffer を使って古い内容を新しいものとしてコピーするかFuture Fileを読めなくする。
History Buffer は論理レジスタ番号でインデックスされる連想メモリ (Content Addressable Memory) である。
最も投機的に使用されているレジスタ状態。
論理レジスタ番号でインデックスされたRAM。
これは、R10000、21264、AMD AthlonのFP部分に使われた形式である。
リネーミング段階では、参照されているアーキテクチャ上のレジスタ全部について、アーキテクチャ上のレジスタ番号でインデックスされたリマップ・ファイルを参照する。 このファイルはタグとレディビットを返す。 そのレジスタに書き込もうとしている命令が実行中で完了していない場合、渡されたタグはレディ状態でないということになる。 読み込みオペランドの場合、タグは命令で指定されたアーキテクチャ上のレジスタ番号と置き換えられる。書き込みオペランドについては、毎回新たなタグをフリータグFIFOから取り出して使用する。 そして、新たなマッピングがリマップ・ファイルに書き込まれ、その後の命令が同じレジスタを読み込む場合にそのタグを得ることになる。タグは命令が実行されていないのでレディでない状態とされている。 以前にそのアーキテクチャ上のレジスタに割り当てられていた物理レジスタは対応する命令と共にReorder Bufferに格納される。 Reorder BufferはFIFOで命令をプログラムの順番通りに並べて格納し、デコードから実行完了までの間保持する。
命令はその後様々な発行キューに置かれる。
命令が実行されると、その結果に関わるタグが全体に通知される。