計算機構成特論 part 4 - 除算回路...2進数の除算 152 11 = 13余り9...

109
計算機構成特論 Part 4 除算回路 荒木 徹 群馬大学大学院 理工学研究科 2019 年度 荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 1 / 109

Upload: others

Post on 16-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

計算機構成特論 Part 4除算回路

荒木 徹

群馬大学大学院 理工学研究科

2019年度

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 1 / 109

Page 2: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

1 除算の基本

2 回復法

3 非回復法

4 SRT法

5 キャリ・セーブ・アダーによる非回復法の高速化

6 反復法

7 Square-Rooting

8 M を法とする加算・乗算

9 2n − 1, 2n + 1を法とする演算

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 2 / 109

Page 3: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

1 除算の基本

2 回復法

3 非回復法

4 SRT法

5 キャリ・セーブ・アダーによる非回復法の高速化

6 反復法

7 Square-Rooting

8 M を法とする加算・乗算

9 2n − 1, 2n + 1を法とする演算

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 3 / 109

Page 4: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

まずは筆算から

1 3 商(quatient)1 1 ) 1 5 2 被除数(dividend)

1 1 15 ≥ 11なので減算4 2 4をシフトアップし下位を一桁追加3 3 42 ≥ 33なので減算

9 余(remainder)

152の上位 2桁の 15を,除数 11と比較し,商 1を決める

15から 11を減算し,部分剰余 15− 11 = 4を求める

部分剰余 4をシフトアップし,下位一桁の 2を追加して「42」とする

42と 11を比較し,商 3を決める

42から 33 = 11× 3を減算し,剰余 9を求める

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 4 / 109

Page 5: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

除算とは

除算の用語

z = d × q + r , 0 ≤ r < d

z:被除数(dividend)

d:除数(divisor)

q:商(quotient)

r:剰余(remainder)

z の中に d が何個とれるか?

z と d の比は?

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 5 / 109

Page 6: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

2進数の除算

152÷ 11 = 13余り 9

部分商は 0か 1のどちらか

2進数では乗算が不要

比較と減算は兼用(減算した結果の正負で判断)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 6 / 109

Page 7: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

2進数の除算(注意点)

152÷ 4 = 38 ただし除数は 4ビット

152 = 4× 31 + 28は成り立っている

どこに問題があるのか?

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 7 / 109

Page 8: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

問題点

初期化の段階で,部分剰余 pri ≥ 2d となっている

1 あるサイクルで部分剰余 pri ≥ 2d となったとする2 部分剰余から除数を引くと pri+1 = pri − d ≥ d3 次のステップでシフトアップすると pri+1 ≥ 2(pri − d) ≥ 2d

よって,あるステップで pri ≥ 2d となると,それ以後ずっと pri ≥ 2d が続く

上記の例では,本当は商として「2」をたてたいのだが,2進数なのでそれは不可能

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 8 / 109

Page 9: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

2進数の除算:注意点

除算成立の条件

どのサイクルでも pri < 2d が成り立つ

初期状態で成り立てば,その後ずっと成り立つ

解決法としては

被除数の先頭に 0を必要なだけ追加する

除数の最初の 0を削除する

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 9 / 109

Page 10: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

1 除算の基本

2 回復法

3 非回復法

4 SRT法

5 キャリ・セーブ・アダーによる非回復法の高速化

6 反復法

7 Square-Rooting

8 M を法とする加算・乗算

9 2n − 1, 2n + 1を法とする演算

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 10 / 109

Page 11: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

回復法(Restoring Hardware Divider)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 11 / 109

Page 12: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Example: Restoring Division

152÷ 11 = 13余り 9

レジスタ zr の上位に剰余 r,下位に商 qが格納されて終了する

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 12 / 109

Page 13: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

回復法を利用した除算回路

除数 d を 8ビット,被除数 z を 16ビットの整数とする

1 drを除数 d,zrを被除数 z の格納レジスタとする

2 レジスタ zrは上位に 8ビットの 0を詰めて z を拡張する(こうすることで部分剰余の条件 pri < 2d は必ず成り立つ)

3 i = 16とする(i = 0になったら処理は終了)

4 pr を zr上位の 9ビットとし,pr − d を計算する.結果の符号によってこのサイクルの部分商 pqが決まり,部分剰余 pr が選択される.

5 部分商 pqは zrの LSBに,pr(8ビット)は zrの上位 8ビットに戻される.

