JP4607796B2 - 共用メモリ型スカラ並列計算機向け、高速3次元フーリエ変換処理方法 - Google Patents
共用メモリ型スカラ並列計算機向け、高速3次元フーリエ変換処理方法 Download PDFInfo
- Publication number
- JP4607796B2 JP4607796B2 JP2006058875A JP2006058875A JP4607796B2 JP 4607796 B2 JP4607796 B2 JP 4607796B2 JP 2006058875 A JP2006058875 A JP 2006058875A JP 2006058875 A JP2006058875 A JP 2006058875A JP 4607796 B2 JP4607796 B2 JP 4607796B2
- Authority
- JP
- Japan
- Prior art keywords
- fourier transform
- bit
- dimension
- dimensional
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/14—Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
- G06F17/141—Discrete Fourier transforms
- G06F17/142—Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
Landscapes
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Discrete Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Description
PRIMEQUESで採用されたItanium2プロセッサでは、浮動小数点レジスタが128個設けられている。また、キャッシュおよびメモリのアクセス時間も比較的高速になっている。Sparc 向けなどに開発したフーリエ変換方法は高速な1次元変換をベースに多次元フーリエ変換を構成する方法であった。Sparc システムは、キャッシュがL1,L2 と2段となっており、L1キャッシュのアクセスに比べ、L2キャッシュのアクセス速度は遅い。このため、比較的小さなL1キャッシュにデータを保持して計算する方法が優位となる。
Charles Van Loan, "Computational Frameworks for the Fast Fourier Transform", Society for Industrial and Applied Mathematics, 1992
(1)3次元目と1次元目とがなす平面に対する多重変換は、キャッシュのWAY数を考慮して、比較的小さな基数で計算することで、連続アクセスの高速性能を引き出すことができる。大きな基数を使うとキャッシュのWAY数による衝突から、メモリからのアクセス性能が劣化してしまう。すなわち、フーリエ変換は、変換を行う各次元のデータ長を適当な因子に分解したときの各因子に関するフーリエ変換を行うことで計算することができるので、データ長を因数である基数に分解して、基数の大きさのフーリエ変換を繰り返し行なうことで、データ長分の計算をする。たとえば、データ長を2の階乗で表したときは、2×2の複素数からなるフーリエ変換を繰り返し行なうことで、データ長分のフーリエ変換を行なうことができる。したがって、この場合、基数×基数個の複素数は、キャッシュを用いて読み書きしながら、まとめて演算する必要がある。ところが、キャッシュにまとめて読み書きできるデータ数は、WAY数によって限定されることから、基数がWAY数に比較して所定以上大きくなると演算しなければならないデータの量がキャッシュの読み書き可能量を超えてしまい、データのロードが発生する。データのロードは演算速度に比べて遅いため、フーリエ変換の演算速度が落ちてしまう。したがって、高速にフーリエ変換を行なうために、基数は、キャッシュのWAY数に比べて比較的小さい必要がある。
(2)特に、データ長が2の冪で表されるときが重要である。Cooley-Tukeyの方法では、各基数の変換を行った後にビットリバースのデータの並べ替えがある。
(3)同じく、ビットリバースのデータの並び替えを必要とするCooley-Tukeyの方法を使う、3次元目のフーリエ変換に関しては、2次元目を固定した平面で1次元目を多重度と考えた、基数の変換を行う。すべての基数に関する変換が終わった段階で、ビットリバースを行うが、1次元目の方向のデータの並びからなるベクトルごとの入れ替えでビットリバースを行う。すべての2次元目に値に対する多重変換が終われば3次元フーリエ変換の全演算の終了である。
(4)1次元目および2次元目の計算に関しては、この方法以外にも、かなり大きな基数を使い(ただし、キャッシュのWAY数による衝突は起こらないようにする)、ビットリバースの並び替えの不要な方法を利用する方法も有効である。この方法は、1次元目方向と2次元目方向からなる平面は、データのアクセス領域としては連続領域となっており、本実施形態で前提とするプロセッサでは連続領域へのアクセスが速い事と、十分大きなキャッシュに、演算に必要なデータ全体が格納され得ることと、レジスタが豊富にあることを利用して行う。
(a)1次元変換では、以下の方法を利用する。
更に、基数個のフーリエ変換をm回行うループで、演算すべき行ベクトルデータを、一回前のループでロードしておいて、レジスタに保持しておく。このことで、データのロードと計算を同時に行うことができる。これは、レジスタが豊富にあるからできることである。基数を大きくすると、1回の参照で読み出されるデータの数が増えるので、1回の参照でロードされたデータに行なうべき演算量が増えるため、データのロードを一回前のループの演算中に完了することが可能である。1回のロードで行なうべき演算量が増えるが、演算に使うレジスタと事前にロードするために使うレジスタの数がCPUのレジスタ総数を超えないようにする。
(5)混合基底の場合
混合基底(複数の異なる基底を用いる)の場合は、各基数に関する変換と、回転因子の乗算、および、転置を組み合わせたもので、各基数に対する変換を行う。このとき、入力領域と出力領域が必要になる。そのため、1次元目と2次元目に関しては、1次元目方向と2次元目方向とで構成されるひとつの平面とみなして、変換を行う。2次元目の変換は、1次元目の変換と同じ大きさの作業域を確保して、各基数の1次元目を多重度と見なして行なう。フーリエ変換の入出力はデータの格納された領域と作業域を切り替えて行う。
データ長n がp ×q と因数分解できたとき次の4ステップで計算できる。
step 1: 格納域x をx(p,q)の2次元配列と考える。1次元目(pのインデックス)に関する長さq のフーリエ変換を多重度p だけ行なう。
step 3: x(p,q)を転置してw(q,p)に格納する。
qが小さく、pが大きな数である場合には、2つの因子への分解をstep 4の長さp の変換に繰り返し再帰的に提供することで、長さの短いフーリエ変換の組み合わせで長さn のフーリエ変換を計算することができる。
データ長n をp 個の基数の積に分解する。n=n1×n2×...×np
s1: m ←n/npとする。
s3: 2 次元目の基数npのフーリエ変換を多重度m だけ行なう。
s4: x(m,np) に回転因子を掛ける。
s6: m を(m/np-1,np-1) と 2次元に分解する。そのためm ←m/np-1と更新する。
s7: w(np,m,np-1)と一つ次元をあげて、下記のSTEP1の計算を適用する。
STEP1:まず、3次元目のnp-1のフーリエ変換を多重度np×m 行なう。
s9: 2次元目と3次元目を入れ替え(転置)する。
x(np,np-1,m) ←w(np,m,np-1)。
s11:最後の基数に関してフーリエ変換を行なうとき、すべての基数の個数が偶数ならw に奇数ならx に変換すべきデータがある。最後の多重転換は、変換すべきデータがwにあるときは、出力はx に、変換すべきデータがx にあるときはx に出力する。
以上のような方法で、Sparc向けのコードをItanium2に単純に移植したときの性能に比べて2 倍強の性能を引き出す効果があった。
(1)基数が2の冪となる場合。
1次元目に関して、ビットリバースの並べ替えを除いて、上記で説明したように、基数次元の行ベクトルと見て、1本ずつ、フーリエ変換と回転因子の乗算を行う。次に、2次元目に関して、1次元目を多重度として2次元目のフーリエ変換と回転因子の乗算を行う。これらは2,4,8などの基数を用いて行う。基数をnradixとして、m=n/nradixとして、m×nradixの2次元配列とみなして、各行に対して基数nradixのフーリエ変換と回転因子を掛ける。この結果は、ビットリバース順に並び替えておく。
A)フーリエ変換及び回転因子の乗算がされた後のデータw(i、j、k)のインデックスi、j、kのそれぞれについてビットリバースを行なうが、今、iの総ビット数が奇数とすると、このとき、iを5つの部分に分ける。左が高位ビットとする。
a)AとCRが異なる場合
Aがmビットとして、0から2**m−1まで変化させることを考える。
A>CRを成り立たせるすべてのCを生成する。すると、ビット列C|Aとビット列AR|CRは異なる値となる。
このように生成したペア(C|AとAR|CR)はすべての組み合わせをつくしている。
Aは順次生成しているので、A2>Aとする。
b)AとCRが一致する場合
したがって、ARとCも一致する。よって、C|AとAR|CRは同じビット列となる。したがって、B1 |C|B2|A|B3とB3|AR|B2|CR|B1が異なるビット列となるためには、B=B1|B2|B3は非対称でないといけない。つまり、BRをBのビットリバースしたものとすると、B≠BR。これは3ビットのBの具体的なパターンを見れば決めることができる。
B)インデックスの総ビット数が偶数のとき
中央のB2を総ビット数が奇数のときに対して1ビット増やして2ビットにする。
a)AとCRが異なる場合
Aがmビットとして、0から2**m−1まで変化させることを考える。
A>CRを保つすべてのCを生成する。するとC|AとAR|CRは一致しない。
このように生成したペア(C|AとAR|CR)はすべての組み合わせをつくしている。
ペアが一致しているので、CRとA2は一致しなければならない。すると、CR>Aとなり矛盾する。したがって、仮定が間違っていたということになるので、生成したペアには重複したペアは発生しない。
b)AとCRが一致する場合
B1 |C|B2|A|B3とB3|AR|B2R|CR|B1が異なるビット列となるためには、B=B1|B2|B3は非対称でないといけない。つまり、B≠BR。これは4ビットのBの具体的なパターンを見れば決めることができる。
2次元目のインデックスの入れ替えに関しては、次のようにする。2次元目の入れ替えを行うとき、1次元方向のベクトルで入れかえる。そのためベクトルV、ベクトルWに入れ替える列ベクトルをコピーする。コピーしたら、このベクトル上で1次元目の入れ替えを行なう。1次元目の入れ替えを行なった結果のベクトルVとWを入れ替えて、もとの列ベクトルに格納する。
・AとCRが一致してBとBRが一致する場合。
この場合のベクトルに関しては、1次元目の入れ替えを行なう。
(2)ビットリバースを必要としない方法で、必要なデータを先読みする方法
次数nとして、基数nradixに対してm=n/nradixとして(nはデータ長)、m×nradixの2次元配列と見なして、各行ベクトルに対してフーリエ変換と回転因子を掛ける。フーリエ変換後のデータの格納は、この基数のフーリエ変換の格納順とする。
nをデータ長として、nradixを基数とした場合、m×nradixの配列Xから行ベクトルを順次取り出して、基数に関するフーリエ変換および回転因子の乗算を行い、それを転置した配列(nradix×mの配列)に格納する。この繰り返し処理で、参照するデータは、一つまえの繰り返しでロードしておくことで、データのロードの待ち時間中に計算を実行することができる。これは、レジスタが豊富であることにより実現できるものである。
図2は、本発明の実施形態の3次元フーリエ変換の処理を説明するフローチャートである。
3次元FFTの3次元目のフーリエ変換に関して、各スレッドに割り当てて行なう部分は以下のようにする。
n3=r1×r2×・・・×rm
ステップS16において、i=1とする。ステップS17において、iがmか否かを判断する。ステップS17の判断がYesの場合には、ステップS22に進む。ステップS17の判断がNoの場合には、ステップS18において、iが偶数か、すなわち、iと2の剰余(mod)が0か否かを判断する。ステップS18の判断がYesの場合には、ステップS20に進む。ステップS18の判断がNoの場合には、ステップS19において、作業域Wを入力、x(k1, j2, n3)を出力にして、基数rxのフーリエ変換と回転因子の積演算を1次元の大きさn1だけの多重度分行ない、ステップS21に進む。ステップS20では、x(k1, j2, n3)を入力に、wを出力にして、基数rxのフーリエ変換と回転因子の積演算を1次元の大きさn1だけの多重度分行ない、ステップS21に進む。ステップS21では、iを1増加し、ステップS17に戻る。
まず、ステップS30において、フーリエ変換のデータ長を以下のように基数に分解する。
ここで、基数の数をmとする。
ステップS31において、必要なテーブルをm−1個作成する。次に、ステップS32において、i=1と設定する。ステップS33において、最初のテーブルで基数r1のフーリエ変換を呼び出し、xを入力、w1を出力として実行する。この処理は、サブルーチンfft1を呼び出すことにより行なう。ステップS34において、iを1増加する。ステップS35において、iと2の剰余が1か否かを判断する(iが奇数か否かを判断する)。ステップS35の判断がYesの場合には、ステップS36に進む。ステップS35の判断がNoの場合には、ステップS37に進む。ステップS36では、i番目のテーブルで基数riのフーリエ変換を呼び出す。w1を入力、w2を出力とする。これは、サブルーチンfft1を呼び出すことによって行なう。ステップS37では、i番目のテーブルで基数riのフーリエ変換を呼び出す。w2を入力、w1を出力とする。ここでは、サブルーチンfft1を呼び出す。そして、ステップS38において、iを1増加し、ステップS39において、i<mか否かを判断する。ステップS39の判断がYesの場合には、ステップS35に戻る。ステップS39の判断がNoの場合には、ステップS40において、最後の基数rmについてのフーリエ変換を呼び出して、結果のデータを格納する。mが基数ならw2を偶数ならw1を入力として、xを出力とする。ここでは、サブルーチンfft2を呼び出す。
Itanium2など浮動小数点レジスタが128 個以上あるプロセッサではスカラ変数を使って、Fortranなどの高級言語でプログラムを記述するとレジスタが十分豊富である間はレジスタを使ったコードとなる。また、これらの変数は、レジスタが割り当てられているものと考える。基数をrx、変換データ長をnとしたとき、m=n/rxとする。入力の配列はx(m,rx),出力はw(rx,m) とする。回転因子を格納したテーブルtbl(1:rx-1,m)もサブルーチンの入力とする。
Itanium2など浮動小数点レジスタが128 個以上あるプロセッサでは、スカラ変数を使ってFortran などの高級言語でプログラムを記述するとレジスタが十分豊富である間はレジスタを使ったコードとなる。また、これらの変数はレジスタが割り当てられているものと考える。基数をrx、変換データ長をn としたとき、m=n/rxとする。入力の配列はx(m,rx),出力はw(rx,m) とする。x=1のときは、m=r2×r3×... ×rpと分解され、各基数に関して変換が終わっている。因子の数はp である。基数の個数の多次元配列x(r2, r3, ..., rp, rx)と見なして、Wをw(rp, rp-1, ..., r2,rx)と見なして、そのように格納されるように最高次元以外のインデックスを逆順に並び替える。
dis1=r2, dis2=dis1*r3, …, disp-1=disp-2*rp
dit1=rp, dit2=dit1*rp-1, ..., ditp-1=ditp-2*r2
j←i−1
とおき、
j=i0+i1*dis1+i2*dis2+...+ip-1*disp-1
となるi0、・・・、ip−1を決める。すなわち、
i0=mod(j, dis1), i←j/dis1
,………
ix=mod(j, disx+1), j←j/disx+1を繰り返す。
そして、
k=ip-1+ip-2*dit1+...+i0*ditp-1+1と計算する。
dis1=r2, dis2=dis1*r3, …, disp-1=disp-2*rp
dit1=rp, dit2=dit1*rp-1, ..., ditp-1=ditp-2*r2
j←i−1
とおき、
j=i0+i1*dis1+i2*dis2+...+ip-1*disp-1
となるi0、・・・、ip−1を決める。すなわち、
i0=mod(j, dis1), i←j/dis1
,………
ix=mod(j, disx+1), j←j/disx+1を繰り返す。
そして、
k=ip-1+ip-2*dit1+...+i0*ditp-1+1と計算する。
ステップS70において、結果をw(1:rx, k)に格納して、サブルーチンから抜け出る。
この方法も同じように、データ長n がp ×q と因数分解できたとき次の4ステップで計算する方法から構成することができる。n は2のべき乗であらわせる数とする。
step 1: 格納域x をx(p,q)の2次元配列と考える。2 次元目に関する長さq のフーリエ変換を多重度p だけ行なう。
step 3: x(p,q)を転置してw(q,p)に格納する。
step 4: w の2次元目に関して、長さp のフーリエ変換を多重度q だけ行なう。
step 1: 格納域x をx(p,q)の2次元配列と考える。2 次元目に関する長さq のフーリエ変換を多重度p だけ行なう。
step 3: x(p,q)に 2次元目に関してフーリエ変換の結果をビットリバースした並びで格納する。
step 5: x(p×q)のデータに対して、ビットリバースの並び替えを行なう。
図7においては、ステップS77において、1次元目に関して、下記のs1〜s11の計算を行なう。これを2次元目の多重度分行なう。ステップS76において、2次元目に関して、s1〜s11の計算を各基底に関してのフーリエ変換及び回転因子の積に関して、1次元目の多重度分行なう。そして、ステップS77で、1次元目と2次元目のビットリバースの並び替えを同時に行なう。このときは、サブルーチンbitrb2dを呼び出して行なう。
s1: m ←n/npとする。
s2: データの格納されている1次元領域をx(m,np) なる2 次元配列と見なす。
s4: x(m,np) に回転因子を掛ける。
s5: 基数npのフーリエ変換結果をビットリバースの並び替えを行なった順に格納する。
s6: m を(m/np-1,np-1) と 2次元に分解する。そのためm ←m/np-1と更新する。
STEP1:まず、2次元目のnp-1のフーリエ変換を多重度m ×np行なう。
s8: 回転因子をx(m,np-1,*) に掛ける。
s10:m を次の基数との積に分解してフーリエ変換を繰り返す。
s12:x(n)のデータに関してビットリバースの並び替えを行なう。
ステップS80において、2次元目の大きさのビット数nb(n2=2**nb)を求める。ステップS81において、nbが偶数か否かを判断する。ステップS81の判断で、奇数と判断された場合には、ステップS97に進む。ステップS81で、偶数と判断された場合には、ステップS82に進む。ステップS82において、nbitx=(nb-3)/2, nx=2**nbitxを計算する。ステップS83において、iを1に設定する。ステップS84において、jを1に設定する。ステップS85において、j<iか否かを判断する。ステップS85の判断がNoのときは、ステップS89に進む。ステップS85の判断がYesの場合には、ステップS86において、(i−1)を1ビット左にシフトしたものに、(j−1)をビットリバースしたものを、更に(nbitx+2)ビット左にシフトしたものを加えたものをidxとする。iとjを入れ替えて同じ操作をしたものをisxとする。ステップS87において、0から7までのビットパターンを生成して、3ビットに左から分けて、B1、B2、B3とする。idxの2*nbit+3ビット目にB1を、nbit+2ビット目にB2を、1ビット目にB3を加えて、それに、1を加えてidとする。同様に、isxの2*nbit+3ビット目にB3を、nbit+2ビット目にB2を、1ビット目にB1を加えて、それに1を加えてisとする。0から7までのビットパターンを生成する毎に、このように、idおよびisをつくり、サブルーチンpermxyを呼び出す。permxyは、x(*、is)とx(*、id)を入れ替える。そのときに、x(*,is)及びx(*,is)のビットリバースの並び替えを行なう。ステップS88において、jを1だけ増加して、ステップS85に戻る。ステップS89では、iを1だけ増加する。
サブルーチンpermxyは、x(1:n1,id2) およびx(1:n1,is2) を呼び出し元より受け渡されて、x(1:n1,id2) およびx(1:n1,is2) の長さn1のベクトルをビットリバースの並びに並び替えて、その結果の1 次元ベクトルを入れ替える。
サブルーチンperm1dは、x(1:n1,id2) を呼び出し元より受け渡されて、x(1:n1, id2) の長さn1のベクトルをビットリバースの並びに並び替えを行なう。
x(1:n1,j2,1:3n) に関して 1次元の多重度分、 3次元目のフーリエ変換を行なう。
ステップS190において、3次元目の処理においては、前述のs1〜s11の計算を各基数について、各基数のフーリエ変換及び回転因子の積の処理を、1次元目の多重分だけ行なう。ステップS191において、1次元目と2次元目のビットリバースの並び替えを同時に行なう。この場合、サブルーチンbitrb3dを呼び出して実行する。
サブルーチンbitrb3d は、x(1:n1,j2,1:n3) 1次元目と 3次元目からなる平面で3次元目に関するビットリバースの並びに並び替えを1次元のベクトル単位で行なう。
連続したデータ領域へのアクセスが高速化された、1次元目のインデックスをi、2次元目をj、3次元目をkとしたとき、入力データx(i、j、k)のiの連続する方向に並んだデータを連続領域に格納する共有メモリ型スカラ並列計算機における3次元フーリエ変換処理方法において、
インデックスiとjからなる2次元配列データx(i、j、*)(*は、kの取りうる任意の値)を単位として、キャッシュにロードし、
インデックスiが変化する方向への1次元目のフーリエ変換を、iを連続に変化させながら、j方向の多重度分行い、
インデックスjが変換する方向への2次元目のフーリエ変換を、iが連続して変化する方向への演算を優先して、i方向の多重度分行ない、
インデックスkが変化する方向への3次元目のフーリエ変換を行なう
ことを特徴とする3次元フーリエ変換処理方法。
(付記2)
前記3次元目のフーリエ変換を行うステップは、
インデックスiとkからなる2次元配列データx(i、*、k)(*は、jの取りうる任意の値)を単位として、キャッシュにロードし、
インデックスkが変化する方向への3次元目のフーリエ変換を、iが連続して変化する方向への演算を優先して、i方向の多重度分行なう
ことを特徴とする付記1に記載の3次元フーリエ変換処理方法。
(付記3)
前記1次元目、2次元目、3次元目のそれぞれのフーリエ変換は、それぞれの次元を表すインデックスの取りうる値の数を基数に分解し、該基数を基礎とした小さなフーリエ変換と回転因子の積の繰り返し処理によって行なうことを特徴とする付記2に記載の3次元フーリエ変換処理方法。
(付記4)
前記小さなフーリエ変換は、キャッシュにロードされた2次元配列のうちから1行ずつ読み出し、データ長を基数に分解して、データを基数×整数の2次元配列とみなして処理して、作業域に転置した配列として結果を格納することを特徴とする付記3に記載の3次元フーリエ変換処理方法。
(付記5)
1次元目方向のビットリバースと2次元目方向のビットリバースを、ビットリバースを行なうべきデータがレジスタ上にある間に、同時に行なうことを特徴とする付記1に記載の3次元フーリエ変換処理方法。
(付記6)
前記同時に行われるビットリバースは、フーリエ変換されるべきデータの長さが、2の冪で表される場合に適用されることを特徴とする付記5に記載の3次元フーリエ変換処理方法。
(付記7)
前記フーリエ変換は、Cooley-Tukeyの方法で実行されることを特徴とする付記1または2に記載の3次元フーリエ変換処理方法。
(付記8)
連続したデータ領域へのアクセスが高速化された、1次元目のインデックスをi、2次元目をj、3次元目をkとしたとき、入力データx(i、j、k)のiの連続する方向に並んだデータを連続領域に格納する共有メモリ型スカラ並列計算機における3次元フーリエ変換処理方法を該共有メモリ型スカラ並列計算機に実現させるプログラムにおいて、
インデックスiとjからなる2次元配列データx(i、j、*)(*は、kの取りうる任意の値)を単位として、キャッシュにロードし、
インデックスiが変化する方向への1次元目のフーリエ変換を、iを連続に変化させながら、j方向の多重度分行い、
インデックスjが変換する方向への2次元目のフーリエ変換を、iが連続して変化する方向への演算を優先して、i方向の多重度分行ない、
インデックスkが変化する方向への3次元目のフーリエ変換を行なう
ことを特徴とする3次元フーリエ変換処理方法を該共有メモリ型スカラ並列計算機に実現させるプログラム。
(付記9)
前記3次元目のフーリエ変換を行うステップは、
インデックスiとkからなる2次元配列データx(i、*、k)(*は、jの取りうる任意の値)を単位として、キャッシュにロードし、
インデックスkが変化する方向への3次元目のフーリエ変換を、iが連続して変化する方向への演算を優先して、i方向の多重度分行なう
ことを特徴とする付記8に記載の3次元フーリエ変換処理方法を該共有メモリ型スカラ並列計算機に実現させるプログラム。
(付記10)
1次元目方向のビットリバースと2次元目方向のビットリバースを、ビットリバースを行なうべきデータがレジスタ上にある間に、同時に行なうことを特徴とする付記8に記載の3次元フーリエ変換処理方法を該共有メモリ型スカラ並列計算機に実現させるプログラム。
(付記11)
連続したデータ領域へのアクセスが高速化された、1次元目のインデックスをi、2次元目をj、3次元目をkとしたとき、入力データx(i、j、k)のiの連続する方向に並んだデータを連続領域に格納する共有メモリ型スカラ並列計算機における3次元フーリエ変換処理装置において、
インデックスiとjからなる2次元配列データx(i、j、*)(*は、kの取りうる任意の値)を単位として、キャッシュにロードするロード手段と、
インデックスiが変化する方向への1次元目のフーリエ変換を、iを連続に変化させながら、j方向の多重度分行う1次元目変換手段と、
インデックスjが変換する方向への2次元目のフーリエ変換を、iが連続して変化する方向への演算を優先して、i方向の多重度分行う2次元目変換手段と、
インデックスkが変化する方向への3次元目のフーリエ変換を行なう3次元目変換手段と、
を備えることを特徴とする3次元フーリエ変換処理装置。
(付記12)
前記3次元目変換手段は、
インデックスiとkからなる2次元配列データx(i、*、k)(*は、jの取りうる任意の値)を単位として、キャッシュにロードする手段と、
インデックスkが変化する方向への3次元目のフーリエ変換を、iが連続して変化する方向への演算を優先して、i方向の多重度分行なう手段と、
を備えることを特徴とする付記11に記載の3次元フーリエ変換処理装置。
(付記13)
1次元目方向のビットリバースと2次元目方向のビットリバースを、ビットリバースを行なうべきデータがレジスタ上にある間に、同時に行なうことを特徴とする付記11に記載の3次元フーリエ変換処理装置。
S11 2次元フーリエ変換ステップ
S12 2次元目スレッド割り当てステップ
S13 3次元目フーリエ変換ステップ
Claims (6)
- 連続したデータ領域へのアクセスが高速化された、1次元目のインデックスをi、2次元目をj、3次元目をkとしたとき、入力データx(i、j、k)のiの連続する方向に並んだデータを連続領域に格納する共有メモリ型スカラ並列計算機における3次元フーリエ変換処理方法において、
該共有メモリ型スカラ並列計算機は、
インデックスiとjからなる2次元配列データx(i、j、*)(*は、kの取りうる任意の値)を単位として、キャッシュにロードし、
インデックスiが変化する方向への1次元目のフーリエ変換を、iを連続に変化させながら、j方向の多重度分行い、
インデックスjが変化する方向への2次元目のフーリエ変換を、iが連続して変化する方向への演算を優先して、i方向の多重度分行ない、
インデックスkが変化する方向への3次元目のフーリエ変換を行い、
前記3次元目のフーリエ変換を行うステップは、
インデックスiとkからなる2次元配列データx(i、*、k)(*は、jの取りうる任意の値)を単位として、キャッシュにロードし、
インデックスkが変化する方向への3次元目のフーリエ変換を、iが連続して変化する方向への演算を優先して、i方向の多重度分行ない、
1次元目方向のビットリバースと2次元目方向のビットリバースを、ビットリバースを行なうべきデータがレジスタ上にある間に、同時に行なう
ことを特徴とする3次元フーリエ変換処理方法。 - 前記1次元目、2次元目、3次元目のそれぞれのフーリエ変換は、それぞれの次元を表すインデックスの取りうる値の数を基数に分解し、該基数を基礎とした小 さなフーリエ変換と回転因子の積の繰り返し処理によって行なうことを特徴とする請求項1に記載の3次元フーリエ変換処理方法。
- 前記小さなフーリエ変換は、キャッシュにロードされた2次元配列のうちから1行ずつ読み出し、データ長を基数に分解して、データを基数×整数の2次元配列 とみなして処理して、作業域に転置した配列として結果を格納することを特徴とする請求項2に記載の3次元フーリエ変換処理方法。
- 前記同時に行われるビットリバースは、フーリエ変換されるべきデータの長さが、2の冪で表される場合に適用されることを特徴とする請求項1に記載の3次元 フーリエ変換処理方法。
- 前記フーリエ変換は、Cooley-Tukeyの方法で実行されることを特徴とする請求項1に記載の3次元フーリエ変換処理方法。
- 連続したデータ領域へのアクセスが高速化された、1次元目のインデックスをi、2次元目をj、3次元目をkとしたとき、入力データx(i、j、k)のiの 連続する方向に並んだデータを連続領域に格納する共有メモリ型スカラ並列計算機における3次元フーリエ変換処理方法を該共有メモリ型スカラ並列計算機に実現させるプログラムにおいて、
インデックスiとjからなる2次元配列データx(i、j、*)(*は、kの取りうる任意の値)を単位として、キャッシュにロードし、
インデックスiが変化する方向への1次元目のフーリエ変換を、iを連続に変化させながら、j方向の多重度分行い、
インデックスjが変化する方向への2次元目のフーリエ変換を、iが連続して変化する方向への演算を優先して、i方向の多重度分行ない、
インデックスkが変化する方向への3次元目のフーリエ変換を行い、
前記3次元目のフーリエ変換を行うステップは、
インデックスiとkからなる2次元配列データx(i、*、k)(*は、jの取りうる任意の値)を単位として、キャッシュにロードし、
インデックスkが変化する方向への3次元目のフーリエ変換を、iが連続して変化する方向への演算を優先して、i方向の多重度分行ない、
1次元目方向のビットリバースと2次元目方向のビットリバースを、ビットリバースを行なうべきデータがレジスタ上にある間に、同時に行なう
とを特徴とする3次元フーリエ変換処理方法を該共有メモリ型スカラ並列計算機に実現させるプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006058875A JP4607796B2 (ja) | 2006-03-06 | 2006-03-06 | 共用メモリ型スカラ並列計算機向け、高速3次元フーリエ変換処理方法 |
US11/452,360 US7467053B2 (en) | 2006-03-06 | 2006-06-14 | Three-dimensional fourier transform processing method for shared memory scalar parallel computer |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006058875A JP4607796B2 (ja) | 2006-03-06 | 2006-03-06 | 共用メモリ型スカラ並列計算機向け、高速3次元フーリエ変換処理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2007241349A JP2007241349A (ja) | 2007-09-20 |
JP4607796B2 true JP4607796B2 (ja) | 2011-01-05 |
Family
ID=38472632
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006058875A Expired - Fee Related JP4607796B2 (ja) | 2006-03-06 | 2006-03-06 | 共用メモリ型スカラ並列計算機向け、高速3次元フーリエ変換処理方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7467053B2 (ja) |
JP (1) | JP4607796B2 (ja) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102005045519A1 (de) * | 2005-09-23 | 2007-03-29 | Newlogic Technologies Ag | Verfahren und Vorrichtung zur FFT Berechnung |
US7861060B1 (en) * | 2005-12-15 | 2010-12-28 | Nvidia Corporation | Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior |
US7836116B1 (en) * | 2006-06-15 | 2010-11-16 | Nvidia Corporation | Fast fourier transforms and related transforms using cooperative thread arrays |
US7640284B1 (en) | 2006-06-15 | 2009-12-29 | Nvidia Corporation | Bit reversal methods for a parallel processor |
JP5654373B2 (ja) * | 2011-02-01 | 2015-01-14 | 株式会社富士通アドバンストエンジニアリング | 演算装置、演算方法およびプログラム |
CN104932842B (zh) * | 2015-06-18 | 2018-03-02 | 武汉新芯集成电路制造有限公司 | 一种将三维存储器的三维比特数据转换成二维比特图的方法 |
WO2018213438A1 (en) * | 2017-05-16 | 2018-11-22 | Jaber Technology Holdings Us Inc. | Apparatus and methods of providing efficient data parallelization for multi-dimensional ffts |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002049612A (ja) * | 2000-08-04 | 2002-02-15 | Concurrent Nippon Corp | 演算方法 |
JP2002163247A (ja) * | 2000-11-24 | 2002-06-07 | Fujitsu Ltd | 共有メモリ型スカラ並列計算機における多次元フーリエ変換の並列処理方法 |
JP2005202911A (ja) * | 2003-12-19 | 2005-07-28 | Fujitsu Ltd | 1次元フーリエ変換プログラム |
-
2006
- 2006-03-06 JP JP2006058875A patent/JP4607796B2/ja not_active Expired - Fee Related
- 2006-06-14 US US11/452,360 patent/US7467053B2/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002049612A (ja) * | 2000-08-04 | 2002-02-15 | Concurrent Nippon Corp | 演算方法 |
JP2002163247A (ja) * | 2000-11-24 | 2002-06-07 | Fujitsu Ltd | 共有メモリ型スカラ並列計算機における多次元フーリエ変換の並列処理方法 |
JP2005202911A (ja) * | 2003-12-19 | 2005-07-28 | Fujitsu Ltd | 1次元フーリエ変換プログラム |
Also Published As
Publication number | Publication date |
---|---|
JP2007241349A (ja) | 2007-09-20 |
US7467053B2 (en) | 2008-12-16 |
US20070208795A1 (en) | 2007-09-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4607796B2 (ja) | 共用メモリ型スカラ並列計算機向け、高速3次元フーリエ変換処理方法 | |
CN109964203B (zh) | 数据并行计算设备的排序 | |
Flanders | A unified approach to a class of data movements on an array processor | |
Li et al. | Quantum multi-level wavelet transforms | |
Jaffali et al. | Quantum entanglement involved in Grover’s and Shor’s algorithms: the four-qubit case | |
Bárány et al. | Self-similar and Self-affine Sets and Measures | |
JP3639207B2 (ja) | 共有メモリ型スカラ並列計算機における多次元フーリエ変換の並列処理方法 | |
Pike et al. | Decycling Cartesian products of two cycles | |
Duff | Parallel algorithms for sparse matrix solution | |
Ellert et al. | Parallel external memory wavelet tree and wavelet matrix construction | |
Bourbakis et al. | A fractal-based image processing language: formal modeling | |
Alsuwaiyel | Parallel Algorithms | |
Imanaga et al. | Simple iterative trial search for the maximum independent set problem optimized for the GPUs | |
Stojmenovic | Listing combinatorial objects in parallel | |
Burkhardt | Graph connectivity in log steps using label propagation | |
Fuentes-Sepúlveda et al. | Succinct encoding of binary strings representing triangulations | |
Romero et al. | Graphs with large girth and chromatic number are hard for Nullstellensatz | |
He et al. | Using graphics processors for high performance SimRank computation | |
Bijoy et al. | RBS: a new comparative and better solution of sorting algorithm for array | |
Grigori | Introduction to communication avoiding algorithms for direct methods of factorization in linear algebra | |
Munthe-Kaas | Superparallel FFTs | |
Izadkhah | Basic Data Structure | |
Goswami | Memory-efficient all-pair suffix-prefix overlaps on GPU | |
Patel | Review on Various Sorting Algorithm | |
Johnsson | Massively parallel computing: Data distribution and communication |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20081022 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20100223 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100302 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100430 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100601 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100830 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20100908 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20101005 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20101007 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4607796 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131015 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |