83
計算機構成特論 Part 3 乗算器 荒木 徹 電子情報・数理教育プログラム 2019 年度 荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 1 / 78

計算機構成特論 Part 3 - 乗算器...計算機構成特論Part 3 乗算器 荒木徹 電子情報・数理教育プログラム 2019年度 荒木徹(電子情報・数理教育プログラム)

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

計算機構成特論 Part 3乗算器

荒木 徹

電子情報・数理教育プログラム

2019年度

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 1 / 78

1 逐次型乗算

2 キャリ・セーブ・アダー

3 Wallaceツリー

4 2乗回路

5 負の数の乗算

6 剰余表現

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 2 / 78

乗算について

十進数の乗算の例

3 5 · · · 3× 101 + 5× 100

× 5 7 · · · 5× 101 + 7× 100

3 5 · · · 5× 100 + 7× 100

2 1 · · · 3× 101 + 7× 100

2 5 · · · 5× 101 + 5× 100

1 5 · · · 5× 101 + 3× 101

1 9 9 5

1 部分積(partial product)を求める

2 桁を合わせて加算する

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 3 / 78

2進数の乗算

1 0 0 1× 0 1 0 1

1 0 0 10 0 0 0

1 0 0 10 0 0 0

0 1 0 1 1 0 1

1 部分積 ⇒ ANDゲートを使って並列に計算できる

2 桁を合わせる ⇒ シフトで実現できる

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 4 / 78

1 逐次型乗算

2 キャリ・セーブ・アダー

3 Wallaceツリー

4 2乗回路

5 負の数の乗算

6 剰余表現

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 5 / 78

逐次型乗算

筆算のアルゴリズムを,直接ハードウェア化する

X : [x7, x6, . . . , x0],Y : [y7, y6, . . . , y0],P : [p2n−1, . . . , p1, p0]

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 6 / 78

乗算器の動作

1 レジスタ P を 0にリセット

2 レジスタ Y は,1サイクルごとに最下位ビットを取り出し,サイクル終了時に右シフト

3 レジスタ P は

上位 9ビットが積算値の保存用上位 8ビットが次のサイクルでの加算器へ入力下位 8ビットは右シフトされる

4 これを 8サイクル繰り返すと乗算が終了

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 7 / 78

乗算の例

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 8 / 78

逐次型乗算器の性質

部分積の生成は n個の ANDゲート

アダーの選択で計算時間・回路規模が変化

リプル・キャリ

キャリ・ルックアヘッド

並列プレフィックス型

速度は遅いが,全体の回路規模は小さい

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 9 / 78

さらに小さな回路

積算をシーケンシャルに行う

シフト・循環シフト・フルアダーだけで構成する

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 10 / 78

逐次型乗算の高速化

アイデア

生成される部分積の数を減らせば,加算処理にかかる時間を短縮できる

Booth Recoding (1951)

2進数「0111 . . . 11」を「1000 . . . 01」に変換する.ここで 1は−1を意味する.

Example

0111 (= 7) → 1001(= 8− 1)

01110111 (= 119) → 10011001 (= 128− 16 + 8− 1)

0111101011111001 → 1000111100001011

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 11 / 78

Booth Recoding

変換は最下位桁から順に行う

Table: Rule for Booth recoding

yj yj−1 yj 状況

0 0 0 0の列の中

0 1 1 1の列の終了

1 0 1 1の列の開始

1 1 0 1の列の中

0111101011111001→ 1000111100001011

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 12 / 78

Booth Recodingの改良

0が減ることもある

01010101 → 11111111

0でない要素の数が最小になるように recodingしたい

Table: Good Recoding (cj , yj)

cjyj+1 yj 0 1

0 0 0,0 0,1

0 1 0,1 1,0

1 0 0,0 1,1

1 1 1,1 1,0

01010101 → 01010101

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 13 / 78

Booth Recoding

高速化のアイデア

部分積の数を減らす

