Schi Heil と叫ぶために

hiroakiuno's blog

書評とまとめ - コンピュータアーキテクチャ技術入門 高速化の追求×消費電力の壁

私はソフトウェアエンジニアだが、組み込み系なのでハードの知識を求められることも多い。最近一層それが求められる方面に自ら飛び込んだので、知識を補足する教科書を読みたいと思っていた。教科書といっても論理回路電磁気学を勉強し直すとかじゃなくて、組み込みのデバイスを選定したり、システム構成の一長一短を見極めたりする際のハード面の俯瞰した知識。1冊でドンピシャの教科書があるわけないとは思うが、デキる人が経験の裏に持っている整理された知識とか応用を利かす際にベースとなる考え方とかがなるべく吸収できる本。

そんな目的で今回選んだ本がこれ。

コンピュータアーキテクチャというとパタヘネ本が思いついたが、俯瞰は十分できるだろうが分量が多く、費用対効果という点でおいしさに欠け避けた。パタヘネ本に限らず、コンピューターアーキテクチャの教科書というと、2進数や浮動小数点の説明から始まり、論理回路やブール演算、命令の話がきて、高速化の話がくるのが一般的。この本は WEB+DB PRESS なのでターゲット読者はソフト寄りだが、そういった教科書の流れは踏襲している。ただ掘り下げるところと端折るところのバランスは実践的で私が求めているものに近かった。

目次
第1章 コンピュータシステムの基本
第2章 プロセッサ技術
第3章 並列処理
第4章 低消費電力化技術
第5章 GPU技術
第6章 メモリ技術
第7章 ストレージ技術
第8章 周辺技術
第9章 データセンターとスーパーコンピュータ
詳細はこちら

2014年6月初版と比較的新しく、例えば第8章で入出力インターフェースを説明する際に、キーボードじゃなくてタッチパネルを掘り下げている点や、第9章として GoogleAmazon のサーバー用途のコンピューターの特徴や、スーパーコンピュータ「京」についても書かれている点は特徴だと思う。ただ、私が感じたこの本の一番の特長は、CPU/GPU/並列処理/メモリ/ストレージ/周辺技術という一般的な構成に加えて、低消費電力化技術を章にしている点じゃないかと思う。CMOS だからスイッチすると電力を食うという話から始まり、リーク電流、さらには big.LITTLE や ACPI の電源管理ステートの話、そしてレギュレーターの電源効率のようなシステム面で省電力につながるポイントに加えて、最後は省電力のためのプログラミングテクニックまでが第4章という35ページに詰まっている。35ページなのでざっくりと言えばざっくりだがソフトエンジニアが読むハードウェア本としてはいい分量だと思う。

あえて不満というか要望を上げるとすれば、

  • GPU の章はもう少し突っ込んだ解説が欲しかった。CPU と GPUアーキテクチャの違いや、GPGPU ネタも述べられていたが、例えばハイエンド GPU とローエンド GPU でどの辺が違うのかとか指標みたいなのが知りたかった。
  • I2C や SPI などのバス周りについても解説が欲しかった。PCI Express や USB は少し触れられているが、その他のバスやバスのアーキテクチャ等はふれられていない。

割り切った本を探しておきながら、あれもこれも欲しかったというわがままだが参考まで。

最後に、本の中で「それ、知りたかったこと。アタリ!」と思った部分を列挙しておく。技術本を読むときはこれが多ければ多いほど求めていた本である。どこが心に響くかは人によって違うのであくまで自分の備忘録だが、頭の整理もかねて、質問を自分で作って Q&A 方式にしてみた。

Q.1) 1次キャッシュは I と D に分かれているのに、なぜ2次キャッシュは分かれていないんだろう?

(p.95)
このため、最近のコンピューターでは、命令とデータを分離した1次キャッシュを持つプロセッサが一般的になっています。一方、2次キャッシュは、1次キャッシュをミスしたアクセスだけを処理するので、1次キャッシュの1/10以下とアクセス頻度が低くなり、1次キャッシュほど忙しくありません。このため、命令とデータは分離せず、共通のキャッシュとするのが一般的です。

Q.2) Intel であれ ARM であれ、最近の CPU の話には必ず仮想化が出てくるが、仮想化ってぶっちゃけ誰が何の用途にそんなに必要としているんだろうか?

(p.144)
仮想化は1967年にIBMメインフレームで実用化された長い歴史を持つ技術ですが、Webサーバーのホスティングで一気に普及が加速しました。
(中略)
サーバー統合を行うと、必要なサーバー台数が減り、ハードウェアコストや電力コストが減ることから、企業での仮想化の導入が進みました。
また、仮想化を使うと、1つの仮想マシンで動いていたOSやアプリケーションを、実行を中断することなく、別の仮想マシンに移すジョブマイグレーションも可能になります。
(中略)
このように、現在では、仮想化はデータセンター運用の柔軟性を確保する上で不可欠の技術となっています。

Q.3) pthread などソフトウェアのマルチスレッドと、Intel などの CPU の説明にあるハードウェアのマルチスレッドってどう違うのか?

(p.156)
ハードウェアの方では、1つのプロセッサコアで複数の命令列を並行して実行できる能力を持つ場合、プロセッサが「マルチスレッド」機能を持つと言います。

(p.165)
用語が紛らわしいのですが、p.156 のコラムで説明したとおり、ハードウェアで言う「マルチスレッド」は、それぞれのスレッドが個別の命令とデータ空間を持つプロセスを実行することができ、ソフトウェアで言うスレッドしか実行できないということはありません。

Q.4) 最近は組み込みでもメモリバンド幅不足が問題になることが多いが、DDR や LPDDR ではなく GDDR 使うという案はだめなのか?値段だけか?

(p.277)
GDDR5 DRAM は高性能ですが、システムとして大きなメモリ容量が実現できないこと、消費電力が大きいこと、値段が高いことから、メインメモリとしての使用には向かず、もっぱら、高性能GPUや高性能の演算アクセラレータのメモリとして使われています。

Q.5) LPDDR は普通の DDR と比べてなぜ値段が高くなるのか。需要と供給の関係だけか?

(p.278)
シリコンウェファから切り出した DRAM チップを研磨して薄く加工して、積層して組み立てるという手間が掛かるので、通常の DDR3 DIMM と比べるとビット単価が高くなります。