
プロセッサレジスタは、コンピュータのプロセッサが利用できる、すぐにアクセスできる場所です。[1]レジスタは通常、少量の高速ストレージで構成されていますが、一部のレジスタは特定のハードウェア機能を持ち、読み取り専用または書き込み専用の場合があります。コンピュータアーキテクチャでは、レジスタは通常、メインメモリ以外のメカニズムによってアドレス指定されますが、場合によっては、DEC PDP-10、ICT 1900などのメモリアドレスが割り当てられることもあります。[2]
ロード/ストア アーキテクチャの有無に関わらず、ほぼすべてのコンピュータは、データの項目を大きなメモリからレジスタにロードし、算術演算、ビット演算、およびその他の演算に使用し、マシン命令によって操作またはテストします。操作された項目は、多くの場合、同じ命令または後続の命令によってメイン メモリに格納されます。最新のプロセッサは、スタティックRAMまたはダイナミック RAM のいずれかをメイン メモリとして使用し、後者は通常、1 つ以上のキャッシュ レベルを介してアクセスされます。
プロセッサ レジスタは通常、メモリ階層の最上位にあり、データにアクセスする最速の方法を提供します。この用語は通常、命令セットで定義されているように、命令の一部として直接エンコードされるレジスタのグループのみを指します。ただし、最新の高性能 CPU では、レジスタ名の変更によってパフォーマンスを向上させ、並列実行と投機的実行を可能にするために、これらの「アーキテクチャ レジスタ」の複製が頻繁に使用されます。最新のx86設計では、1995 年頃にPentium Pro、Cyrix 6x86、Nx586、およびAMD K5のリリースでこれらの手法が採用されました。
コンピュータ プログラムが同じデータに繰り返しアクセスすることを、参照の局所性と呼びます。頻繁に使用される値をレジスタに保持することは、プログラムのパフォーマンスにとって重要です。レジスタの割り当ては、コード生成フェーズでコンパイラによって実行されるか、アセンブリ言語プログラマによって手動で実行されます。
サイズ
レジスタは通常、保持できるビット数で測定されます。たとえば、「8 ビットレジスタ」、「32 ビットレジスタ」、「64 ビットレジスタ」、またはそれ以上です。一部の命令セットでは、レジスタはさまざまなモードで動作し、ストレージ メモリを小さな部分に分割します (たとえば、32 ビットを 4 つの 8 ビットに分割します)。これらの部分に複数のデータ (ベクター、つまり1 次元のデータ配列) を同時にロードして操作できます。通常、これは、メモリをより大きなレジスタにマップする追加のレジスタを追加することによって実装されます。複数のデータに対して単一の命令を実行できるプロセッサは、ベクター プロセッサと呼ばれます。
種類
プロセッサには、多くの場合、複数の種類のレジスタが含まれており、格納できる値の種類やそれらを操作する命令に応じて分類できます。
- ユーザーがアクセス可能なレジスタは、マシン命令によって読み書きできます。ユーザーがアクセス可能なレジスタの最も一般的な区分は、データ レジスタとアドレス レジスタへの区分です。
- 制御レジスタ
- データ レジスタに整数などのや、アーキテクチャによっては浮動小数点数の数値データ値のほか、文字、小さなビット配列、その他のデータも保持できます704、IBM 709および後継機PDP-1、PDP-4/PDP-7/PDP-9/PDP-15、PDP-5/PDP-8、HP 2100アキュムレータと呼ばれる特別なデータ レジスタ多くの操作に暗黙的に使用されます。
- アドレス レジスタはアドレスを保持し一次メモリに間接的にアクセスする命令によって使用されます。
- 一部のプロセッサには、アドレスを保持するためだけに、または数値を保持するためだけに使用できるレジスタ(場合によっては、あるアドレスからのオフセットとして値が追加されるインデックス レジスタとして使用される)が含まれています。他のプロセッサでは、レジスタがどちらの種類の量も保持できます。オペランドの有効アドレスを指定するために使用される、さまざまなアドレッシング モードが存在します。
- スタックポインタは、ランタイム スタックを管理するために使用されます。まれに、他のデータ スタックが専用のアドレス レジスタによってアドレス指定されることもあります (スタック マシンを参照)。
- 汎用レジスタ(GPR はデータとアドレスの両方を格納できます。つまり、データとアドレスを組み合わせたレジスタです。一部のアーキテクチャでは、レジスタ ファイル統合されているため、GPR は浮動小数点数も格納できます。
- ステータス レジスタには、命令を実行するかどうかを決定するためによく使用される真理値が保持されます
- 浮動小数点レジスタ(FPR)、多くのアーキテクチャで浮動小数点数を格納します。
- 定数レジスタは、ゼロ、1、π。
- ベクトル レジスタは、 SIMD命令 (Single Instruction, Multiple Data)によって実行されるベクトル処理のデータを保持します
- 特殊目的レジスタ( SPR )は、プログラム状態のいくつかの要素を保持します。通常、これらには、命令ポインタとも呼ばれるプログラム カウンタとステータス レジスタが含まれます。プログラム カウンタとステータス レジスタは、プログラム ステータス ワード(PSW) レジスタに統合されることがあります。前述のスタック ポインタも、このグループに含まれることがあります。マイクロコントローラなどの組み込みマイクロプロセッサには、特殊なハードウェア要素に対応する特殊機能レジスタも備わっています。
- モデル固有のレジスタ(マシン固有のレジスタ) には、プロセッサ自体に関連するデータと設定が格納されます。その意味は特定のプロセッサの設計に関連付けられているため、プロセッサの世代間で標準のままになることは期待されていません。
- メモリタイプ範囲レジスタ(MTRR)
- 内部レジスタは命令ではアクセスできず、プロセッサ操作のために内部的に使用されます。
- 命令レジスタは現在実行中の命令を保持します。
- CPU とは別のチップ上にあるストレージ レジスタの集合である
RAMから情報を取得することに関連するレジスタ:
- メモリ バッファ レジスタ(MBRメモリ データ レジスタ(MDR)とも呼ばれる
- メモリアドレスレジスタ(MAR)
- 建築登録簿ソフトウェアから見えるレジスタであり、アーキテクチャによって定義されます。基礎となるハードウェアによってレジスタ名の変更が実行されている場合、レジスタは物理ハードウェアに対応しない可能性があります。
ハードウェア レジスタも同様ですが、CPU の外部で発生します。
一部のアーキテクチャ ( SPARCやMIPSなど) では、整数レジスタ ファイルの最初または最後のレジスタは疑似レジスタであり、読み取られると常に 0 を返すようにハードワイヤードされており (主にインデックス モードを簡素化するため)、上書きできません。Alphaでは、浮動小数点レジスタ ファイルでも同じことが行われています。この結果、レジスタ ファイルは、実際に使用可能なレジスタの数よりも 1 つ多くレジスタがあるものとして引用されることがよくあります。たとえば、上記のレジスタ定義に該当するレジスタが 31 個しかない場合でも、32 個のレジスタが引用されます。
例
次の表は、いくつかの主流の CPU アーキテクチャのレジスタの数を示しています。x86互換プロセッサでは、スタック ポインタ ( ) は、その内容を操作するのに使用できる命令の数が限られているにもかかわらず、整数レジスタとしてカウントされることに注意してください。同様の注意事項は、ほとんどESPのアーキテクチャに適用されます。
以下に挙げたアーキテクチャはすべて異なりますが、ほとんどすべてが、ハンガリー系アメリカ人の数学者ジョン・フォン・ノイマンによって最初に提案されたフォン・ノイマン・アーキテクチャと呼ばれる基本的な配置になっています。また、 GPUのレジスタの数はCPU よりもはるかに多いことも注目に値します。
使用法
プロセッサで使用可能なレジスタの数と、それらのレジスタを使用して実行できる操作は、最適化コンパイラによって生成されるコードの効率に大きな影響を与えます。式ツリーのStrahler 数は、その式ツリーを評価するために必要なレジスタの最小数を示します。
参照
参考文献
- ^ 「プロセッサ レジスタとは何ですか?」。Educative: ソフトウェア開発者向けのインタラクティブ コース。2022年 8 月 12 日閲覧。
- ^ 「CPU レジスタ ファイルの設計と管理のテクニックに関する調査」。
- ^ 「Cray-1 コンピュータシステムハードウェアリファレンスマニュアル」(PDF)。Cray Research 。1977年11月。 2021年11月7日時点のオリジナルよりアーカイブ(PDF) 。2022年12月23日閲覧。
- ^ 「MCS-4 マイクロコンピュータセット ユーザーズマニュアル」(PDF)。Intel。1973 年 2 月。2005年 2 月 24 日のオリジナルからアーカイブ(PDF) 。
- ^ 「8008 8 ビットパラレル中央処理装置ユーザーズマニュアル」(PDF)。Intel。1973 年 11 月。2007年 10 月 4日時点のオリジナルよりアーカイブ(PDF) 。2014年1 月 23 日閲覧。
- ^ 「Intel 8080 マイクロコンピュータ システム ユーザーズ マニュアル」(PDF)。Intel。1975 年 9 月。2010年 12 月 6 日時点のオリジナルよりアーカイブ(PDF) 。2014年1 月 23 日閲覧。
- ^ 「80286 および 80287 プログラマーズ リファレンス マニュアル」(PDF)。Intel。1987 年。2015年 7 月 23 日のオリジナルからアーカイブ(PDF) 。
- ^ ab 「Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル」。Intel。2019 年 12 月 4 日。
- ^ 「AMD64 アーキテクチャ プログラマーズ マニュアル 第 1 巻: アプリケーション プログラミング」( PDF)。AMD 。2013 年 10 月。
- ^ 「 Intelアーキテクチャ命令セット拡張および将来の機能プログラミング リファレンス」(PDF)。Intel 。2018 年 1 月。
- ^ F8、予備的マイクロプロセッサユーザーズマニュアル(PDF)。フェアチャイルド。1975 年 1 月。
- ^ F8 プログラミングガイド(PDF)フェアチャイルド MOS マイクロコンピュータ部門。1977 年。
- ^ 「Nios II Classic プロセッサ リファレンス ガイド」(PDF)。Altera 。2015 年 4 月 2 日。
- ^ 「Nios II Gen2 プロセッサ リファレンス ガイド」(PDF)。Altera。2015 年 4 月 2 日。
- ^ 「M6800 プログラミングリファレンスマニュアル」(PDF)。モトローラ。1976年11月。 2011年10月14日時点のオリジナルよりアーカイブ(PDF) 。2015年5月18日閲覧。
- ^ 「Motorola M68000 ファミリー プログラマーズ リファレンス マニュアル」(PDF)。Motorola。1992 年。2024 年11 月 10 日閲覧。
- ^ 「CUDA C プログラミング ガイド」。Nvidia。2019 年。2020年1 月 9 日閲覧。
- ^ 賈、浙;マッジョーニ、マルコ。スタイガー、ベンジャミン。スカルパッツァ、ダニエレ P. (2018)。 「マイクロベンチマークによる NVIDIA Volta GPU アーキテクチャの分析」。arXiv : 1804.06826 [cs.DC]。
- ^ Control Data 6000 シリーズ コンピュータ システム、リファレンス マニュアル(PDF)。Control Data Corporation。1965 年 7 月。
- ^ IBM System/360 動作原理(PDF) . IBM.
- ^ IBM System/370、動作原理(PDF)。IBM。1975 年 9 月 1 日。
- ^ z/Architecture、動作原理(PDF) (第 7 版)。IBM。2008 年。
- ^ 「IBM Enterprise Systems Architecture/370 および System/370 - ベクトル操作」(PDF)。IBM。SA22-7125-3。2020年5 月 11 日閲覧。
- ^ 「IBM S/390 G5 マイクロプロセッサ」(PDF)。
- ^ 「MMIXホームページ」。
- ^ 「シリーズ 32000 データブック」(PDF)。National Semiconductor 。 2017 年 11 月 25 日時点のオリジナルよりアーカイブ(PDF) 。
- ^ Intel Itanium アーキテクチャ、ソフトウェア開発者マニュアル、第 3 巻: Intel Itanium 命令セット リファレンス(PDF)。Intel。2010 年 5 月。
- ^ Weaver, David L.; Germond, Tom (編)。『SPARC アーキテクチャ マニュアル、バージョン 9』(PDF)。カリフォルニア州サンタクララ: SPARC International, Inc.
- ^ Power ISA バージョン 3.1B (PDF) . OpenPOWER Foundation. 2021 年 9 月 14 日。
- ^ Blackfin プロセッサ、プログラミング リファレンス、リビジョン 2.2 (PDF)。アナログ デバイス。2013 年 2 月。
- ^ 「Synergistic Processor Unit 命令セットアーキテクチャー バージョン 1.2」(PDF)。IBM。2007 年 1 月 27 日。
- ^ Leonard, Timothy E. 編 (1987). VAX アーキテクチャ、リファレンス マニュアル(PDF) . DEC 書籍。
- ^ Alpha アーキテクチャ リファレンス マニュアル(PDF) (第 4 版)。Compaq Computer Corporation。2002 年 1 月。
- ^ 「65816アセンブリの学習」。スーパーファミコン開発Wiki 。 2019年11月14日閲覧。
- ^ 「ARM アーキテクチャのプロシージャ呼び出し標準」(PDF) ARM Holdings 2013 年 11 月 30 日2013 年5 月 27 日閲覧。
- ^ 「2.6.2. Thumb 状態レジスタ セット」。ARM7TDMIテクニカル リファレンス マニュアル。ARM Holdings。
- ^ Arm A64 命令セットアーキテクチャ、Armv8、Armv8-A アーキテクチャプロファイル用(PDF)。Arm。2021 年。
- ^ MIPS64 Architecture For Programmers、第2巻:MIPS64命令セット(PDF)。RISC-V Foundation。2001年3月12日。 2024年10月6日閲覧。
- ^ Waterman, Andrew; Asanovi, Krste 編 (2017 年 5 月)。RISC-V 命令セットマニュアル、第 1 巻: ユーザーレベル ISA、ドキュメントバージョン 2.2 (PDF)。RISC-V Foundation。
- ^ 「Epiphany アーキテクチャ リファレンス」(PDF)。