シフト+加算の速度を上げる

Booth Recodingは「部分積を減らす」ことを目的にしているが,同期式回路では高速化には結びつかない(クロック数は減らない).

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 14 / 78

4を基底とする乗算

基底を大きくして乗算を行う

基底が大きくなる(2進数⇒4進数⇒8進数⇒ . . .)と,桁数が減る

乗数を 2ビットずつ区切ることで,4進数との積を計算することにしてサイクル数を減らす

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 15 / 78

4を基底とする乗算器

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 16 / 78

Example: Radix-4 Multiplication

4を基底とする乗算

4サイクルで演算が終了する

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 17 / 78

4を基底とする乗算

Radix-4 Multiplication

4進数を使って計算することで,サイクル数を減らす(nサイクル⇒ ⌊n/2⌋サイクル)マルチプレクサが大きくなる

サイクルがスタートする前に 3X = 2X +X を計算しておき,レジスタ等へ記憶しておく必要がある

基本的な回路の構造は,通常の逐次乗算器とほとんど同じ

同様にして 8進数,16進数を使ってサイクル数を減らすこともできる

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 18 / 78

4を基底とするBooth Recoding

Table: Booth decoder with radix-4

y2j+1 y2j y2j−1 yj

0 0 0 0

0 0 1 1

0 1 0 1

0 1 1 2

1 0 0 −21 0 1 −11 1 0 −11 1 1 0

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 19 / 78

基底が 4のBooth Recoding

Radix-4 Booth Recoding

ビット数がおよそ半分になる

加算回路,減算回路,シフトのみで実現可能

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 20 / 78

Recoding Rule

Y = (yn−1yn−2 . . . y1y0)2

=∑

0≤k≤n−1

(yk × 2k)

=∑j≥0

(y2j × 22j) +∑j≥0

(y2j+1 × 22j+1)

=∑j≥0

(y2j × 22j) +∑j≥0

[(y2j+1 × 22j+2)− (y2j+1 × 22j+1)]

=∑j≥0

(y2j × 22j) +∑j≥0

(y2j−1 × 22j)−∑j≥0

(y2j+1 × 22j+1)

=∑j≥0

(−2y2j+1 + y2j + y2j−1)× 22j

ただし y−1 = 0とする.

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 21 / 78

(y7y6y5y4y3y2y1y0) =

y7 · 28 − y7 · 27+ y6 · 26+ y5 · 26 − y5 · 25

+ y4 · 24+ y3 · 24 − y3 · 23

+ y2 · 22+ y1 · 22 − y1 · 21

+ y0 · 20

= y728 + (−2y7 + y6 + y5)2

6 + (−2y5 + y4 + y3)24 + (−2y3 + y2 + y1)2

2 +(−2y1 + y0 + y−1)2

0

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 22 / 78

Booth Recoding

∑j≥0

(−2y2j+1 + y2j + y2j−1)× 22j

y2j+1 y2j y2j−1 yj

0 0 0 0

0 0 1 1

0 1 0 1

0 1 1 2

1 0 0 −21 0 1 −11 1 0 −11 1 1 0

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 23 / 78

逐次型乗算器

まとめ

筆算を素直にハードウェア化

部分積を ANDゲートで並列に求める部分積を逐次的に求める

高速化の工夫

Booth Recoding(1の数を減らす)基数を 4にする Booth Recoding(ビット数を半分に)

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 24 / 78

1 逐次型乗算

2 キャリ・セーブ・アダー

3 Wallaceツリー

4 2乗回路

5 負の数の乗算

6 剰余表現

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 25 / 78

ふたたび筆算

まずはリプル・キャリで

この加算をリプル・キャリ・アダー型で FAを連結させたら?

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 26 / 78

リプル・キャリで加算

リプル・キャリ・アダー型連結による乗算の計算

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 27 / 78

遅延の改善

