Hennessy&Patterson Computer Architecture 6th Ed.は2019年9月、日本語翻訳版が発売予定です。
ここでは、翻訳時に発見された原著のバグを公開します。他にも見つけた方、情報がある方は、hunga at am.ics.keio.ac.jpにメールをいただければ幸いです。翻訳本に名前を入れて感謝いたします。
ヘネパタの紹介
J.L.Hennessy, D.A.Patterson著Computer Architecture, A Quantitative Approach、通称ヘネパタは1990年に第1版が出版されて以来、姉妹編であるD.A.Patterson, J.L.Hennessy, Computer Organization & Design(パタへネ)と共に、30年近く、コンピュータ関係者の間で親しまれています。しかし、この本はやたら厚くて値段も張る上、通して読むのが難しく、誤解されていることが多いです。
以下、5版に引き続きヘネパタに関する誤解をヘネパタ風に明らかにしたいと思います。
ヘネパタとパタへネの役割分担がはっきりしていなかった第1版では、上記の記述は正しかった。
しかし、入門書としてパタヘネが出版された後、ヘネパタの第3版以降はコンピュータアーキテクチャの専門書としての役割を担うようになった。現在のヘネパタは、高度な専門書であり、他の工学分野の専門書が難しいのと同じレベルで難しく、すらすら読めるような代物ではない。
コンピュータには2つの側面がある。コンピュータの動作原理は、EDSAC、EDVAC以来一貫してプログラム格納型であり、この動作自体は簡単である。パイプライン、マルチコア、命令レベル並列処理、SIMDなど、どれも原理は簡単で、わかりやすく説明することができる。一方で、現在、世界中のPCで使われているx86アーキテクチャのCPUは、おそらく人間がかつて作ったものの中でもっとも複雑怪奇な構造物である。パタヘネがどちらかというと前者の側面を見ているのに対して、ヘネパタは、後者の側面、すなわち、えり抜きの技術者が100人以上掛かって開発してなおバグが出る代物に対して正面からアタックした書である。難しくないわけはない。しかし、このようなことを試みたテキストは他には存在しない。
ヘネパタの第1版は、確かに読みやすい文章がかなりの割合を占めていた。また、第6版にも読みやすく、わかりやすい文章が含まれている。しかし、解説する対象が難しくなると、それに対応して文章は長く、複雑になる。平均的な学部4年生がこれに取り組んだ場合、ひどく時間が掛かった上にまったく原文と違う解釈をしてしまう場合がある。輪講をする場合、時間をたっぷりとり、各部を正確に理解したかどうか確認して進める必要がある。
ヘネパタは、あくまでパタヘネを読んだ読者を対象に書かれている。パタヘネを読まずにヘネパタ本編を読んだ場合、何を言っているのか全くわからないだろう。では、付録を読んでから本編を読めばどうだろうか?付録は、ヘネパタがまだ入門書としての役割も担っていた第1版、第2版の記述が多く含まれているので、入門者が読んでもある程度理解することができる。それでも、わかりやすさという点では、パタヘネの方が付録より優れている。お勧めは、パタヘネを読んでからヘネパタを読み、それから理解を深めるために付録を読むことだ(もちろん十分時間がないとこんなことはできないが)。付録はパタヘネとは違う角度から解説してくれ、周辺、発展の情報を含んでおり、理解をさらに深めてくれる。
「第3版以降も(多分)名著であることには変わりないのですが、版数を重ねるごとにコンピュータの図鑑のようになっていき、実際の設計という観点が薄まっていった感があるそうです。」この文はインターフェイス2011年7月号の「コラム1 ヘネパタ本とは?」からの引用であるが、原著も訳本も読んでいない筆者による記述であり、完全に誤った情報である。
確かにヘネパタは、各章の「総合的実例」で実際のプロセッサ(今回の版ではIntel Core i7、ARM Cortex-A8など)についての記述を多く含んでいるが、これは解説したそれぞれのアーキテクチャ上の技術の実現例として個々のプロセッサを分析したものであり、プロセッサ自体を紹介したものではない。逆に言うとヘネパタはプロセッサの図鑑ではないので、これを読んでもIntel Core i7なりARM Cortex-A8の全体像がわかるわけではない。
5版と6版の差を考えてもわかるが、ヘネパタは、版が違うと大幅に内容が違う。6版では、MIPSをRISC-Vに切り替えたため、付録を含め全面的に書き直しが行われている。特に7章は全く新しい内容である。コンピュータアーキテクチャの専門家は新しい版が出たら、基本的に別の本と考えて読む必要がある。残念なことに年を取って偉くなった先生や技術者ほど分厚い本を読む時間がなくなってしまうのだが、昔の版でへネパタを語っても、それは別の本のことを語っていることになる。
p.55 1.10 の7行目 PowerEdge R710 → PowerEdge R730
12行目 PowerEdge C630 → PowerEdge R630
p.56 1行目 Power Edge 630 → Power Edge R630
Figure 1.20 5版のFigure 1.18がそのまま掲載されており、本文、評価結果と一致しません。翻訳版ではElsevier社から入手したデータを利用予定です。
B-65 Figure B.33 (problem B.12) → (problem B.13)
B-65 B.14の最後の/は不要
C-12 下から5行目 WAR → WAW
C-53 24行目 thepast → the past
C-61 Figure C.42のキャプション 文章になっていないが、たぶん途中のinitiation intervals for the FP operationsがダブっている
p.415 addi x2,R0,#1 -> addi x2,x0,1 上の例と下の例で2か所同じミスがある
p.417 addi x2,R0,#1 -> addi x2,x0,1 同じミス
伊藤光平君の指摘による
p.456 5.15 AとBの初期値は0とあるので、このプログラムはコンシステンシィモデルに関わらず、両方のプロセッサともにWhile文で無限ループしてしまう。
伊藤光平君の指摘による
p.460 5.28のプログラムの最後の行の; がない。
伊藤光平君の指摘による
p.543 Figure 7.3 の4. Smaller data sizeの行のTPU、Catapultの「8-Bit」は「8-bit」が正確な表現
表2.24の脚注 オンブロッキングー>ノンブロッキング 瀧下君が輪講中にみつけた