- 締切済み
レジスタの数
32ビットプロセッサで汎用レジスタの数は32語程度ですよね?? なぜ、語数をこれ以上に増やすしたり、これ以下に減らしたりすると性能が低下するのですか?? それぞれおしえてください!
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- SPROCKETER
- ベストアンサー率26% (2125/7983)
32ビットプロセッサで汎用レジスタの数が32本なのはRISCプロセッサの例がありますが、パソコンで使われているPentium系プロセッサの場合は32ビットの汎用レジスタは8本しかありません。 例、EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP インテル社が汎用レジスタの本数を増やしたがらない為ですが、汎用レジスタが単にデータの一時退避用として使われるだけならば、レジスタ本数は32本あった方が良いのでしょうが、演算やアドレッシングなどで多用される場合には、複雑な配線が必要になる汎用レジスタは多くない方が集積度を上げるのに有利だろうと思います。 ATOMプロセッサとして知られているネットブック用のCPUは性能が低いですが、大きさが小さくて大量生産に向いています。CPUが小さくなるほどコストが下がるので、レジスタ本数をむやみに増やしてCPUを大きくするよりも小型化を進めた方が安価になります。 Pentium系プロセッサはレジスタ数を増やすよりもマルチコア化して並列演算能力を高める方向に進んでいますが、レジスタ数が多いほど性能が良いとは限りません。 32ビットレジスタが4倍の32本あるよりも、4コアのプロセッサの方が並列演算性能は上です。Pentium系プロセッサの汎用レジスタが8本なのは、過去の86系プロセッサとの互換性の為でしょうが、16ビットから32ビットになってもレジスタ本数を8本から変えなかったのは先を読んだ判断だったのだと思います。
- salsberry
- ベストアンサー率69% (495/711)
レジスタの数が少ないと、演算中にレジスタが足りなくなったときにデータをメモリに読み書きしなければいけなくなって遅くなる可能性があります。 一方、レジスタの数が多いと、OSがコンテキストを切り替える毎に保存・復帰しなければいけないデータ量が増えて、これまた遅くなる可能性があります。 また、性能以外に命令長の問題もあります。 レジスタが16個あったとすると、レジスタ番号を指定するのに4ビットが必要です。レジスタが32個なら5ビットです。 これに対して、命令長は通常8ビットの倍数 (x86では8ビット単位の可変長、多くのRISCは32ビットか16ビットの固定長) です。 レジスタを2つ使用する命令があったとして (ADD Rx, RyとかLD Rx, [Ry+20]とか)、レジスタ数を16個から32個に増やすとその指定に2ビット余計に必要になります。しかし、命令長を2ビットだけ伸ばすことは上述のとおり簡単ではないので、その分命令の種類を減らしたり、命令中に埋め込む即値のビット数を減らしたりしなければいけなくなります。思い切って命令長を8ビット伸ばしてしまうという選択肢もありますが。 他の要素もあると思いますが、これらのバランスの上にレジスタ数は決定されます。他の人も書かれているとおり、32ビットCPUなら32レジスタ程度と決まっているわけではありません。
- Toshi0230
- ベストアンサー率51% (836/1635)
レジスタの数は、そのCPUの設計によるので、別に32bitプロセッサだから32個、と決まっているわけではないです。 また、レジスタの数はたくさんある方が性能を上げやすいですが、むやみに増やしても性能が上がるわけではありません。
- Tacosan
- ベストアンサー率23% (3656/15482)
「32ビットプロセッサ」として何を念頭に置いていますか? 例えば Intel 386 では 8本ですし, Motorola 68020 ではデータ 8本+アドレス 8本ですよ.
- kt1965
- ベストアンサー率34% (116/339)
質問の意味が不明なのですが、解釈して回答してみますね。 32ビットプロセッサでは、確かに32本程度の汎用レジスタが存在します。増やしても良いのですが、減らすと確かに悪影響があります。これは、演算などを行う際に、演算パイプラインなどを内蔵するのですが、これの計算単位がビット単位になるからです(ALUという演算回路では、乗算や除算では、ビットシフトの方が早い)。 まあ、そんなわけです。 ちなみに、一応調べてから質問した方が、数多くの回答が得られるでしょう。