最初のフル・アダーからのキャリを 3段目のフル・アダーにつなげば,一段減らせる

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 28 / 78

ここでのポイント

遅延の改善

二数の加算では,下位からのキャリを待つ必要がある

多項加算(三つ以上の数の加算)では,待たずに加算できる場合が

ある

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 29 / 78

さらに高速にできる?

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 30 / 78

キャリ・セーブ・アダー(桁上げ保存加算器)

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 31 / 78

キャリ・セーブ・アダー

キャリ・セーブ

フル・アダーをいくつか組にしたもの

キャリを上位に上げるのではなく,次の段で計算するために出力す

るだけ

その段で加算できるものはして,できないものは次の段に渡す

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 32 / 78

ci 1 0 1 1 1 0 0 1x 0 0 1 0 1 0 1 0y 0 0 1 1 1 0 0 1

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

Result: 1 0 0 0 1 1 1 0 0

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 33 / 78

キャリ・セーブ・アダーの連結による加算

CSAを連結した加算

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 34 / 78

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 35 / 78

キャリ・セーブ・アダーの構成法

CSA

キャリ・セーブは乗算に限らず,3項以上の加算で有効

回路の構成は比較的複雑になる

リプル・キャリ・アダーは遅いが構成は単純

アダー配置図で回路図の構成を把握できる

アダー配置図

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 36 / 78

キャリ・セーブ・アダーの構成

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 37 / 78

キャリ・セーブ・アダーの構成

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 37 / 78

キャリ・セーブ・アダーの構成

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 37 / 78

キャリ・セーブ・アダーの構成

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 37 / 78

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 38 / 78

キャリ・セーブ・アダー

まとめ

1 乗算に限らず,多項加算の伝搬遅延を改善する方法の一つ

2 フル・アダーを一段ずつ組にして,並列に加算を行う

3 やみくもにキャリを上位に伝搬するのではなく,その段では保留に

する

4 加える数が二項まで減ったら,通常の二項加算にする

そうしないと段数が増えてしまうことがある

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 39 / 78

1 逐次型乗算

2 キャリ・セーブ・アダー

3 Wallaceツリー

4 2乗回路

5 負の数の乗算

6 剰余表現

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 40 / 78

再びCarry Save Adder

Carry Save Adder

CSAの見直し

CSA一段では下位からのキャリは待たなくてよい,しかし

入力する数 x , y , z ,w , v は,基本的にそのまま

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 41 / 78

桁が同じビットはとにかく加算

「桁があっていれば,とにかく加算」

後はフル・アダーで

桁を揃えたらフル・アダーで「3ビット→2ビット」の変換を次々に行っていく

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 42 / 78

3-2 Compression

フル・アダーとは…

3ビットの数値を,s と c の 2ビットに変換するもの

3-2 compression

x 1 0 1 1 1 0 0 1y 0 0 1 0 1 0 1 0z 0 0 1 1 1 0 0 1

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

Result: 1 0 0 0 1 1 1 0 0

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 43 / 78

Wallaceツリーのアイデア

1 n項の数を加算したいとき,⌊n/3⌋個のキャリ・セーブ・アダーを使って 3項の加算を並列に行う

2 加算する項数が ⌊2n/3⌋になる3 およそ log2/3 n段の加算で二項の加算になる

4 最後に通常の二項加算を行う

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 44 / 78

Wallaceツリーの構成法

ルール

1 同じ桁にm ≥ 3ビットあれば,フル・アダーを ⌊m/3⌋個使って加算2 加算可能な最下位の桁に 2ビットあるときは,ハーフアダーで加算

下位からのキャリはないから,その桁は終了

3 すべての桁が 3ビット以下になったら,すべての桁でフル・アダー,ハーフ・アダーを使って加算

4 最後に 2項になったら,通常の二項加算をして終了

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 45 / 78

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 46 / 78

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 46 / 78

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 46 / 78

8ビットの乗算

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 47 / 78

