高速乗算法の設計と実装(2)

梅谷 武
作成:2001-09-12 更新:2005-04-20
メルセンヌ素数を標数とする2次体上の離散フーリエ変換を使った32bit算術演算器向け高速乗算法を設計し、Pentiumへの実装を試みる。
IMS:20010912001; NDC:412.1; keywords:離散Fourier変換,メルセンヌ素数,2次体;
目  次
1. メルセンヌ素数を標数とする2次体
2. 高速乗算法(2)
参考文献
1. メルセンヌ素数を標数とする2次体
1.1 有限体上の離散フーリエ変換
 「高速乗算法の設計と実装(1)」(→[N6])においては素体Fp上の離散フーリエ変換について考えたが、ここでは一般の有限体上の離散フーリエ変換について考える。
命題1.1
 有限体Fqにおいて
1の原始n乗根ζnFqn|q-1
証明 単元群(Fq)*は位数q-1の巡回群であるから、その生成元ζ∈Fqが存在する。ζ
ζq-1=1,ζk0(0kq-1)
という性質によって特徴付けられている。一方1の原始n乗根ζnは、
ζnn=1,ζnk0(0kn)
という性質によって特徴付けられている。n | q - 1のとき、もし生成元ζ∈Fqが与えられたならば、
ζn=ζ(q - 1)/n
とおくことによって一つの1の原始n乗根が得られる。証明は群論のラグランジュの定理を単元群(Fq)*に適用すればよい。 ■
 1の原始n乗根ζnが存在する場合に条件3
n>k>0n-1
Σ
i=0
ζnik=0
について考える。
(n-1
Σ
i=0
ζnik)(1-ζnk)=1-ζnkn=0
が可換環であるという条件だけで成立するが、ここで1≠ζnkであるから、すべてのkについて(1-ζnk)が単元であるとき条件3が満たされることがわかる。体上ではこの条件はつねに満たされる。
 定理の形でまとめると次のようになる。
定理1.2 (有限体上の離散フーリエ変換)
 有限体Fqにおいて
n|q-1∃ζnFq:(n,Fqn)は離散フーリエ変換の型
1.2 メルセンヌ素数を標数とする2次体
 メルセンヌ素数、すなわち、
p=2k-1,k=2,3,5,7,13,17,19,31,61,89,107,127,
の形の素数について考える。平方剰余の第1補充法則より
(-1
p
)=(-1)(p-1)/2=
1
p≡1(mod 4)
-1
p≡3(mod 4)
であるから、-1pを法として平方非剰余である。したがってFp上の多項式x2+1は既約であり、剰余環Fp[x]/(x2+1)Fp上2次の拡大体となる。これはガウスの複素整数Z[i], i2=-1をイデアル(p)で剰余したZp[i]と体として同型である。Zp[i]の元は、
a+bi,a,b∈Zp
と表現することができ、加算と乗算は
(a+bi)+(c+di)
=
(a+c)+(b+d)i, a,b,c,d∈Zp
(a+bi)(c+di)
=
(ac-bd)+(bc+ad)i, a,b,c,d∈Zp
という式で計算することができる。
 定理1.2により、Zp[i]を係数体としたとき、長さnの離散フーリエ変換が存在するための必要十分条件は、
n|2k+1(2k-1-1)
である。
 メルセンヌ素数M31=231-1を法とする剰余演算は、32ビット算術演算器で効率よく処理することができる。高速乗算法(2)はこの性質を利用して実装される。離散フーリエ変換の長さnとして
n|232(230-1)
なるものが使用できるので当面の目的には十分である。
1.3 原始根
 p=M31とし、Zp[i]上の離散フーリエ変換を行なうにあたってその原始根を求めなければならない。一般に大きい有限体の原始根を探索することは計算量が多く難しい問題であるが、この場合は、原始根探索プログラムによって比較的簡単に原始根
12+i
を発見することができた。
 離散フーリエ変換の長さNとしては
