てがみ: qatacri at protonmail.com | 統計 | 2024

202404900

MIPS 以降の (互換性に制約されていない) 汎用 CPU はだいたい 32 個の論理汎用レジスタを持っている。この個数は命令長が制約条件になっているのかと思っていたが、 RISC-V のエンコーディングとかを見てみるとけっこう余裕がある。

computer architecture - Why does a processor have 32 registers? - Computer Science Stack Exchange

ここに「レジスタ数が増えればマルチプレクサやらなんやらも大きくなって速度に影響がある」と書いてあって、最初はそういうものかと納得しかけたが、高性能コアの物理レジスタは 2 倍以上ある。影響があるのは事実として、 32 がスイートスポットである理由にはなっていない気がする。

レジスタは関数呼び出し間で退避されなければいけないので、基本的には関数内でのローカル変数や一時的な値の個数を超える論理レジスタ数があっても活用されない。レジスタ退避はコンテキストスイッチ時にも必要だ。もし 32 という数字がそこから決まっているとすると、この数字はハードウェアの性質というよりソフトウェアの性質、具体的には OS やプログラミングスタイルやコンパイラのインライン化の度合いから決まっていることになる。

MIPS の登場時と比べてコンパイラのインライン化はずっと過激になっている。依然として 32 が最適値なんだろうか。まあそんなことを RISC-V の人たちが検証していないはずはないが。