ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

プログラマのためのCPU入門

プログラマーのためのCPU入門 ― CPUは如何にしてソフトウェアを高速に実行するか 読みました。

ざっくり内容を説明すると、プログラムを速く動かすためにはCPUのパイプラインの密度を高める必要があり、密度を高めるテクニックとそれを台無ししてしまう現象について1冊使っています。 現行の複雑怪奇なCPUで時にバグとしか思えないような奇妙な動作を再現させるのは本当すごいです。

プログラマーのためのCPU入門 ― CPUは如何にしてソフトウェアを高速に実行するかwww.lambdanote.com

後半に知らないことがいっぱい書いてあって、パタヘネ読んでCPU完全理解した!みたいな人が現実を知るのに良い本です。 知らないことも多く、知っていることでも過去の知識のアップデートになりました。

以前に紹介した[試して理解]Linuxのしくみに雰囲気にてますね。 同じ時期に、OSから見た低レイヤー、CPUからみた低レイヤーの本が日本語で読めるのは幸せです。 どちらもガチのデータシートレベルには踏み込まないが、しっかりした説明と実際に動くコードで確認できるようになっています。

natsutan.hatenablog.com

11章メモリの順序付けがすごくて、これだけでも金額分の価値は感じました。メモリフェンス命令、メモリバリアー命令は聞いたことはあったが、粒度の高いアトミック命令くらいに思っていたら全然違いました。これが日本語でわかりやすく読め、再現させるコードまであるのは素晴らしい。

本の内容は他のすごい人達が書いていますので、僕はパタヘネ(コンピュータの構成と設計)との比較について簡単に書きます。

書かれている難易度で言うと、プログラマーのためのCPU入門の方が高度な内容を扱っており難易度は高いです。パタヘネがMIPSやRISC-V等、特定のCPUを想定しているのに対し、プログラマのためのCPU入門はx86,ARM v8, RISC-V 等の普及しているCPUを比較して説明しています。この本で詳しく説明されている、パタヘネのアウトオブオーダーの記述はほんの少しだけだし、メモリの順序付けは少なくとも本文には載ってない気がします。

CPUの動きについて2の補数や加算器から勉強した人はパタヘネ、現行CPUの狂気を感じるような高速化の入り口を覗き込みたい人はプログラマーのためのCPU入門から読むのが良いでしょう。できたら両方読もう。