Slide 1

Slide 1 text

パタヘネの誤りを報告した話 2020/06/27 MsY @py65criz

Slide 2

Slide 2 text

私について • 氏名:MsY • 所属:鳥取大学工学部電気情報系 学科コンピュータサイエンスコー ス • Twitter: @py65criz • 最近の悩み:研究が大変 • 最近の楽しみ:華金に飲むビール 2

Slide 3

Slide 3 text

今日話すことの概要 • 前半:訂正に至るまでの経緯 • 後半:訂正内容の解説 3

Slide 4

Slide 4 text

前半

Slide 5

Slide 5 text

ある日 • 同研究室のメンバから 5

Slide 6

Slide 6 text

パタヘネとは • パターソン&ヘネシー コンピュータの構成と設計 第5版上下 • 通称パタヘネ • コンピュータアーキテクチャ 理論を学ぶ教材として有名 • 大体どこの大学でも教科書か 、補助教材として採用 6 出典:https://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E6%A7%8B%E6%88%90%E3%81%A8%E8%A8%AD%E8%A8%88-%E7%AC%AC5%E7%89%88- %E4%B8%8A%E4%B8%8B%E3%82%BB%E3%83%83%E3%83%88/dp/B079ZLXYQW/ref=pd_lpo_14_img_1/357-7670182-1649867?_encoding=UTF8&pd_rd_i=B079ZLXYQW&pd_rd_r=7318b4fb-ef47-4ff7-ae9d- 64e761f46ee1&pd_rd_w=WQ6Mq&pd_rd_wg=P62LZ&pf_rd_p=4b55d259-ebf0-4306-905a-7762d1b93740&pf_rd_r=N00T98Q2K0TVKH80SFGH&psc=1&refRID=N00T98Q2K0TVKH80SFGH

Slide 7

Slide 7 text

著者について • デイビッド・アンドリュー・パターソン (David Andrew Patterson) ジョン・リロイ・ヘネシー (John LeRoy Hennessy) • 2017年にチューリング賞を受賞 • 計算機科学におけるノーベル賞 7

Slide 8

Slide 8 text

訂正した文 multuの場合はHiが0であれば、multの場合はHiの符号が Loと同じであれば、オーバフローは発生していない。 8

Slide 9

Slide 9 text

何をしたか 1. 友人と、誤りだと考える理由とその文面を用意(3日程) 2. 1の文面を、出版社の問い合わせフォームから送信 3. 編集者経由で、翻訳者の成田さんから返信 4. 2に対して返信 5. 3,4を繰り返す(11日程) 6. パターソン教授が、原文に曖昧さがあるとして、 改訂文をご提示。 7. 最終的にこちらの主張が認められた 9

Slide 10

Slide 10 text

その結果 • 日経BP社のHPに掲載 10 https://project.nikkeibp.co.jp/bnt/atcl/14/P98420/043000002/

Slide 11

Slide 11 text

