|
===================================== 〔語彙分解〕的な部分一致の検索結果は以下の通りです。 ・ ー : [ちょうおん] (n) long vowel mark (usually only used in katakana)
レジスタ・リネーミング(''register renaming'')とは、コンピュータのプログラム内でレジスタを再利用しているために不必要な順序性が生じているのを、より多くの実在するレジスタを利用して再利用されているレジスタに割り当て、依存を無くす技術である。 == 解決すべき問題 == プログラムは、何らかの値に何らかの操作をする命令が並んだものである。 命令がそれらの値を区別するために、それぞれの値に名前をつける。 たとえば、「X と Y を足して、結果を Z に置く」という命令では、X、Y、Zが格納場所の名前である。 命令をコンパクトにまとめるため、多くのプロセッサの命令セットでは直接名前を指定できる特別な場所を少しだけ用意している。 たとえば、x86命令セットアーキテクチャでは8個の整数レジスタがあり、x86の64ビット版(AMD64)では16個、PowerPCや多くのRISCでは32個、そしてIA-64では128個用意している。 小さなプロセッサでは、これらの場所の名前は直接レジスタファイルの中の場所に対応している。 命令の種類が違えば、その処理にかかる時間も異なる。 たとえばプロセッサはメモリからロードしようとしている間に何百という命令を実行できるかもしれない。 短い命令を時間のかかるロードを待っている間に行うと、命令がプログラムが本来指定している順番とは違った順番で進行していることになる。 このようなアウト・オブ・オーダー実行は性能向上のために最近の高性能CPUでよく行われている。 以下のようなコードをアウト・オブ・オーダー実行CPUで動作させることを考える。 # ロード:メモリ1024番地からレジスタ1へ # 加算:レジスタ1へ 数値 2 を加算 # ストア:レジスタ1の内容を1032番地へ # ロード:2048番地からレジスタ1へ # 加算:レジスタ1へ 数値4 を加算 # ストア:レジスタ1の内容を2056番地へ 4, 5, 6 の命令は 1, 2, 3 の命令とはやろうとしていることに依存関係はない。 しかし、命令4 は命令3 が完了しないと実行できない。 さもなくば、命令3 は間違った値を書き込んでしまう。 これは、レジスタの名前を変えるだけで解決可能である。 # ロード:メモリ1024番地からレジスタ1へ # 加算:レジスタ1へ 数値 2 を加算 # ストア:レジスタ1の内容を1032番地へ # ロード:2048番地からレジスタ2へ # 加算:レジスタ2へ 数値4 を加算 # ストア:レジスタ2の内容を2056番地へ これで命令4,5,6 と命令1,2,3は並行して実行できるようになり、プログラムが高速化される。 可能ならば、コンパイラはこの種のリネーミングを行う。 しかし、命令セットアーキテクチャでレジスタ数が限定されているため、コンパイラのできることは限られている。 多くの高性能CPUは、命令セットアーキテクチャが規定するより多くの実レジスタを持っていて、レジスタをいわば仮想化し、命令が示すレジスタと実レジスタの対応をハードウェアで切り替えている。このようなリネーミングにより並列性を高めている。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「レジスタ・リネーミング」の詳細全文を読む スポンサード リンク
|