6 zr[14:0]は 1ビットシフトアップされる.

7 i = i − 1

8 i = 0となったら除算が終了する.zr[23:16]に剰余,zr[15:0]に商が残る.

合計 16サイクルで終了する

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 13 / 109

Page 14: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

回復法による除算回路

回復法・まとめ

筆算の手順を単純に回路化

比較・減算の繰り返し

1サイクルあたりの計算時間は,減算の処理時間に左右される

減算結果の最上位桁の値で正負を見るので,キャリ伝搬の影響を直接

受ける

除数 d が同じなら,被除数 z のビット数が大きくなっても 1サイクルあたりの動作時間は同じ

(逆に言うと)被除数のビット数が大きくなっても動作周波数は同じ

もちろん z のビット数に比例してサイクル数は増える

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 14 / 109

Page 15: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

除算サイクルでの入出力特性

Robertson図とは

除算アルゴリズムにおいて部分剰余 pri と pri+1の関係(サイクルでの入

出力特性)を図示したもの

Robertson図:回復法の入出力特性

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 15 / 109

Page 16: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

回復法の入出力特性

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 16 / 109

Page 17: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

高速化の方法・パイプライン化

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 17 / 109

Page 18: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

高速化の方法・基数を大きくする

下記の除算が完了するまで

2進数では 5サイクル

10進数では 2サイクル

一般に基数が大きいほどサイクル数は少なくて済む

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 18 / 109

Page 19: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

2kを基数にした除算

基数の選択

論理回路を基本とすると,通常 4や 8の 2のべき乗を法として選ぶ

ここでは 4を基数にした除算を考える

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 19 / 109

Page 20: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

4を基数にした除算の例

152÷ 11 = 13 余り 9

この方法を回路にする

除算の条件は pri < 4d となる

部分商として 0,1,2,3が現れるので,除数 d を 2倍,3倍して部分剰余 pri と比較する必要がある

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 20 / 109

Page 21: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

4を基数にした除算回路

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 21 / 109

Page 22: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

4を基数にした除算

まとめ

結果を計算するためのサイクル数は減少

ただし減算器,マルチプレクサが大きくなる

2d や 3d の計算が必要(2d がシフトだけでよいが 3d はそのための回路が必要になる)

8進数を使うと 3d , 5d , 7d も必要になる

基数を増やせば,サイクル数は減少するが,そのために必要になる

回路の規模は大きくなる

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 22 / 109

Page 23: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

1 除算の基本

2 回復法

3 非回復法

4 SRT法

5 キャリ・セーブ・アダーによる非回復法の高速化

6 反復法

7 Square-Rooting

8 M を法とする加算・乗算

9 2n − 1, 2n + 1を法とする演算

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 23 / 109

Page 24: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

非回復法とは

回復法

単純な除算アルゴリズムをそのまま回路化

常に「引きすぎない」ように比較しながら進む

商の上位の桁から下位を確定していく

非回復法(Non-Restoring Division)

「引きすぎてもよい」というルールにする

商の上位の桁から下位を確定していく

商の各桁に負の値が入る(冗長表現)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 24 / 109

Page 25: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

非回復法のルール

ルール

引きすぎたら(=部分剰余が負になったら)加算

回復法の場合

pri:回復法での第 i サイクルでの部分剰余(シフトアップ済み)第 i サイクルで pri ≥ d なら減算が行われて

resi = pri − d .

もし減算が行われなければ,pri は次のサイクルへ持ち越される.次のサイクルで減算が行われると

resi+1 = 2pri − d .

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 25 / 109

Page 26: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

非回復法の場合

pri:第 i サイクルでの部分剰余(シフトアップ済み)第 i サイクルで pri < d なのに減算が行われたとすると,

resi = pri − d

は負になる.

ここで「部分剰余が負になったら加算する」とすると

resi+1 = 2(pri − d) + d

= 2pri − d .

となって,回復法の場合と同じ結果になる.

「部分剰余が負になったら加算」としても同じ結果

加算するときの部分商には−1を立てる(減算と逆の操作であることを表す)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 26 / 109

Page 27: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Example: Non-Restoring Division

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 27 / 109

Page 28: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

商は (1,−1, 1, 1,−1)

(1,−1, 1, 1,−1) = (10110)− (01001)

= 22− 9

= 13

除算終了後,商は通常に 2進数に変換する必要がある

