Upgrade to Pro — share decks privately, control downloads, hide ads and more …

パタヘネの誤りを報告した話

msymt
June 27, 2020

 パタヘネの誤りを報告した話

msymt

June 27, 2020
Tweet

More Decks by msymt

Other Decks in Technology

Transcript

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

    View full-size slide

  2. 私について
    • 氏名:MsY
    • 所属:鳥取大学工学部電気情報系
    学科コンピュータサイエンスコー

    • Twitter: @py65criz
    • 最近の悩み:研究が大変
    • 最近の楽しみ:華金に飲むビール
    2

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  5. パタヘネとは
    • パターソン&ヘネシー
    コンピュータの構成と設計
    第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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  15. 訂正内容について解説(準備編)
    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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  18. 訂正内容について解説(準備編)
    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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  21. 訂正内容について解説(準備編)
    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

    View full-size slide

  22. 訂正内容について解説(準備編)
    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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    27
    )J CJU
    -P CJU

    ੵ CJU

    View full-size slide

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

    View full-size slide

  27. 訂正前に従った場合
    簡単にするため、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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  30. 原著に立ち返る
    • 原著(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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  33. 編集者からの返信
    >今回の件を著者のお一人であるパターソン教授にメールでお聞きしました。
    その回答が以下になります。
    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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide