プログラマーのためのCPU入門を読んでみたので感想を書いてみる。
20年くらい前にちょっとだけCPUを開発する会社に在籍していたことがあり、それ以来CPUに興味を持っている。といっても専門的なものではなく、PC Watchの記事を読んだり、x86勉強会に参加して話を聞いたりする程度。
ざっと読んでみたが、x86とARMとRISC-Vなど、複数のプロセッサの幅広いトピックが網羅されていて、レイテンシの測定など、コードの例もあってわかりやすい。キャッシュのコヒーレンス制御のプロトコルなど、他の本ではあまり説明されていないトピックもいろいろ載っている。
CPUはものすごい技術の集積体であるということを改めて実感でき、CPUの気持ちを理解するのに非常に良い一冊だと思った。
逆に本書に載っていないところでいうと、本書は高速化という観点で書かれたこともあり、消費電力についてはスコープ外となっている。個人的には、低消費電力なコードを書くという観点も将来求められる可能性があると思っていて、動的なクロック変更のメカニズムや、ソフトウェアでどうやって消費電力を下げるのかなどにも興味がある。そのほか、温度を測定したり、CPUを制御するCPU(ME)などのトピックも省略されている。
細かいところで言うと、第2章にて、命令の処理は フェッチ -> デコード -> 実行 という3ステージで説明されているが、実行の並列実行可能性(主にALUのリソース)とストアの並列実行可能性(メモリの依存関係)はそれぞれ別なので、フェッチ -> デコード -> 実行 -> ストア という4ステージで説明するほうが一般的かもと思った。また、第5章では、キャッシュライン衝突について説明されていない気がした。(本書は重要な部分に絞って説明しており本書の説明が間違っているわけではない)
2023-02-27 追記
そういえばM1のRosetta 2はメモリオーダリングをx86互換に変更可能というのを思い出した。
参考リンク: