FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

「プログラマーのためのCPU入門」を買いました

面白そうなので買ってみました。物理本は送料が意外と高かったので電子書籍版を買いました。

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

ざっくりと眺めましたが、タイトルに偽りなし、ソフトウェアエンジニアにとって、ハードウェアをどのように理解すればよいか、ということに重きが置かれています。これでハードウェアが書けるようになるというわけではないので、そこは勘違いしないようにしたい。

実際問題、ソフトウェアエンジニアの人たちは、サービスの速度向上を図りたいとき、どのようなアプローチをとっているのだろう?というのは興味があるところです。まさかフロントエンドエンジニアが「このサブルーチンはこういう命令に変換されるから...」ということを考えてプログラムを組んでいるわけがない。 そういう時はせいぜいデータ構造を考え直すか、システムコールを呼び出す回数を数えてみるとか、そういう話なのかな、と勝手に想像しています。

自分はCPUの中の人なので、そういうのはどうしても気になってしまうが、ソフトウェアの人たちは例えば命令依存とか気にするわけがない。 自分と気持ちとしては、あまりソフトウェアさんがハードウェアの中身とかを気にせずに良いものを作りたいし、そうであるべきだと思う。 コンピュータの基本はブラックボックスで、上位のレイヤは下位のレイヤを完全に隠蔽することができ、そのインタフェースだけを操ればよい。これがコンピュータの基本原理だ。

だからそんなことは気にしなくてもいいのだ。ソフトウェアを書く人たちは、CPUの周波数の向上と、メモリの増加、性能の向上におんぶにだっこで良い。 思う存分性能を無駄遣いしてほしい。その分、いいソフトウェアを早く作ってくれ。

ただ、ひとたびレイヤを潜るとそこは楽しいし、ソフトウェアエンジニアが気にしない「要点」を自分たちは改善していくつもりだ。 一人のエンジニアとして考えると、自分よりも一つ違うレイヤを学ぶことはいいことだ。だけど、本当はそんなことしなくてもいいのだ。自分の世界で思いっきり戦ってほしい。

ところで、BOOMの章に自分のブログが入っていてちょっとうれしかったです。