レジスターとは何ですか?

コンピューターに特に興味がない場合は、コンピューターのメモリの形式はハード ドライブと RAM だけだと思い込んでしまうことは許されます。 コンピュータに興味のある人は、そうではないことを知っているでしょう。 CPUには、CPUがアクセスできるようにRAMからデータをキャッシュするために使用される一連のキャッシュもあります もっと早く。 これらはすべて宣伝されている機能です。主な理由は、速度や容量が適切なセールス ポイントであり、一般的にパフォーマンス レベルに影響を与えるためです。

ただし、実際にはもう 1 つのメモリ層があります。 L1 キャッシュが実際のプロセッシング コアにできるだけ近いと考えるかもしれませんが、メモリ階層には別の上位層があります。 これらは CPU レジスタです。 これらが実際に宣伝または言及されていない理由は、実際にはまったく変更されていないためです. 技術的には、レジスタの数とサイズは実際にはアーキテクチャの基本です。 これは、すべての x86-64 CPU が同じ数のレジスタを持っていることを意味します。 それらは競合するポイントではないため、販売されていません。

レジスターは何をしますか?

レジスタは、プロセッサがすぐに利用できるストレージの場所です。 レジスタへのアクセスはゼロ レイテンシで即時に行われますが、最新の CPU では L1 キャッシュでさえおよそ 4 ~ 5 サイクルのレイテンシがあります。 このアクセスの即時性は、レジスターの使用例を示唆しています。 レジスタは、CPU によってアクティブに操作されている命令を格納するために使用されます。 また、処理するデータ ポイントも格納します。 一部のレジスターは汎用目的ですが、他のレジスターは非常に特殊な目的を持っています。 特殊目的レジスタの例は、プロセッサがプログラム シーケンス内の位置を追跡するプログラム カウンタです。

多くのレジスタは、ユーザーがアクセスできると考えられています。 ただし、これは、コンピューターのユーザーがどの値を入力するかを選択できるという意味ではありません。 これは、実行中のソフトウェアがこれらのレジスタにロードされるデータを指定できることを意味します。 少数のレジスタは内部レジスタです。つまり、ソフトウェアはそれらをまったくアドレス指定できません。 現在実行中の命令を格納する命令レジスタは、内部レジスタの一例です。

改名登録

CPU アーキテクチャでは、レジスタの構成は 1 つしか許可されない場合がありますが、実際にはこれには微妙な違いがあります。 最近のすべての CPU は、レジスタの名前変更を利用しています。 これは、より多くの物理レジスタを用意し、それを使用してデータをプリロードしたり、そうでなければ上書きされたであろうアウトオブオーダー命令に関連するデータを格納したりする手法です。 CPU が余分なレジスターのデータを必要とする時点に到達すると、以前はアドレス指定可能だったレジスターをアドレス指定不可にすると同時に、アドレス指定可能になるように名前を変更するだけです。

レジスタの名前を変更するプロセスは、順不同で実行する場合に非常に役立ちます。 たとえば、あるメモリ位置が読み出されてから書き込まれるようにプログラムされていて、命令がその順序で実行された場合、これは問題ありません。 ただし、書き込みを最初に実行するように命令の順序を変更すると、読み取り命令は間違った値を取得します。 これを防ぐために、読み取られる元の値は未使用のレジスタに格納され、関連する命令が処理されるときに名前が変更されます。

結論

レジスタは、メモリ階層の最上位層です。 これらは、CPU が直接アドレス指定できる唯一の部分であり、待ち時間はありません。 レジスタは、CPU によってアクティブに実行されているデータを格納するために使用されます。 それらは、どの命令が次に実行されるかを追跡するプログラムカウンターなど、他のデータポイントを格納するためにも使用されます。 x86-64 アーキテクチャでは、16 個の汎用レジスタと、AVX-512 がサポートされているかどうかに応じて 16 個または 32 個の浮動小数点レジスタを使用できる非常に限られた数のレジスタを使用できます。