「Hisa Ando. プロセッサを支える技術. 技術評論社. 2011」を読んで
なんか最近は物忘れが激しくて、読んだ本の話とかする際に「あーっと、アレアレ」みたいな場面が増えたので、読書ノートを書くことにしてみました。人に説明するような感じで記録しておけば効果があるのではないかと。
最初なので勝手がわからずに冗長な記述になっているような気がしますし、面倒な割に効果が無いなと思ったら止めるけど、まあ、しばらくはやってみます。
今回は、「プロセッサを支える技術」です。
本の概要
「本書について」によると以下のようになります。
プログラムを自分で書き、コンピュータシステムをより効率的に使いこなしたいという方を対象に、プロセッサに使用されている高性能化技術や構造について説明し、どのようにプログラムを書けばプロセッサを効率的に動かせるかをわかりやすく解説しています。
そして、以下のような構成になっています。
- 第1章 プロセッサとコンピュータシステムの基礎
- プロセッサやハードウェアの概要や用語の基礎。この手の基礎解説は必要とは思うけど、実際には「再確認」の意味合いが強くて、ここで初めてこの言葉を知りましたとか言う人には、この本はつらいかも。
- 第2章 プロセッサの変遷
- 歴史的な話と、それに絡めてこの本に出てくる技術の概要。この章までで91ページ。ここまでがスラスラ読めて、特に目新しい知識が無いな、という人は多分、この本の想定読者ではないのでしょう。
- 第3章 [詳説]プログラマのためのプロセッサアーキテクチャ
- ここから5章までが、この本の中心。
- 第4章 仮想化サポート
- 同上
- 第5章 マルチプロセッサの出現と普及
- 同上
- 第6章 プロセッサ周辺技術
- メモリとか入出力装置。2ビットエラー訂正のやり方は、ちゃんと知らなかったので面白かったです。
- 第7章 GPGPUと超並列処理
- 表題どおりですが、私はGPUについて知らないので、この章が一番おもしろかったです。OpenCL触ってみようかな、とか。
- 第8章 今後のプロセッサはどうなっていくのか?
- なぜクロックアップではなくてマルチコアなのか、とか自動車用プロセッサとか。最近の微細化技術は、芯が1mmの太さのシャープペンシルで0.3mmの線を引くようなものだ、という話はちょっとワクワクします。
著者について
(株)富士通にいらした方で、SPARCの開発にも従事されていたようです。今は退社されているようですが、マイコミジャーナルに「コンピュータアーキテクチャの話」というコラム*1も連載されているようです。
どんな人向けなのか
スクリプト言語しか知らないようなハードウェアに対する完全な初心者にとっては取っつきにくいし、かといって、既にアセンブラを書いたりハードウェアを意識したCプログラミングを行っている人にはもの足りないかもしれません。
例えば「プログラムはなぜ動くのか」を読んだような人が、もう少し現在のハードウェアについて知りたいとか、そこで使われている技術が実際にソフトウェアに対してどのような影響があるのか、あるいは、ソフトウェアはどのような事に配慮するべきかを知りたい、というような人にとってお勧めになると思われます。
ただ、これ一冊で「ハード周りは完璧」というわけではなく、あくまで俯瞰するためのものなので、更に深く知りたい場合は参照文献に進む必要があります。
得られるメリット
すぐに役に立つ実用書というわけではなく、ソフトウェアエンジニアとしての基礎知識を身につけるためのものだと思いますので、わかりやすいメリットを書くのは難しい*2ですが、以下のような疑問や誤解が解けるかもしれません。
- CPUのクロックを上げてくれれば良いのに、何でマルチコアとかスレッドとかで面倒くさい処理をソフトウェアに押し付けてるの? ハードウェア技術者の怠慢だよ!
- Hyper ThreadってCPUの数を増やすんだよね。OSのリソースモニタも、そういう風に表示してくれる。でも何か変です。マシン全体のCPU使用率は50%なのに、そこから性能が伸びなくて倍にならないんだけど。
- Linuxのカーネルソースにチャレンジするぞ!とか思ったけど、「if 文 に likely(x) とか unlikely(x)とか」「変数宣言に __attribute__((__aligned__(いろいろ))) とか変なのが付いてる」とか何これ? 調べたらgcc拡張なのはわかったんだけど、ホントのところどんな効果があるのか今一つ良く分からない。
キーワード
色々あるのですが、このようなキーワードに引っかかるものがある人は手に取る価値あると思います。(キーワードの選択は目についたものを適当に選択しています)