完走した感想 • 書面だけで説得させるのは時間と手間がかかり、大変 • 期間:約2週間ほど • 論理に抜け穴がないよう、友人と吟味 • また間違いを発見したとしても報告しないと思う(面倒…) • 大学生になって、少しは勉強したと言える(気がした • 言葉使いの勉強にもなった 11

Slide 12

Slide 12 text

後半

Slide 13

Slide 13 text

訂正内容について解説 13 これから話すこと • 計算機の仕組み • 2進数、10進数、補数 • MIPSについて

Slide 14

Slide 14 text

訂正内容について解説(準備編) 14 出典:SIMD化とは何か / Basics of SIMD, kaityo256, https://speakerdeck.com/kaityo256/basics-of-simd?slide=4

Slide 15

Slide 15 text

訂正内容について解説(準備編) 15 出典:SIMD化とは何か / Basics of SIMD, kaityo256, https://speakerdeck.com/kaityo256/basics-of-simd?slide=5

Slide 16

Slide 16 text

訂正内容について解説(準備編) 16 出典:SIMD化とは何か / Basics of SIMD, kaityo256, https://speakerdeck.com/kaityo256/basics-of-simd?slide=7

Slide 17

Slide 17 text

訂正内容について解説(準備編) 2進数 : 0と1を用いて数を表現 • 0、1、01、10、11、... 10進数 : 0~9を用いて数を表現 補数 • 互いを足し合わせると、和が基数になる(or 0になる) • 基数:10進数では、10。2進数では2 • 7の10の補数:3。171の10の補数:829(1000 = 10の3乗) • 応用例:減算を加算で行える 17

Slide 18

Slide 18 text

訂正内容について解説(準備編) • コンピュータで減算をしたいが、 加算だけでどうにかしたい • そこで、補数を使う 18

Slide 19

Slide 19 text

訂正内容について解説(準備編) 6 - 3を計算したい • 減算を加算で表現したい =>3 の10の補数: 7 • 6 + 7 = 13 • 最上位の桁「1」を消すと、3 19 9 - 3 6 +1 7 ਐ਺Ͱͷ ࠷େ஋ Λ଍͢ ϚΠφεͷ ୅ΘΓ

Slide 20

Slide 20 text

訂正内容について解説(準備編) 6 - 3 = 0110 - 0011を計算したい • 減算を加算で表現したい =>3の2の補数: 1101 0110 + 1101 = 10011 • 最上位の桁「1」を消すと、0011 = 3 • nの補数を用いて数を表現: nの補数表現 • 上記:2の補数表現 20 1111 - 0011 1100 +0001 1101 ਐ਺Ͱͷ ࠷େ஋ Λ଍͢ 0110 +1101 10011

Slide 21

Slide 21 text

訂正内容について解説(準備編) 2の補数表現する/しない の違い 4bitの場合 2の補数表現する:-8 ~ 7 • 正の数:0000(=0) ~ 0111(=7) • 負の数:1111(=-1) ~ 1000(=-8) 2の補数表現しない:0 ~ 15 • 0000(=0) ~ 1111(=15) 21

Slide 22

Slide 22 text

訂正内容について解説(準備編) 2の補数表現する:-8 ~ 7 • 正の数:0000(=0) ~ 0111(=7) • 負の数:1111(=-1) ~ 1000(=-8) 補数表現された場合、先頭bitが符号の代わりとなる • 0→+(プラス) • 1→-(マイナス) 22

Slide 23

Slide 23 text

訂正内容について解説(準備編) 1110 (2) • 2の補数表現する: -1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 0 * 2^0 = -8 + 4 + 2 = -2 • 2の補数表現しない: 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 0 * 2^0 = 8 + 4 + 2 = 14 23

Slide 24

Slide 24 text

訂正内容について解説(準備編) 2進数における乗算(4桁同士の乗算) • 6(10) x 3(10) = 0110 x 0011 = 0001 0010 N bitとM bitの乗算は、(N+M)ビットで表される • 上記: 4 bit x 4 bit → 8 bit 24

Slide 25

Slide 25 text

訂正内容について解説(準備編) これまでに話したこと • 計算機 • 10進数、2進数、補数 • 2の補数表現 • 補数表現する場合と、しない場合 25

Slide 26

Slide 26 text

訂正内容について解説(準備編) • MIPS(Microprocessor without Interlocked Pipeline Stages) • 命令セット・アーキテクチャの一種 • 命令セット:コンピュータのハードウェアに命令を伝えるための言葉の 語彙 • 命令セットの具体例 • add : 加算、sub: 減算、mult: 乗算、div: 除算 • multu: 符号なし乗算 • u: unsigned(符号なし = 補数表現しない) • mult : 符号あり乗算(= 補数表現する) • 他にも沢山(書き込み、読み込みetc) 26

Slide 27

Slide 27 text

訂正内容について解説(準備編) • MIPSでは、64bitの積を保持するために、2つ1組の 32bitレジスタを割り当てている • 前半32bit: Hi レジスタ • 後半32bit: Lo レジスタ • MIPSにおける、オーバーフロー(桁溢れ)の定義: • 積が32bitを超える • multu(符号なし)、mult(符号あり)によって、判定方法が異な る 27 )J CJU -P CJU ੵ CJU

Slide 28

Slide 28 text