場合によって剰余が負になってしまうことがある

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 28 / 109

Page 29: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

除算の成立条件

回復法での成立条件

0 ≤ pri < 2d

非回復法での成立条件

−2d < pri < 2d非回復法では部分剰余に負の値を含むから

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 29 / 109

Page 30: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

非回復法の特徴

非回復法のメリット

前サイクルでの部分剰余の符号で,現サイクルでの部分商,部分剰余が決定できる

回復法では実際に減算してから部分商と部分剰余を決めていた

符号付きの数が扱える

デメリット

後処理が必要(商,剰余)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 30 / 109

Page 31: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

後処理

非回復法での後処理

{−1, 1}で表されている商を 2の補数表現に変換する

剰余の符号が負になった場合の補正

商が (1,−1, 1, 1,−1)の場合減算を使えば変換は可能

(1,−1, 1, 1,−1) = (10110)− (01001)

= 01101(= 13)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 31 / 109

Page 32: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

商の変換

商の−1を 0に置き換えたベクトルを p = pk−1 . . . p1p0とする.このとき求めたい商 qは以下の減算で求めることができる.

q = p − p

Example

(1,−1, 1, 1,−1)→ p = 10110.q = (10110)− (01001) = 001101.

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 32 / 109

Page 33: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

まずは−pを変換

−p = −∑

0≤i≤k−1

2ipi

= −∑

0≤i≤k−1

2i (1− pi )

=∑

0≤i≤k−1

2ipi −∑

0≤i≤k−1

2i

= p − 2k + 1.

q = p − p = 2p − 2k + 1.

p = (pk−1, . . . , p1, p0)だから

2p + 1 = (pk−1, . . . , p1, p0, 1)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 33 / 109

Page 34: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

q = (2p + 1)− 2k

2p + 1 = (pk−1, . . . , p1, p0, 1)

2kpk−1 − 2k = 2k(pk−1 − 1) = 2kpk−1

なので

q = (pk−1, pk−2, . . . , p1, p0, 1)

となる(減算を使う必要はない).

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 34 / 109

Page 35: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

剰余が負になる場合がある

上の例を参考に 152 / 12 でやってみよう

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 35 / 109

Page 36: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

後処理:剰余が負になったとき

(被除数 z,除数 d が正として考えている)除算の成立条件から

−d < r < d

が成り立っているから,剰余 r が負になったら

r に d を加算し

商 qから 1を減ずる

を行えばよい.

Example

152÷ 12 = 10011000÷ 1100を計算すると

商 q = (1,−1, 1, 1,−1)→ (01101) = 13,剰余 r = 11100 = −4.これを q = 1100, r = 1000に補正する.

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 36 / 109

Page 37: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

非回復法の入出力特性

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 37 / 109

Page 38: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

非回復法を回路にする

初期化

z ÷ d:z が 16ビット,d が 8ビットとする.

drを除数 d,zrを被除数 z の格納レジスタとする. zrは符号拡張を行うため,7ビット余計にけたを取る.さらに,部分剰余の格納に使うので,8ビット上位に拡張する.

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 38 / 109

Page 39: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

ループ処理

zrの符号ビットから,部分商 pqが決定される.またその符号によりpr ± d を計算して部分剰余が決まる.部分剰余は zr[23:16]へ戻される.

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 39 / 109

Page 40: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

後処理

zrの下位 16ビットに商,上位 8ビットに剰余が格納されている

それらの値に対して,剰余が負かどうかによって補正を行う

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 40 / 109

Page 41: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

1 除算の基本

2 回復法

3 非回復法

4 SRT法

5 キャリ・セーブ・アダーによる非回復法の高速化

6 反復法

7 Square-Rooting

8 M を法とする加算・乗算

9 2n − 1, 2n + 1を法とする演算

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 41 / 109

Page 42: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

SRT法とは

SRT法のルール

除数 d を 1/2 ≤ d < 1に正規化(シフトで実現)

部分商は qi ∈ {−1, 0, 1}部分剰余が−1/2 ≤ pri < 1/2になるようにする

部分商,部分剰余,演算の関係は以下の通り

Table: SRT法での処理

pri の範囲 部分商 演算

pri < −1/2 −1 pri+1 = pri + d

−1/2 ≤ pri < 1/2 0 pri+1 = pri1/2 ≤ pri 1 pri+1 = pri − d

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 42 / 109

Page 43: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

