アーキテクチャ上のレジスタと実際のレジスタ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/06/02 00:56 UTC 版)
「レジスタ・リネーミング」の記事における「アーキテクチャ上のレジスタと実際のレジスタ」の解説
機械語のプログラムでは命令セットアーキテクチャ (ISA) によって規定された数のレジスタで読み書きを行う。たとえば、AlphaのISAは32本の64ビット整数レジスタと32本の64ビット浮動小数点レジスタを規定している。これらはアーキテクチャ上のレジスタである。Alpha命令セットの動作するプロセッサのためのプログラムはそれら64本のレジスタを読み書きする命令から成っている。プログラマがデバッガを使ってプログラムの実行を中断すると、それら64本のレジスタの内容を知ることができる。 Alpha 21264 はこのISAを実装しているプロセッサのひとつであるが、物理的には 80本の整数レジスタと 72本の浮動小数点レジスタを持っている。つまり、Alpha 21264 は整数処理の結果を格納できる80の分離した格納場所を持ち、浮動小数点演算結果を格納できる72の分離した格納場所を持っている。(実際にはそれ以上の格納場所があるのだが、それらはレジスタ・リネーミングとは無関係である。) 以下では、レジスタ・リネーミングのふたつの手法を説明していく。これらはデータ格納回路の構成で区別される。 すべてのリネーミング手法では、命令が参照しているアーキテクチャ上のレジスタをタグに変換する。アーキテクチャ上のレジスタが3ビットから5ビットで識別される(8~32コのレジスタを識別できる)としたら、タグは一般に6から8ビットとなる。リネームファイルはサイクル毎に命令を入力ポートから読み込んで、リネームを施した(若干長くなった)命令を出力ポートに出力する。レジスタファイルはポート数の二乗に比例して回路が大きくなるため、物理的に大きく、電力も消費する。 タグインデックス付レジスタファイルという形式では、データ格納のための大きなひとつのレジスタファイルがあり、タグ毎にひとつのレジスタを持っている。たとえば、マシンが80本のレジスタを物理的に持っていたら、タグは7ビットとなり、タグ値のうち48種類は使用されない。またこの形式では、命令が実行ユニットに発行されると、ソースレジスタのタグが物理レジスタファイルに送られ、それらのタグに対応したレジスタの内容が実行ユニットに渡される。 予約機構(Reservation Stations)という形式では、より小さなレジスタファイルが複数存在し、それぞれが個々の実行ユニットに対応している。各命令の各オペランドはそれらレジスタファイルのいずれかの場所に対応している。この形式では、実行ユニットに命令が発行されると、その実行ユニットに対応したレジスタファイルからオペランドに指定されたレジスタ内容が実行ユニットに送られる。 アーキテクチャ上のレジスタファイル または Retirement Register File (RRF) コミットされたマシンの状態。 論理レジスタ番号でインデックスされたRAM。 典型的にはリオーダーバッファからリタイアあるはコミットされて出てきた値が書き込まれる。 Future File 最も投機的に使用されているレジスタ状態。 論理レジスタ番号でインデックスされたRAM。 Active Register File インテル P6 グループでの Future File の呼び方。 History Buffer Future File と組み合わせて使われる。 上書きされるレジスタの古い値を格納。 その古い値を作った命令が実行中なら、それはHistory Bufferの番号でインデックスされたRAMかもしれない。 分岐予測が失敗した場合、History Buffer を使って古い内容を新しいものとしてコピーするかFuture Fileを読めなくする。 History Buffer は論理レジスタ番号でインデックスされる連想メモリ (Content Addressable Memory) である。 Reorder Buffer (ROB) 実行中の命令に関する様々な情報が順番に並ぶ。ただし、History Bufferとは異なり、Redorder BufferはFuture FileとRRFの間に存在する。 Reorder Bufferはデータ無しバージョンとデータ有りバージョンがある。 WillametteのROBの各エントリは物理レジスタファイル(PRF)内のレジスタを指しており、他にも様々な簿記的情報を格納している。 P6のROBでは、各エントリがデータを持っている。PRFは分離されていない。ROBのデータはリタイア時にRRFにコピーされる。
※この「アーキテクチャ上のレジスタと実際のレジスタ」の解説は、「レジスタ・リネーミング」の解説の一部です。
「アーキテクチャ上のレジスタと実際のレジスタ」を含む「レジスタ・リネーミング」の記事については、「レジスタ・リネーミング」の概要を参照ください。
- アーキテクチャ上のレジスタと実際のレジスタのページへのリンク