パタヘネ本を読んだ!

諸事情でパタヘネ本こと「コンピュータの構成と設計」(第5版)を読むことになりました。アウトプットしないと生きられない人間なので記事にしました。

パタヘネ本を読んだ!

諸事情でパタヘネ本こと「コンピュータの構成と設計」(第5版)を読むことになりました。アウトプットしないと生きられない人間なので記事にしました。

コンピュータ・アーキテクチャにおける8つの主要なアイデア

この本では度々出てくる8つ。

  1. Mooreの法則の設計
  2. 設計を単純化するための,抽象化
  3. 一般的な場合を高速化する
  4. 並列処理による性能向上
  5. パイプライン処理による性能向上
  6. 予測による性能向上
  7. 記憶階層
  8. 冗長性による信頼向上

地道な努力で成り立ってるんだなと……僭越ながら感じました。

条件分岐を不成立と予測して先にその次の命令を実行するみたいな、そんな地道な努力によりこの世界は成り立ってるんですよ!

キビバイト

キロバイトやメガバイトは馴染み深いですが、あれってコンピュータ上では1024で桁が上がるのにカタログ表記は1000で桁が上がるのでややこしいですよね。

ここに登場するのがキビバイトで、これは 1024で桁が上がります。

(バイトは省略しますが)103, 106, 109と上がっていくのがキロ、メガ、ギガに対して、210, 220, 230と上がっていくのがキビ、メビ、ギビです。

前者が1KB, 1MB, 1GBと書くのに対して後者は1KiB, 1MiB, 1GiBのように書きます。

ネットワーク界隈で8ビットを1バイトでなく1オクテットと言うのと同じ空気を感じます。

x86のサクラダファミリア感

Intel8086を発端とするx86の歴史はすごいと感じました。

命令追加され過ぎでは……CISCなんて次元じゃないですよ……

v8で生まれ変わったArm

最近話題のArmですが、32bit時代と64bit時代(v8~)ではガラリと違います。

32bit時代のv7では条件付き実行フィールドがあったり、PCがレジスタだったりしたのですが、そういった過去の遺産を取っ払って刷新したのが64bit版のArmv8です。
互換性を捨てて良くするというのはx86と対極的でおもしろい話です。

互換性問題はWebをやってる身としても難しい問題ですよね……

命令セット設計の3つの設計原則

  1. 単純性は規則性につながる
  2. 小さければ小さいほど高速になる
  3. 優れた設計には妥協が必要である

1は例えば全ての命令サイズを1語にするみたいな感じです。MIPSアーキテクチャではR形式やI形式、J形式といった具合でオペランドの数は命令によって違うのですが、どの命令でも1語です。

プログラムの設計技法にあるクリーンアーキテクチャと似た空気を感じます。世の中は大は小を兼ねるなんて言いますが、小さいが正義です。

並列処理の大変さ

コア数を倍にすれば気合でなんとかしても処理時間は倍にならなくて、やさしくない世界だと感じました。

パイプライン処理にしても色々なハザードが起きるし、データ競合を防ぐためにRDBのように排他制御が必要だし……血と涙の結晶によりメニーコア時代を快適に過ごせているのだと感じさせられました。

終わり

私はプログラミングは多少できてもコンピュータサイエンスは学部レベルの知識しかないです。

この本を読んで、企業でするプログラミングと低レイヤは似ているなと感じました。
ちょっとした小さな違いが極めて大きな影響を与えたり、過去の遺産との向き合い方が大変な課題だったり……

私はすぐ役立たないことの学習が苦手なのですが、低レイヤの部分は普段やっている作業と共通点を様々に見出だせておもしろいと感じました。