Wallaceツリー

まとめ

回路の段数はO(log n)となり,高速な乗算ができる

素子数はO(n2)程度

配線,レイアウトは複雑になりがち

面積も大きくなる

フル・アダーからの出力のファンアウトは常に 1

部分積の生成を並列に行うとすると,ビット数に比例してファンア

ウトが大きくなってしまう

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 48 / 78

1 逐次型乗算

2 キャリ・セーブ・アダー

3 Wallaceツリー

4 2乗回路

5 負の数の乗算

6 剰余表現

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 49 / 78

2乗を計算する回路

x2 = (x3 × 23 + x2 × 22 + x1 × 21 + x0 × 20)2

= x3x3 × 26 + x2x3 × 25 + x1x3 × 24 + x0x3 × 23

+ x3x2 × 25 + x2x2 × 24 + x1x2 × 23 + x0x2 × 22

+ x3x1 × 24 + x2x1 × 23 + x1x1 × 22 + x0x1 × 21

+ x3x0 × 23 + x2x0 × 22 + x1x0 × 21 + x0x0 × 20

= x23 × 26 + x22 × 24 + x21 × 21 + x20 × 20

+ 2× (x3x2 × 25 + x3x1 × 24 + x3x0 × 23 + x2x1 × 23)

+ 2× (x2x0 × 22 + x1x0 × 21)

単純に展開すると部分積が 16個

最後のようにまとめると 10個にできる(xixj = xjxi)

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 50 / 78

計算を単純化する過程を図示したもの

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 51 / 78

2乗回路

加算する項数

nビットの数を 2乗するとき,加算すべき項数は

単純に積を計算すると n2個

この方法によると n(n + 1)/2

項数の比は (n + 1)/2nとなるので,nが大きくなるほど 1/2に近づく

加算・乗算の工夫

積の性質(ab = ba),シフト,冗長性などを利用して回路を単純化,省ゲート化,スピードアップをする方法の一例

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 52 / 78

1 逐次型乗算

2 キャリ・セーブ・アダー

3 Wallaceツリー

4 2乗回路

5 負の数の乗算

6 剰余表現

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 53 / 78

符号付き 2進数の乗算

符号付き 2進数=2の補数で表現された整数

方法その 1

符号(+−)と絶対値に変換すればよい?

正に変換

入力で絶対値をとり,出力で符号を戻す

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 54 / 78

符号・絶対値は必要ない

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 55 / 78

X のみが符号付きの場合

単純に符号拡張で加算すると…

同じ加算が何か所も現れるのでムダ

上の方の数ほど,符号ビットのファンアウトが増える

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 56 / 78

2の補数

2の補数表現 X = (xn−1xn−2 . . . x1x0)2

性質その 1

X = −xn−1 × 2n−1 + (xn−2 × 2n−2 + · · ·+ x0)

先頭のビットは必ず負

残りは正 を表す

性質その 2

−X = X + 1

加算や減算を混ぜないように,単なる加算にする

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 57 / 78

符号付き乗算での加算操作

符号ビットを取り出し,変換してから戻して加算

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 58 / 78

X ,Y がともに符号付きの場合

負を表すビットは以下の場所に現れる

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 59 / 78

符号付き乗算での加算操作

符号ビットを取り出し,変換してから戻して加算

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 60 / 78

符号付き 2進数の乗算

まとめ

入力を符号と絶対値に分解して乗算

でも乗算はできるが効率は低下.

しかし…

部分積の生成で,負を表すビットを反転させる

定数 1を適切に加える

ようにすれば,ほとんど回路は変化しない.

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 61 / 78

1 逐次型乗算

2 キャリ・セーブ・アダー

3 Wallaceツリー

4 2乗回路

5 負の数の乗算

6 剰余表現

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 62 / 78

剰余表現

Residue Number System (RNS)

互いに素である整数

m1,m2, . . . ,mh, gcd(mi ,mj) = 1