SRT法の例:173÷ 13 = 13余り 4

173 = (10101101)→ (00.10101101)× 28

13 = (1101)→ (00.1101)× 24

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 43 / 109

Page 44: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

SRT法のメリット

メリット

条件によっては加減算を行わずに,部分剰余をシフトするだけ

(pq = 0の場合)

加減算の判定を d との比較ではなく

部分剰余が 1/2より大きいか部分剰余が −1/2より小さいか

だけで行えるので,部分剰余 pri の符号ビットと上位 2ビットの合計3 ビットだけチェックすればよい

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 44 / 109

Page 45: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

SRT法の入出力特性

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 45 / 109

Page 46: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

SRT法

まとめ

非回復法と基本的な方針は同じ

除数 d を 0.5 ≤ d < 1となるように正規化し,

部分剰余が−0.5 ≤ pri < 0.5となるようにしながら進む

部分剰余の判定が,部分剰余の上位 3ビットを見るだけで可能

(問題点)どっちにしろ各サイクルで加減算は行うので,あまり高

速化には貢献しない?

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 46 / 109

Page 47: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

1 除算の基本

2 回復法

3 非回復法

4 SRT法

5 キャリ・セーブ・アダーによる非回復法の高速化

6 反復法

7 Square-Rooting

8 M を法とする加算・乗算

9 2n − 1, 2n + 1を法とする演算

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 47 / 109

Page 48: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

除算回路のボトルネック

回復法 減算の結果で部分商を決める(減算の時間)

非回復法 サイクルの先頭で加算か減算かを決定 加減算は行う

SRT法でも各サイクルで加減算を行うことに変わりはない

加減算の処理時間

結局,加減算の処理時間(クリティカルパス)が,除算回路の速度を決

めている

乗算の高速化

乗算回路をキャリ・セーブ・アダー(CSA)で高速化した

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 48 / 109

Page 49: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

キャリ・セーブ・アダー

0 1 1 1 0 1 1 01 0 1 1 1 0 0 1

+ 0 0 1 0 1 0 1 0

Sum 1 1 1 0 0 1 0 1Carry 0 0 1 1 1 0 1 0

Result 1 0 1 1 1 1 0 0 1

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 49 / 109

Page 50: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

和とキャリを並列に計算し,そのまま保持しておく

遅延は FA一段分

除算の高速化

CSAを除算回路の高速化に使えるだろうか?

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 50 / 109

Page 51: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 51 / 109

Page 52: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

除算での問題点

乗算では部分積の加算を繰り返すことで,解を求めることができる

除算はサイクルごとに部分剰余から部分商を判定する必要がある

CSAでは部分剰余が和とキャリに分離される現在の部分剰余 pri の値は,和とキャリを加算しないと分からない

だからと言って,サイクルごとに和とキャリの加算を行っていたの

では逆戻り

和とキャリ

なんとかして,和とキャリから高速に部分商を判定する方法が欲しい

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 52 / 109

Page 53: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

部分商の判定

部分商の判定の方針

和とキャリの上位 4ビットだけで,部分商を決める

pri:部分剰余,psi , pri:サイクルあたりの和とキャリ

pri = psi + pci

SRT法の利点を利用

除数 d を 0.5 ≤ d < 1となるように正規化して,部分商の判定に d を用いないようにする

部分商の判定

ps spqi , pc spqi:psi と pci の上位 4ビット

sm spqi = ps spqi + pc spqi

として,sm spqi の値で部分商を決定

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 53 / 109

Page 54: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

部分商の判定

部分商の決定条件

CSAの形で保存されている和 psi とキャリ pci

それらの上位 4ビットの和 sm spqi = ps spqi + pc spqi

sm spqi 部分商 pqi 演算

1000 - 1110 −1 pri+1 = pri + d

1111 or 0000 0 pri+1 = pri0001 - 0111 1 pri+1 = pri − d

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 54 / 109

Page 55: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

CSAを使った非回復法

237÷ 13 = (1011̄0) = 18余り 3.

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 55 / 109

Page 56: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

部分商の判定

部分商の決定

4ビット ps spqi ,pc spqi は小数点以下 2ビットで切り捨てている

それらの値と真値との誤差は 0.25未満

sm spqi = ps spqi + pc spqi の誤差は 0.5未満

sm spqi 部分商 pqi 演算

1000 - 1110 −1 pri+1 = pri + d

