計算機構成特論 part 4 - 除算回路...2進数の除算 152 11 = 13余り9...
TRANSCRIPT
計算機構成特論 Part 4除算回路
荒木 徹
群馬大学大学院 理工学研究科
2019年度
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 1 / 109
1 除算の基本
2 回復法
3 非回復法
4 SRT法
5 キャリ・セーブ・アダーによる非回復法の高速化
6 反復法
7 Square-Rooting
8 M を法とする加算・乗算
9 2n − 1, 2n + 1を法とする演算
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 2 / 109
1 除算の基本
2 回復法
3 非回復法
4 SRT法
5 キャリ・セーブ・アダーによる非回復法の高速化
6 反復法
7 Square-Rooting
8 M を法とする加算・乗算
9 2n − 1, 2n + 1を法とする演算
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 3 / 109
まずは筆算から
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
除算とは
除算の用語
z = d × q + r , 0 ≤ r < d
z:被除数(dividend)
d:除数(divisor)
q:商(quotient)
r:剰余(remainder)
z の中に d が何個とれるか?
z と d の比は?
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 5 / 109
2進数の除算
152÷ 11 = 13余り 9
部分商は 0か 1のどちらか
2進数では乗算が不要
比較と減算は兼用(減算した結果の正負で判断)
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 6 / 109
2進数の除算(注意点)
152÷ 4 = 38 ただし除数は 4ビット
152 = 4× 31 + 28は成り立っている
どこに問題があるのか?
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 7 / 109
問題点
初期化の段階で,部分剰余 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
2進数の除算:注意点
除算成立の条件
どのサイクルでも pri < 2d が成り立つ
初期状態で成り立てば,その後ずっと成り立つ
解決法としては
被除数の先頭に 0を必要なだけ追加する
除数の最初の 0を削除する
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 9 / 109
1 除算の基本
2 回復法
3 非回復法
4 SRT法
5 キャリ・セーブ・アダーによる非回復法の高速化
6 反復法
7 Square-Rooting
8 M を法とする加算・乗算
9 2n − 1, 2n + 1を法とする演算
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 10 / 109
回復法(Restoring Hardware Divider)
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 11 / 109
Example: Restoring Division
152÷ 11 = 13余り 9
レジスタ zr の上位に剰余 r,下位に商 qが格納されて終了する
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 12 / 109
回復法を利用した除算回路
除数 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
回復法による除算回路
回復法・まとめ
筆算の手順を単純に回路化
比較・減算の繰り返し
1サイクルあたりの計算時間は,減算の処理時間に左右される
減算結果の最上位桁の値で正負を見るので,キャリ伝搬の影響を直接
受ける
除数 d が同じなら,被除数 z のビット数が大きくなっても 1サイクルあたりの動作時間は同じ
(逆に言うと)被除数のビット数が大きくなっても動作周波数は同じ
もちろん z のビット数に比例してサイクル数は増える
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 14 / 109
除算サイクルでの入出力特性
Robertson図とは
除算アルゴリズムにおいて部分剰余 pri と pri+1の関係(サイクルでの入
出力特性)を図示したもの
Robertson図:回復法の入出力特性
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 15 / 109
回復法の入出力特性
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 16 / 109
高速化の方法・パイプライン化
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 17 / 109
高速化の方法・基数を大きくする
下記の除算が完了するまで
2進数では 5サイクル
10進数では 2サイクル
一般に基数が大きいほどサイクル数は少なくて済む
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 18 / 109
2kを基数にした除算
基数の選択
論理回路を基本とすると,通常 4や 8の 2のべき乗を法として選ぶ
ここでは 4を基数にした除算を考える
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 19 / 109
4を基数にした除算の例
152÷ 11 = 13 余り 9
この方法を回路にする
除算の条件は pri < 4d となる
部分商として 0,1,2,3が現れるので,除数 d を 2倍,3倍して部分剰余 pri と比較する必要がある
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 20 / 109
4を基数にした除算回路
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 21 / 109
4を基数にした除算
まとめ
結果を計算するためのサイクル数は減少
ただし減算器,マルチプレクサが大きくなる
2d や 3d の計算が必要(2d がシフトだけでよいが 3d はそのための回路が必要になる)
8進数を使うと 3d , 5d , 7d も必要になる
基数を増やせば,サイクル数は減少するが,そのために必要になる
回路の規模は大きくなる
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 22 / 109
1 除算の基本
2 回復法
3 非回復法
4 SRT法
5 キャリ・セーブ・アダーによる非回復法の高速化
6 反復法
7 Square-Rooting
8 M を法とする加算・乗算
9 2n − 1, 2n + 1を法とする演算
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 23 / 109
非回復法とは
回復法
単純な除算アルゴリズムをそのまま回路化
常に「引きすぎない」ように比較しながら進む
商の上位の桁から下位を確定していく
非回復法(Non-Restoring Division)
「引きすぎてもよい」というルールにする
商の上位の桁から下位を確定していく
商の各桁に負の値が入る(冗長表現)
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 24 / 109
非回復法のルール
ルール
引きすぎたら(=部分剰余が負になったら)加算
回復法の場合
pri:回復法での第 i サイクルでの部分剰余(シフトアップ済み)第 i サイクルで pri ≥ d なら減算が行われて
resi = pri − d .
もし減算が行われなければ,pri は次のサイクルへ持ち越される.次のサイクルで減算が行われると
resi+1 = 2pri − d .
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 25 / 109
非回復法の場合
pri:第 i サイクルでの部分剰余(シフトアップ済み)第 i サイクルで pri < d なのに減算が行われたとすると,
resi = pri − d
は負になる.
ここで「部分剰余が負になったら加算する」とすると
resi+1 = 2(pri − d) + d
= 2pri − d .
となって,回復法の場合と同じ結果になる.
「部分剰余が負になったら加算」としても同じ結果
加算するときの部分商には−1を立てる(減算と逆の操作であることを表す)
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 26 / 109
Example: Non-Restoring Division
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 27 / 109
商は (1,−1, 1, 1,−1)
(1,−1, 1, 1,−1) = (10110)− (01001)
= 22− 9
= 13
除算終了後,商は通常に 2進数に変換する必要がある
場合によって剰余が負になってしまうことがある
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 28 / 109
除算の成立条件
回復法での成立条件
0 ≤ pri < 2d
非回復法での成立条件
−2d < pri < 2d非回復法では部分剰余に負の値を含むから
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 29 / 109
非回復法の特徴
非回復法のメリット
前サイクルでの部分剰余の符号で,現サイクルでの部分商,部分剰余が決定できる
回復法では実際に減算してから部分商と部分剰余を決めていた
符号付きの数が扱える
デメリット
後処理が必要(商,剰余)
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 30 / 109
後処理
非回復法での後処理
{−1, 1}で表されている商を 2の補数表現に変換する
剰余の符号が負になった場合の補正
商が (1,−1, 1, 1,−1)の場合減算を使えば変換は可能
(1,−1, 1, 1,−1) = (10110)− (01001)
= 01101(= 13)
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 31 / 109
商の変換
商の−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
まずは−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
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
剰余が負になる場合がある
上の例を参考に 152 / 12 でやってみよう
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 35 / 109
後処理:剰余が負になったとき
(被除数 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
非回復法の入出力特性
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 37 / 109
非回復法を回路にする
初期化
z ÷ d:z が 16ビット,d が 8ビットとする.
drを除数 d,zrを被除数 z の格納レジスタとする. zrは符号拡張を行うため,7ビット余計にけたを取る.さらに,部分剰余の格納に使うので,8ビット上位に拡張する.
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 38 / 109
ループ処理
zrの符号ビットから,部分商 pqが決定される.またその符号によりpr ± d を計算して部分剰余が決まる.部分剰余は zr[23:16]へ戻される.
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 39 / 109
後処理
zrの下位 16ビットに商,上位 8ビットに剰余が格納されている
それらの値に対して,剰余が負かどうかによって補正を行う
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 40 / 109
1 除算の基本
2 回復法
3 非回復法
4 SRT法
5 キャリ・セーブ・アダーによる非回復法の高速化
6 反復法
7 Square-Rooting
8 M を法とする加算・乗算
9 2n − 1, 2n + 1を法とする演算
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 41 / 109
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
SRT法の例:173÷ 13 = 13余り 4
173 = (10101101)→ (00.10101101)× 28
13 = (1101)→ (00.1101)× 24
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 43 / 109
SRT法のメリット
メリット
条件によっては加減算を行わずに,部分剰余をシフトするだけ
(pq = 0の場合)
加減算の判定を d との比較ではなく
部分剰余が 1/2より大きいか部分剰余が −1/2より小さいか
だけで行えるので,部分剰余 pri の符号ビットと上位 2ビットの合計3 ビットだけチェックすればよい
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 44 / 109
SRT法の入出力特性
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 45 / 109
SRT法
まとめ
非回復法と基本的な方針は同じ
除数 d を 0.5 ≤ d < 1となるように正規化し,
部分剰余が−0.5 ≤ pri < 0.5となるようにしながら進む
部分剰余の判定が,部分剰余の上位 3ビットを見るだけで可能
(問題点)どっちにしろ各サイクルで加減算は行うので,あまり高
速化には貢献しない?
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 46 / 109
1 除算の基本
2 回復法
3 非回復法
4 SRT法
5 キャリ・セーブ・アダーによる非回復法の高速化
6 反復法
7 Square-Rooting
8 M を法とする加算・乗算
9 2n − 1, 2n + 1を法とする演算
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 47 / 109
除算回路のボトルネック
回復法 減算の結果で部分商を決める(減算の時間)
非回復法 サイクルの先頭で加算か減算かを決定 加減算は行う
SRT法でも各サイクルで加減算を行うことに変わりはない
加減算の処理時間
結局,加減算の処理時間(クリティカルパス)が,除算回路の速度を決
めている
乗算の高速化
乗算回路をキャリ・セーブ・アダー(CSA)で高速化した
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 48 / 109
キャリ・セーブ・アダー
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
和とキャリを並列に計算し,そのまま保持しておく
遅延は FA一段分
除算の高速化
CSAを除算回路の高速化に使えるだろうか?
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 50 / 109
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 51 / 109
除算での問題点
乗算では部分積の加算を繰り返すことで,解を求めることができる
除算はサイクルごとに部分剰余から部分商を判定する必要がある
CSAでは部分剰余が和とキャリに分離される現在の部分剰余 pri の値は,和とキャリを加算しないと分からない
だからと言って,サイクルごとに和とキャリの加算を行っていたの
では逆戻り
和とキャリ
なんとかして,和とキャリから高速に部分商を判定する方法が欲しい
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 52 / 109
部分商の判定
部分商の判定の方針
和とキャリの上位 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
部分商の判定
部分商の決定条件
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
CSAを使った非回復法
237÷ 13 = (1011̄0) = 18余り 3.
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 55 / 109
部分商の判定
部分商の決定
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
サイクル入出力特性
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 57 / 109
除算の条件
除算の成立条件
入出力特性(Robertson図)から,以下の条件が成り立つことが分かる
−2d < pri < 2d
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 58 / 109
回路設計
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 59 / 109
回路の動作
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
CSAを用いた除算回路の高速化
まとめ
回復法・非回復法・SRT法は,どれも加減算の処理が問題
キャリ・セーブ・アダーを用いて高速化する
部分剰余の近似値を見るだけで高速に部分商を決定
SRT法をベースにする
除数 d のビット数が大きいほど効果的
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 61 / 109
1 除算の基本
2 回復法
3 非回復法
4 SRT法
5 キャリ・セーブ・アダーによる非回復法の高速化
6 反復法
7 Square-Rooting
8 M を法とする加算・乗算
9 2n − 1, 2n + 1を法とする演算
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 62 / 109
漸近法(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
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
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
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
誤差
回復法・非回復法など,これまでの方法では誤差はなかった
漸近法での誤差
漸近法での商(q)の計算は,基本的に誤差を含む
dk が 1− 2−k より 1に近づけない
丸め誤差
bビット数の乗算結果は 2bビット
乗算結果を bビットに丸めて次のサイクルに渡す
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 67 / 109
丸めによる誤差:ϵ
丸めた乗算結果 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
Goldschmidtのアルゴリズムを回路化
丸めは切り捨てで行っている
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 69 / 109
乗算型除算
まとめ
除算を乗算の繰り返しで求める
商のビット数に対して対数時間で近似値を計算できる
商は誤差を含む
動作速度を決めるのは
d の補数(減算のため)を求める乗算の回路
解の精度を上げるためにビット数を増やすと,乗算器の規模・処理
時間が大きくなる
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 70 / 109
逆数による除算
q = z/d を計算する
1 逆数 1/d を求める
2 z × (1/d)を計算する
同じ除数 d での除算 zi ÷ d , i = 1, 2, . . . を多数行う場合に有効
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 71 / 109
Newton-Raphson法
d の逆数の計算を Newton-Raphson法を用いる
f (x) = 1/x − d
とすると f (x) = 0の解は x = 1/d
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 72 / 109
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
逆数を求めるための漸化式
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
誤差について
第 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
逆数による除算
まとめ
z ÷ d = z × (1/d)として計算する
逆数 1/d を Newton-Raphson法で求める
反復計算:xi+1 = xi (2− d · xi )初期値を適切に選択すると,反復回数を小さくできる
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 76 / 109
1 除算の基本
2 回復法
3 非回復法
4 SRT法
5 キャリ・セーブ・アダーによる非回復法の高速化
6 反復法
7 Square-Rooting
8 M を法とする加算・乗算
9 2n − 1, 2n + 1を法とする演算
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 77 / 109
√xを求める方法
√81 = 9
詳細は黒板で…
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 78 / 109
開平法の解析
q =√z として
z = z7z6 . . . z1z0
q = q3q2q1q0
とする(qのビット数は z のビット数の半分).z = q2なので…
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 79 / 109
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 80 / 109
q3を確定
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 81 / 109
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 82 / 109
√xを求める
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 83 / 109
開平演算回路
z を保持するレジスタ
qn, qn−1, . . . , qk+1
減算器
マルチプレクサ
があれば,qk を求めることができる.
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 84 / 109
除算回路・まとめ
回復法
非回復法
SRT法
CSAによる高速化
反復法
開平法
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 85 / 109
1 除算の基本
2 回復法
3 非回復法
4 SRT法
5 キャリ・セーブ・アダーによる非回復法の高速化
6 反復法
7 Square-Rooting
8 M を法とする加算・乗算
9 2n − 1, 2n + 1を法とする演算
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 86 / 109
加算剰余算
modMの加算
整数M と X ,Y ∈ {0, 1, . . . ,M − 1}に対して
(X + Y ) mod M
を求める.法M は nビットで 2n−1 ≤ M < 2nとする.
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 87 / 109
単純な方法
1 通常の加算を行い
2 和がM より大きければ減算を行う
加算と減算(比較)が必要になる
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 88 / 109
高速化
高速化のアイデア
A+ B と A+ B −M を並列に計算
Carry Save Adderを使っているので,A+ B −M の計算の方がフルアダー 1段だけ多くかかる
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 89 / 109
乗算剰余算
乗算剰余算
整数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
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
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
手続き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
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
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
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
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
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
Montgomery productの回路化
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 99 / 109
べき乗の剰余算
べき乗の剰余
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
べき乗剰余算
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
乗算剰余算
まとめ
単純法:乗算+除算
Shift-and-Add:加算+減算
Montgomery法:加算+減算
べき乗
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 102 / 109
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
結果が 2n − 1⇐⇒ すべての桁で和が 1⇐⇒ すべての桁で Propagationが 1であるので,入力から Propagationを求めて,すべて 0のときは出力が 0になるようにすればよい.
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 104 / 109
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
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
2n − 1を法とした乗算
A,B:nビットの整数A · B mod (2n − 1)
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 107 / 109
部分積を変形する
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 108 / 109
Mod 2n − 1 Carry Save Adder
荒木 徹 (群馬大学大学院 理工学研究科) 計算機構成特論 Part 4 2019 年度 109 / 109