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. パタヘネとは • パターソン&ヘネシー コンピュータの構成と設計 第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
  2. 何をしたか 1. 友人と、誤りだと考える理由とその文面を用意(3日程) 2. 1の文面を、出版社の問い合わせフォームから送信 3. 編集者経由で、翻訳者の成田さんから返信 4. 2に対して返信 5.

    3,4を繰り返す(11日程) 6. パターソン教授が、原文に曖昧さがあるとして、 改訂文をご提示。 7. 最終的にこちらの主張が認められた 9
  3. 訂正内容について解説(準備編) 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
  4. 訂正内容について解説(準備編) 6 - 3を計算したい • 減算を加算で表現したい =>3 の10の補数: 7 •

    6 + 7 = 13 • 最上位の桁「1」を消すと、3 19 9 - 3 6 +1 7 ਐ਺Ͱͷ ࠷େ஋ Λ଍͢ ϚΠφεͷ ୅ΘΓ
  5. 訂正内容について解説(準備編) 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
  6. 訂正内容について解説(準備編) 2の補数表現する/しない の違い 4bitの場合 2の補数表現する:-8 ~ 7 • 正の数:0000(=0) ~

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

    ~ 1000(=-8) 補数表現された場合、先頭bitが符号の代わりとなる • 0→+(プラス) • 1→-(マイナス) 22
  8. 訂正内容について解説(準備編) 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
  9. 訂正内容について解説(準備編) 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
  10. 訂正内容について解説(準備編) • MIPS(Microprocessor without Interlocked Pipeline Stages) • 命令セット・アーキテクチャの一種 •

    命令セット:コンピュータのハードウェアに命令を伝えるための言葉の 語彙 • 命令セットの具体例 • add : 加算、sub: 減算、mult: 乗算、div: 除算 • multu: 符号なし乗算 • u: unsigned(符号なし = 補数表現しない) • mult : 符号あり乗算(= 補数表現する) • 他にも沢山(書き込み、読み込みetc) 26
  11. 訂正内容について解説(準備編) • MIPSでは、64bitの積を保持するために、2つ1組の 32bitレジスタを割り当てている • 前半32bit: Hi レジスタ • 後半32bit:

    Lo レジスタ • MIPSにおける、オーバーフロー(桁溢れ)の定義: • 積が32bitを超える • multu(符号なし)、mult(符号あり)によって、判定方法が異な る 27 )J CJU -P CJU ੵ CJU
  12. 訂正前に従った場合 簡単にするため、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
  13. 訂正前に従った場合 • 「multuの場合はHiが0であれば、(中略)オーバフローは 発生していない。」 • 6(10) x 3(10) = 0110

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

    • HiとLoの符号は共にプラス(+) より、 オーバフローは発生していないと見なされる。 =>ここが間違えているのでは 31
  15. 原著に立ち返る • 原著(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
  16. 私の翻訳を交えた上での調査 • 6(10) x 3(10) = 0110 x 0011 =

    0001 0010 = 18 • Loの符号: 0、Hi: 0001より、オーバフローとして検知 • 全てのパターンを調査(割愛)し、他大学のpdfを調査 => 合ってそう 34
  17. 編集者からの返信 >今回の件を著者のお一人であるパターソン教授にメールでお聞きしました。 その回答が以下になります。 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