1111 - 0000 0 pri+1 = pri0001 - 0111 1 pri+1 = pri − d

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 56 / 109

Page 57: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

サイクル入出力特性

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 57 / 109

Page 58: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

除算の条件

除算の成立条件

入出力特性(Robertson図)から,以下の条件が成り立つことが分かる

−2d < pri < 2d

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 58 / 109

Page 59: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

回路設計

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 59 / 109

Page 60: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

回路の動作

CSAと使った回路

レジスタは除数 d の他に,キャリーセーブアダーの出力の和とキャリを格納するためのレジスタ psと pcを用意する.

各サイクルで,psと pcの上位 4ビットを用いて,部分商 pqが決まる.部分商が+1なら pq(+)を 1に,部分商が−1なら pq(−)を 1に,0ならどちらの信号も 0にする.また,その結果に応じて,現サイクルで部分剰余に加える d ,−d , 0のいずれかを選択し,CSAへの入力とする.

CSAからの出力は,和とキャリがそれぞれ pc[16:8]と ps[16:8]へ格納される.ps[6:0]と pc[6:0]はシフトアップされる.

ループが完了すると,pcと prの上位 9ビットの和が剰余となり,下位 8ビットの差が商となる.

必要に応じて,非回復法と同様の後処理をして終了

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 60 / 109

Page 61: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

CSAを用いた除算回路の高速化

まとめ

回復法・非回復法・SRT法は,どれも加減算の処理が問題

キャリ・セーブ・アダーを用いて高速化する

部分剰余の近似値を見るだけで高速に部分商を決定

SRT法をベースにする

除数 d のビット数が大きいほど効果的

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 61 / 109

Page 62: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

1 除算の基本

2 回復法

3 非回復法

4 SRT法

5 キャリ・セーブ・アダーによる非回復法の高速化

6 反復法

7 Square-Rooting

8 M を法とする加算・乗算

9 2n − 1, 2n + 1を法とする演算

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 62 / 109

Page 63: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

漸近法(Division by Convergence)

q = z/d の近似値を乗算の繰り返しで計算

q =z

d=

z

d· x1x1· x2x2· · · xk

xk

Goldschmidtのアルゴリズム

1 dk = dx1x2 . . . xk を k →∞のとき dk → 1となるように xk を選ぶ

2 そのような xk について zk = zx1x2 . . . xk を計算する

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 63 / 109

Page 64: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Goldschmidtのアルゴリズム

前述の式を再帰式で書くと以下のとおり

dk+1 = dk × xk ,

zk+1 = zk × xk .

d を 0.5 ≤ d < 1に正規化

0 < 1− d ≤ 0.5

d → 1と (1− d)→ 0は等価

(1− d)のべき乗を計算すれば 0に近づけることができる

1− dk+1 = (1− dk)2となるようにする

1− dk+1 = (1− d)2k

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 64 / 109

Page 65: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

xkを求める

1− dk+1 = (1− dk)2から

dk+1 = dk(2− dk)

dk+1 = dkxk なのでxk = 2− dk

Goldschmidtのアルゴリズム

1 d0 = d , z0 = z , k = 0

2 xk = 2− dk3 dk+1 ← dkxk4 zk+1 ← zkxk5 Goto Step 2

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 65 / 109

Page 66: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Goldschmidtのアルゴリズム

1 xk = 2− dk2 dk+1 ← dkxk3 zk+1 ← zkxk

演算回路での変数 dk や zk のビット数:b

dk は 1− 2−bまでしか 1に近づけない

2k ≥ bとなった時点で演算は終了

アルゴリズムの反復回数

最大でも k ≥ log bを満たす最小の整数 k

32ビットなら 5サイクルで終了

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 66 / 109

Page 67: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

誤差

回復法・非回復法など,これまでの方法では誤差はなかった

漸近法での誤差

漸近法での商(q)の計算は,基本的に誤差を含む

dk が 1− 2−k より 1に近づけない

丸め誤差

bビット数の乗算結果は 2bビット

乗算結果を bビットに丸めて次のサイクルに渡す

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 67 / 109

Page 68: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

丸めによる誤差:ϵ

丸めた乗算結果 d ′k = dk + ϵ

d ′k+1 = (dk + ϵ)(2− dk − ϵ)

= dk(2− dk) + 2ϵ(1− dk) + ϵ2.

z ′k+1 = zk(2− dk − ϵ)