と整数 X , 0 ≤ X ≤ M = m1m2 . . .mhに対して

(X1,X2, . . . ,Xh), ここで Xi = X mod mi

を X の剰余表現という

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 63 / 78

Example of RNS

x mod 15 x mod 3 x mod 5

0 0 01 1 12 2 23 0 34 1 45 2 06 0 17 1 28 2 39 0 410 1 011 2 112 0 213 1 314 2 4

5 = (2, 0), 13 = (1, 3)

5 + 13 = 18 = 3 (mod 15)

(2, 0) + (1, 3) = (2 + 1, 0 + 3)

= (0, 3)

(2, 0)× (1, 3) = (2× 1, 0× 3)

= (2, 0)

5× 13 = 5 (mod 15)

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 64 / 78

剰余表現の性質

M = m1m2 . . .mhとする.

0 ≤ X < M である任意の整数に対して,その剰余表現(X1,X2, . . . ,Xh)は一意に定まる

剰余表現 (X1,X2, . . . ,Xh)を持つ整数 X は,M を法として一意に定まる

加減算,乗算の剰余表現は,剰余桁ごとに独立して計算して得られ

るものと等しい

計算への応用

ビット数の大きな整数 X を,小さな数 Xi の組で表す

加減乗算の計算を,h個の加算器・乗算器でそれぞれ独立に実行できる

mi のビット数を小さくとれば,それぞれの演算は高速になる

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 65 / 78

剰余表現の短所

X → (X1,X2, . . . ,Xh)の変換が必要

計算終了後 (X1,X2, . . . ,Xh)→ X の逆変換が必要

数の大小比較,正負の判定,オーバーフローの検出が困難

除算も困難

以上のことから

加減乗算を繰り返す処理をして,最後に整数に逆変換して出力

除算や大小比較がない処理

に適している手法

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 66 / 78

剰余表現への変換

変換

X → (X1,X2, . . . ,Xh), Xi = X mod mi

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

1 あらかじめ qj = 2j mod mi , j = 0, 1, . . . , n − 1を計算しておく

2 以下の計算をする

Xi ←∑

0≤j≤n−1

xjqj mod mi

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 67 / 78

変換

X → (X1,X2, . . . ,Xh), Xi = X mod mi

X = 177, m = 5, 177 mod 5 = 2

1 177 = 10110001,

2 27 mod 5 = 3, 26 = 4, 25 = 2, 24 = 1, 23 = 2

3 177 mod 5 = (3 + 0 + 2 + 1 + 0 + 0 + 0 + 1) mod 5 = 2

mi のビット数が小さければ,2j mod mi の値はあらかじめ計算して

テーブルに保存しておく

計算のときは,テーブルを参照する

最後の加算はキャリセーブ,Wallaceツリーなどの手法で高速化できる

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 68 / 78

剰余表現の演算

加減乗算

(X1,X2,X3) + (Y1,Y2,Y3) = (X1 + Y1,X2 + X2,X3 + Y3)

(X1,X2,X3)− (Y1,Y2,Y3) = (X1 − Y1,X2 − X2,X3 − Y3)

(X1,X2,X3)× (Y1,Y2,Y3) = (X1 × Y1,X2 × X2,X3 × Y3)

剰余桁ごとの演算はm1,m2,m3を法として行う

m1 = 5,m2 = 6,m3 = 7, M = 210

(2, 3, 2) + (0, 1, 6) = (2, 4, 1) (177 + 55 = 22 (mod 210))

(2, 3, 2)− (0, 1, 6) = (2, 2, 3) (177− 55 = 122 (mod 210))

(2, 3, 2)× (0, 1, 6) = (0, 3, 5) (177× 55 = 75 (mod 210))

法が数ビットであれば,演算結果もテーブル化することもできる

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 69 / 78

2k − 1, 2k , 2k + 1を法とする剰余表現