訂正前に従った場合 • 日本語訳(5版) multuの場合はHiが0であれば、multの場合はHiの符号が Loと同じであれば、オーバフローは発生していない。 • これに従い、調査 28

Slide 29

Slide 29 text

訂正前に従った場合 簡単にするため、4bit x 4bit の乗算を考える • 4bitで表現できる数 • 符号なしの場合:-8 ~ 7 • 符号ありの場合: 0 ~ 15 • 6 x 3 = 18 =>符号あり/なしに関わらずオーバフロー検知したい • 6(10) x 3(10) = 0110 x 0011 = 0001 0010 = 18 => Hi: 0001 Lo: 0010 29

Slide 30

Slide 30 text

訂正前に従った場合 • 「multuの場合はHiが0であれば、(中略)オーバフローは 発生していない。」 • 6(10) x 3(10) = 0110 x 0011 = 0001 0010 = 18 • Hi: 0001、Lo: 0010 =>Hiが0ではないので、オーバフローを検知 =>問題なさそう? 30

Slide 31

Slide 31 text

訂正前に従った場合 • 「 (前略)multの場合はHiの符号がLoと同じであれば、オ ーバフローは発生していない。」 • Hi: 0001 Lo: 0010 • HiとLoの符号は共にプラス(+) より、 オーバフローは発生していないと見なされる。 =>ここが間違えているのでは 31

Slide 32

Slide 32 text

原著に立ち返る • 原著(MIPS edition) There is no overflow if Hi is 0 for multu or the replicated sign of Lo for mult. • 私なりに翻訳するなら 「multuの場合はHiが0であれば、multの場合はHi(の各bit) がLoの符号と同じであれば、オーバーフローは発生してい ない。」 32

Slide 33

Slide 33 text

日本語訳の比較 [訂正前] • 日本語訳(5版) multuの場合はHiが0であれば、multの場合はHiの符号がLoと 同じであれば、オーバフローは発生していない。 • 私なりの翻訳 「multuの場合はHiが0であれば、multの場合はHi(の各bit)がLo の符号と同じであれば、オーバーフローは発生していない。」 33

Slide 34

Slide 34 text

私の翻訳を交えた上での調査 • 6(10) x 3(10) = 0110 x 0011 = 0001 0010 = 18 • Loの符号: 0、Hi: 0001より、オーバフローとして検知 • 全てのパターンを調査(割愛)し、他大学のpdfを調査 => 合ってそう 34

Slide 35

Slide 35 text

編集者からの返信 >今回の件を著者のお一人であるパターソン教授にメールでお聞きしました。 その回答が以下になります。 Sorry for the poor English sentence you had to translate. BEFORE: There is no overflow if Hi is 0 for multu or the replicated sign of Lo for mult. BETTER: There is no overflow if Hi is all zeros for multu or if each and all bits of Hi are the same as the sign of Lo for mult. パターソン教授は、原文に曖昧さがあったとして、改訂文を示してくださいました。 (後略) 35

Slide 36

Slide 36 text

訂正前と訂正後 • [訂正前] multuの場合はHiが0であれば、multの場合はHiの符号が Loと同じであれば、オーバフローは発生していない。 • [訂正後] multuの場合はHiのビットがすべて0であれば、multの 場合はHiのすべてのビットがLoの符号と同じならば、オ ーバフローは発生していない。 36

Slide 37

Slide 37 text

訂正前と訂正後 • 私なりの翻訳 「multuの場合はHiが0であれば、multの場合はHi(の各 bit)がLoの符号と同じであれば、オーバーフローは発生 していない。」 • [訂正後] multuの場合はHiのビットがすべて0であれば、multの 場合はHiのすべてのビットがLoの符号と同じならば、 オーバフローは発生していない。 37

Slide 38

Slide 38 text

今回のオチ • 後日、院試対策のために微分積分の問題演習を行っていた ところ、解説にて怪しい文言を発見 • 何度か確認し、メールで指摘 • 後日折り返し連絡がきて、本の解説が正しかったと判明 (めちゃくちゃ謝った) • 報告するときは、慎重に • 他の人と確認しよう 38