= zk(2− dk)− zϵ.

赤字の部分が,誤差として支配的な部分

サイクルを重ねるごとに誤差は累積される

反復回数と累積誤差を考慮して,ビット数 bを決める

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 68 / 109

Page 69: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Goldschmidtのアルゴリズムを回路化

丸めは切り捨てで行っている

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 69 / 109

Page 70: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

乗算型除算

まとめ

除算を乗算の繰り返しで求める

商のビット数に対して対数時間で近似値を計算できる

商は誤差を含む

動作速度を決めるのは

d の補数(減算のため)を求める乗算の回路

解の精度を上げるためにビット数を増やすと,乗算器の規模・処理

時間が大きくなる

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 70 / 109

Page 71: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

逆数による除算

q = z/d を計算する

1 逆数 1/d を求める

2 z × (1/d)を計算する

同じ除数 d での除算 zi ÷ d , i = 1, 2, . . . を多数行う場合に有効

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 71 / 109

Page 72: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Newton-Raphson法

d の逆数の計算を Newton-Raphson法を用いる

f (x) = 1/x − d

とすると f (x) = 0の解は x = 1/d

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 72 / 109

Page 73: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

x = xi における接線は

y − f (xi ) = f ′(x)(x − xi )

この接線と x 軸の交点 xi+1は,y = 0とすればいいので

xi+1 = xi −f (xi )

f ′(xi )

ここで

f ′(x) = −1/x2

なので

xi+1 = xi (2− dxi )

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 73 / 109

Page 74: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

逆数を求めるための漸化式

Newton-Raphson法

xi+1 = xi (2− d · xi )

後は適切な初期値があれば,逆数を求めることができる

d を 0.5 ≤ d < 1となるように正規化しておけば 1 < 1/d ≤ 2

初期値について

初期値を 1 < x0 ≤ 2となるようにしておけば,解が収束することは保証される

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 74 / 109

Page 75: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

誤差について

第 i ステップでの誤差を ϵi = 1/d − xi とする

ϵi+1 = 1/d − xi+1

= 1/d − xi (2− xi · d)= d(1/d − xi )

2

= dϵ2

0.5 ≤ d < 1であれば ϵi+1 < ϵ2がいえる

第 i ステップでの精度が ai ビットなら,次のステップの精度は 2aiビット

初期値の違いで反復回数が変わる

初期値の精度:4ビット ⇒ 3回の反復で 32ビットの精度にできる

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 75 / 109

Page 76: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

逆数による除算

まとめ

z ÷ d = z × (1/d)として計算する

逆数 1/d を Newton-Raphson法で求める

反復計算:xi+1 = xi (2− d · xi )初期値を適切に選択すると,反復回数を小さくできる

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 76 / 109

Page 77: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

1 除算の基本

2 回復法

3 非回復法

4 SRT法

5 キャリ・セーブ・アダーによる非回復法の高速化

6 反復法

7 Square-Rooting

8 M を法とする加算・乗算

9 2n − 1, 2n + 1を法とする演算

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 77 / 109

Page 78: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

√xを求める方法

√81 = 9

詳細は黒板で…

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 78 / 109

Page 79: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

開平法の解析

q =√z として

z = z7z6 . . . z1z0

q = q3q2q1q0

とする(qのビット数は z のビット数の半分).z = q2なので…

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 79 / 109

Page 80: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 80 / 109

Page 81: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

q3を確定

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 81 / 109

Page 82: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 82 / 109

Page 83: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

√xを求める

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 83 / 109

Page 84: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

開平演算回路

z を保持するレジスタ

qn, qn−1, . . . , qk+1

減算器

マルチプレクサ

があれば,qk を求めることができる.

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 84 / 109

Page 85: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

除算回路・まとめ

回復法

非回復法

SRT法

CSAによる高速化

反復法

開平法

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 85 / 109

Page 86: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

1 除算の基本

2 回復法

3 非回復法

4 SRT法

5 キャリ・セーブ・アダーによる非回復法の高速化

6 反復法

7 Square-Rooting

8 M を法とする加算・乗算

9 2n − 1, 2n + 1を法とする演算

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 86 / 109

Page 87: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

加算剰余算

modMの加算

整数M と X ,Y ∈ {0, 1, . . . ,M − 1}に対して

(X + Y ) mod M

を求める.法M は nビットで 2n−1 ≤ M < 2nとする.

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 87 / 109

Page 88: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