ソフトウェア,ハードウェアを問わず,計算の高速化のために剰余表現

を利用するアプリケーションがある

法として 2k − 1, 2k , 2k + 1を選ぶことが多い

変換が容易になる

法が 2k の場合

X mod 2k =(X の下位 k ビット)加算は通常の k ビットの加算を行えばいい

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 70 / 78

法が 2k − 1の場合

1 X を下位から k ビットずつに区切って

2 それらを 2k − 1を法として加算すればよい

X = 177 = 010110001, k = 3, 2k − 1 = 7

010 110 0012 6 1

177 mod 7 = (2 + 6 + 1) mod 7 = 2

この手法の正当性

2jk = (2k)j = 1j = 1であることから従う

9で割った余りを求める方法と同じ!

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 71 / 78

2k − 1を法とした加算

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

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

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

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

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

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

= (S + 1)− 2k

= (S + 1) mod 2k

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

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 72 / 78

法が 2k + 1の場合

1 X を下位から k ビットずつ区切り,それぞれを k ビットの数とする

2 下位から偶数番目ならそのまま,奇数番目なら−1倍して,それらを加算する(2k + 1を法として)

177 = 010110001, k = 3, 2k + 1 = 9, 177 mod 9 = 6

010 110 0012 6 1

177 mod 7 = (1− 6 + 2) mod 9 = 6

正当性

2jk = (2k)j = (−1)j であることから従う

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 73 / 78

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

2k + 1を法とした加算

1 最上位からキャリが出たら和は 2k − 1 = (01 . . . 11)

2 和が 2k = 10 . . . 00ならそのまま

3 それ以外なら通常の k + 1ビットの加算を行う

4 最上位ビットが 1なら,最上位と最下位から 1を引く(2k + 1 = 10 . . . 01)

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 74 / 78

剰余表現から整数への逆変換

逆変換

(X1,X2, . . . ,Xh)→ X , Xi = X mod mi

アルゴリズム

1 M = m1m2 . . .mh

2 M1 = (1, 0, . . . , 0),M2 = (0, 1, . . . , 0), . . . ,Mh = (0, 0, . . . , 1)となるMi を求めておく.

3 以下を計算

X ←∑

1≤i≤h

XiMi mod M

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 75 / 78

逆変換の例

m1 = 5,m2 = 6,m3 = 7, M = 210

M1 = (1, 0, 0) = 126

M2 = (0, 1, 0) = 175

M3 = (0, 0, 1) = 120

X = (2, 3, 2)なら,M = 210を法として

X = 126× 2 + 175× 3 + 120× 2 (mod 210)

= 42 + 105 + 30 (mod 210)

= 177

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 76 / 78

Chinese Remainder Theorem

互いに素な整数の組m1,m2, . . . ,mhに対して

X = X1 (mod m1)

X = X2 (mod m2)

. . .

X = Xh (mod mh)

を満たす整数 X はM = m1m2 . . .mhを法としてただ一つ存在する.

m1 = 5,m2 = 6,m3 = 7, M = 210, X = (2, 3, 2)

「X = 126× 2 + 175× 3 + 120× 2」は,合同式

X = 2 (mod 5), X = 3 (mod 6), X = 2 (mod 7)

を満たす.したがって X = 177がM = 210を法としてただ一つの解.

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 77 / 78

剰余表現

まとめ

(X1,X2, . . . ,Xh)ここで Xi = X mod mi を X の剰余表現という

加減乗算を,各剰余桁ごとに独立して計算できる

並列に演算することで,計算を高速化することが可能

高速な演算が求められる暗号などでは重要な技術

法として (2k − 1, 2k , 2k + 1)の組がよく用いられる

大小比較,除算などには適さない

高速化のために演算の中間結果の表現を工夫したものの一つ

キャリ・セーブ,冗長 2進

荒木 徹 (電子情報・数理教育プログラム) 計算機構成特論 Part 3 2019 年度 78 / 78