N=2n,0<n≦32
という形のものを使うことにする。このNは離散フーリエ変換の条件を満たし、さらに原始根12+iを使って1の原始N乗根を
(12+i)t,t=232-n(230-1),0<n≦32
と表現することができる。
2. 高速乗算法(2)
2.1 高速乗算法(2)の構造
Step 1. 数のP進表現
 基数をP=232とし、長さを
N=2n,0<n≦30
とする。正の整数a,bが次のようにP進表現されるものとする。
a
aN-1PN-1++a1P+a0,0≦ai<P
b
bN-1PN-1++b1P+b0,0≦bi<P
この積について0≦ab<PNが成り立つと仮定する。
Step 2. 多項式としての積の計算
 PK≡1(mod PN-1)より、
cabN-1
Σ
r=0
(
Σ
s+t≡r(mod N)
asbt)Pr
(mod PN-1)
となる。この係数cr=s+t≡r(mod N)asbtの大きさを評価すると、
0crN(232-1)2
となる。
Step 3. 係数の分解
 2つの不等式
N
M31=231-1
(232-1)2
T5=232(232-1)+1
より、係数cr
0crM31T5
によって評価する。係数をM31を法とした場合とT5を法とした場合の2つに分解する。
ar'
ar(mod M31)
br'
br(mod M31)
ar''
ar(mod T5)
br''
ar(mod T5)
Step 4. 離散フーリエ変換による係数の計算
 c'rは、(N, ZM31[i], ω), ω=(12+i)t, t=232-n(230-1)型の離散Fourier変換を利用して次のように計算する。
F(a')k
=
N-1
Σ
s=0
assk  (inZM31[i])
F(b')k
=
N-1
Σ
t=0
bttk  (inZM31[i])
c'r
=
N-1N-1
Σ
k=0
F(a')kF(b')kω-kr  (inZM31[i])
c''rは、(N, FT5, ζ), ζ=7t, t=232-n(232-1)型の離散Fourier変換を利用して次のように計算する。
F(a'')k
N-1
Σ
s=0
as''ζsk  (mod T5)
F(b'')k
N-1
Σ
t=0
bt''ζtk  (mod T5)
c''r
N-1N-1
Σ
k=0
F(a'')kF(b'')kζ-kr  (mod T5)
Step 5. 孫子の剰余定理による連立方程式の解法
 (M31, T5)=1であるから、孫子の剰余定理からcrを、連立合同式
cr
c'r(mod M31)
cr
c''r(mod T5)
を解くことによって求めることができる。
Step 6. 桁上げ処理
 最後にcr, r=0,…,K-1に桁上げ処理を施すことで、c=abP進表現が得られる。
参考文献
計算数論
[N1] 和田 秀男, コンピュータと素因子分解, 遊星社, 1999
[N2] 和田 秀男, 高速乗算法と素数判定法, 上智大学数学教室, 1983
[N3] 梅谷 武, 離散Fourier変換
[N4] 梅谷 武, ストラッセン-ショーンハーゲ法
[N5] Daniel J. Bernstein, Multidigit multiplication for mathematicians
[N6] 梅谷 武, 高速乗算法の設計と実装(1)
[N7] I. S. Reed, T. K. Truong, The use of finite fields to compute convolution, IEEE Trans.IT-21, 208-213, 1975
[N8] I. S. Reed, T. K. Truong, Complex integer convolutions over a direct sum of Galois fields, IEEE Trans.IT-21, 657-661, 1975
算法
[S1] 野下 浩平, 高岡 忠雄, 町田 元, 基本的算法, 岩波書店, 1983
[S2] D. E. Knuth(中川 圭介訳), 準数値算法―算術演算, サイエンス社, 1986
[S3] H. J. Nussbaumer(佐川雅彦他訳), 高速フーリエ変換のアルゴリズム, 科学技術出版社, 1989
[S4] David H. Bailey, The computation of π to 29,360,000 decimal digits using Borweins' quartically convergent algorithm
[S5] Mikko Tommila, Number theoretic transforms
ディジタル信号処理
[D1] 電子情報通信学会, ディジタル信号処理の基礎, コロナ社, 1988
[D2] G. A. Jullien, Number theoretic techniques in digital signal processing
[D3] G. A. Jullien, Residue arithmetic with application in digital signal processing