単純な方法

1 通常の加算を行い

2 和がM より大きければ減算を行う

加算と減算(比較)が必要になる

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 88 / 109

Page 89: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

高速化

高速化のアイデア

A+ B と A+ B −M を並列に計算

Carry Save Adderを使っているので,A+ B −M の計算の方がフルアダー 1段だけ多くかかる

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 89 / 109

Page 90: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

乗算剰余算

乗算剰余算

整数M と X ,Y ∈ {0, 1, . . . ,M − 1}に対して

(X × Y ) mod M

を求める.法M は nビットで 2n−1 ≤ M < 2nとする.

単純な方法

Z = X × Y を計算

Z mod M を除算器で計算し,最後に商でなく剰余を出力する

乗算器と除算器があればよい

中間の値を保持するために 2nビット必要

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 90 / 109

Page 91: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Shift-and-Add

計算の中間結果が大きくならないようにする.

Shift-and-Add Algorithm

乗数 Y = yn−1 . . . y1y0の上位ビットから順に逐次計算を行う.

P0 := 0

for j in 0, 1, . . . , n − 1, Pj+1 := (2Pj + yn−j−1 · X ) mod M

部分積を計算する ANDゲート

(n + 1)ビット加算器

除算回路があれば構成できる

中間結果は n + 2ビットあればよい

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 91 / 109

Page 92: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Montgomery法

法M を奇数とするgcd(M, 2n) = 12n · 2−n = 1 (mod M)とする22n mod M = exp(2n,M)を計算しておく

Montgomery’s Algorithm

1 (Z1 · 2n) mod M = (X · Y ) mod M を満たす Z1 を求める

2 (Z · 2n) mod M = (Z1 · exp(2n,M)) mod M を満たす Z を求める

3 Z を出力する

Z = Z1 · 22n · 2−n mod M

= (XY 2−n) · 22n · 2−n mod M

= XY mod M.

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 92 / 109

Page 93: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

手続きMontgomery product

Montgomery productct(X ,Y ,M)

Inputs: 2n−1 ≤ M < 2n, X ,Y < M

Output: n-bit integer Z such that

(Z · 2n) mod M = (X · Y ) mod M

Montgomery product(X ,Y ,M)

1 r0 = 02 for i in 1, 2, . . . , n

1 A = ri−1 + xi−1 · Y2 ri = (A+ A(0) ·M)/2

3 if rn < M then output rn4 else output rn −M

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 93 / 109

Page 94: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Example

M = 239, X = 217 = (11011001), Y = 189

XY mod M = 144

r0 = 0,

a = r0 + 189 = 189, r1 = (189 + 239)/2 = 214

a = r1 = 214, r2 = 214/2 = 107

a = r2 = 107, r3 = (107 + 239)/2 = 173

a = 173 + 189 = 362, r4 = 362/2 = 181

a = 181 + 189 = 370, r5 = 370/2 = 185

a = r5 = 185, r6 = (185 + 239)/2 = 212

a = 212 + 189 = 401, r7 = (401 + 239)/2 = 320

a = 320 + 189 = 509, r8 = (509 + 239)/2 = 374

Z1 = 374− 239 = 135 (135× 28 mod M = 144).荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 94 / 109

Page 95: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Correctness

Lemma

ri · 2i ≡ (xi−12i−1 + · · ·+ x12

1 + x020) · Y (mod M)

i = 1のとき1 A = r0 + x0 · Y = x0 · Y2 2r1 = A+ A(0)M = x0Y + A(0)M ≡ x0Y (mod M)

Induction Step

A = ri−1 + xi−1 · Y

ri2i = 2i−1(A+ A(0)M)

= ri−12i−1 + xi−1Y 2i−1 + 2i−1A(0)M

≡ (xi−22i−2 + · · ·+ x12

1 + x020) · Y + xi−1Y 2i−1 (mod M)

≡ (xi−12i−1 + xi−22

i−2 + · · ·+ x121 + x02

0) · Y (mod M)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 95 / 109

Page 96: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Correctness (2)

Lemma

ri < 2M, that is, ri is an (n + 1)-bit integer.

i = 1のとき

A = r0 + x0 · Y = x0 · Y ≤ Y < Mr1 = (A+ A(0)M)/2 ≤ (A+M)/2 < M

Induction Step

A = ri−1 + xi−1 · Y < 2M +M = 3Mri = (A+ A(0)M)/2 ≤ (3M +M)/2 < 2M

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 96 / 109

Page 97: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Correctness

Montgomery product(X ,Y ,M)

1 r0 = 02 for i in 1, 2, . . . , n

1 A = ri−1 + xi−1 · Y2 ri = (A+ A(0) ·M)/2

3 if rn < M then output rn4 else output rn −M

rn · 2n ≡ (xn−12n−1 + · · ·+ x12

1 + x020) · Y ≡ XY (mod M)

rn < 2M

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 97 / 109

Page 98: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Example

M = 239, X = 217 = (11011001), Y = 189, (XY mod M = 144)

Z1 = Mongomery product(X ,Y ,M) = 135 = (10000111)

22n mod M = 216 mod 239 = exp(2n,M) = 50

Montgomery product(Z1, exp(2n,M),M)を計算

r0 = 0,

a = r0 + 50 = 50, r1 = 50/2 = 25

a = 25 + 50 = 75, r2 = (75 + 239)/2 = 157

a = 157 + 50 = 207, r3 = (207 + 239)/2 = 223

a = 223, r4 = (223 + 239)/2 = 231

a = 231, r5 = (231 + 239)/2 = 235

a = 235, r6 = (235 + 239)/2 = 237

a = 237, r7 = (237 + 239)/2 = 238

a = 238 + 50 = 288, r8 = 288/2 = 144

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 98 / 109

Page 99: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Montgomery productの回路化

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 99 / 109

Page 100: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

べき乗の剰余算

べき乗の剰余

X ,Y < M に対して,以下の値を求める

Y X mod M

X = (xn−1 . . . x1x0)とすると

Y X mod M = Y xn−12n−1+···+x121+x020 mod M

= ((. . . ((1 · y xn−1)2 · y xn−2)2 · · · · · y x1)2 · y x0)2 mod M

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 100 / 109

Page 101: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

べき乗剰余算

1 e = 12 for i in 1, . . . , n

1 e = e · e mod M2 if xn−i = 1 then e = e · Y mod M

3 return e

XY mod M の形の計算がたくさん現れる

Montgomery法などを使う

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 101 / 109

Page 102: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

乗算剰余算

まとめ

単純法:乗算+除算

Shift-and-Add:加算+減算

Montgomery法:加算+減算

べき乗

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 102 / 109

Page 103: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

M = 2n − 1, 2n + 1を法とする演算

2n − 1を法とした加算

1 通常の nビットの加算を行い

2 最上位からのキャリを最下位に加える(キャリ循環)

3 結果が 2n − 1の場合のみ,これを 0に補正する

(キャリ)= 0なら,和(nビット)がそのまま加算結果

(キャリ)= 1なら,その和を S とすると

S mod (2n − 1) = S − (2n − 1)

= (S + 1)− 2n

= (S + 1) mod 2n

となるので,1(キャリ)を加えて下位 nビットをとればよい

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 103 / 109

Page 104: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

結果が 2n − 1⇐⇒ すべての桁で和が 1⇐⇒ すべての桁で Propagationが 1であるので,入力から Propagationを求めて,すべて 0のときは出力が 0になるようにすればよい.

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 104 / 109

Page 105: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

2n + 1を法とした剰余は n + 1ビットで表す

2n + 1を法とした加算

1 入力を A,B とする.

2 通常の n+1ビット加算器で A+Bを計算する.和を S,キャリを Cとする.

3 S + (2n − 1)を計算する.和を S1,キャリを C1とする.

4 もし C ∨ C1 = 1なら,S1を出力する.

5 もし C = C1 = 0なら,S を出力する.

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 105 / 109

Page 106: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

S = A+ B

if C = 1, then S = 0, and Result = 2n − 1

if C1 = 1, then S ≥ 2n + 1. S + (2n − 1) = S − (2n + 1) (mod 2n+1)

Otherwise, S < 2n + 1.

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 106 / 109

Page 107: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

2n − 1を法とした乗算

A,B:nビットの整数A · B mod (2n − 1)

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 107 / 109

Page 108: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

部分積を変形する

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 108 / 109

Page 109: 計算機構成特論 Part 4 - 除算回路...2進数の除算 152 11 = 13余り9 部分商は0か1のどちらか 2 進数では乗算が不要 比較と減算は兼用(減算した結果の正負で判断)

Mod 2n − 1 Carry Save Adder

荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 109 / 109