JP3675537B2 - 高速フーリエ変換を行うメモリ分散型並列計算機およびその方法 - Google Patents
高速フーリエ変換を行うメモリ分散型並列計算機およびその方法 Download PDFInfo
- Publication number
- JP3675537B2 JP3675537B2 JP31122495A JP31122495A JP3675537B2 JP 3675537 B2 JP3675537 B2 JP 3675537B2 JP 31122495 A JP31122495 A JP 31122495A JP 31122495 A JP31122495 A JP 31122495A JP 3675537 B2 JP3675537 B2 JP 3675537B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- storage means
- dimension
- fourier transform
- array
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Description
【産業上の利用分野】
本発明は高速フーリエ変換を行うメモリ分散型並列計算機システム、およびフーリエ変換処理方法に関する。
【0002】
【従来の技術とその問題点】
今日、科学技術計算等において、大規模な高速フーリエ変換(FFT:Fast Fourier Transformation )を計算するために、並列計算機システムがよく用いられている。FFTは、離散型フーリエ変換における項数がいくつかの因数に分解できる時、その性質を利用して必要な演算回数を削減した計算アルゴリズムである。特に、大規模な実フーリエ変換をVPP500等のベクトル分散並列計算機で行うとき、その性能を最大限に引き出すために、データ転送が少なく一括して計算できる方法が望まれている。
【0003】
従来の並列計算機によるFFT処理においては、フーリエ変換の度に、複数のプロセッシング・エレメント(以後、PE、またはプロセッサと記す)に分散したデータをアクセスする必要がある。このため、多量のデータ転送が行われ、処理効率が低下するという問題が生じる。
【0004】
実数のフーリエ変換を行うには、複素フーリエ変換の虚部を0として計算する方法と、2つの実数をそれぞれ複素数の実部、虚部とみなして、複素フーリエ変換を行う方法の2つがある。後者は、前者に比べて使用するメモリ量が約半分で済むという利点がある。これは、フーリエ変換した結果の複素数の中に共役関係を持つペアがあり、求めるべきデータを約半分に減らすことができることを利用したためである。
【0005】
実際には、変換される実数を複数の列に並べて、偶数列と奇数列(または偶数行と奇数行)のデータをそれぞれ実部および虚部とみなして複素フーリエ変換を行っており、最後に、その結果から必要な約半分の実フーリエ変換の結果を作り出している。残りの半分の結果は、共役関係を利用して求めることができる。しかしながら、偶数列と奇数列(または偶数行と奇数行)のデータは必ずしも同じプロセッサに格納されるとは限らず、フーリエ変換のアクセスパターンが全プロセッサにまたがるため、多量のデータ転送が必要となる。
【0006】
並列計算機においてはデータ転送に伴うオーバヘッドが大きいため、このような多量のデータ転送が生じると、ベクトル処理および並列処理の効率が悪くなる。
【0007】
本発明は、少ないデータ転送で効率良く実FFTを実行することのできるメモリ分散型並列計算機システムと、その方法を提供することを目的とする。
【0008】
【問題を解決するための手段】
図1は、本発明の並列計算機システムの原理図である。図1の並列計算機システムは、データを複数のプロセッサのメモリに分散配置し、プロセッサ間でデータ転送を行いながら高速フーリエ変換を実行することのできるメモリ分散型並列計算機システムであって、入力手段1、配列記憶手段2、第1の記憶手段3、第2の記憶手段4、計算手段5、転置手段6、および出力手段7を備える。
【0009】
入力手段1は、実数データを、第1次元と第2次元からなる第1の2次元配列として入力する。
配列記憶手段2は、第1の2次元配列の第1次元をプロセッサ数で分割して、第1次元が偶数であるような複数の部分配列を生成し、それらの複数の部分配列を上記複数のプロセッサに分散して記憶する。
【0010】
第1の記憶手段3は、上記複数の部分配列の各々を第1次元で2つに分割して得られる第1のデータと第2のデータのうち、第1のデータを記憶し、第2の記憶手段4は第2のデータを記憶する。
【0011】
計算手段5は、配列記憶手段2から第1のデータおよび第2のデータを第1の記憶手段3および第2の記憶手段4に移し、第1のデータを実部、第2のデータを虚部とみなして第2次元についての複素フーリエ変換を各プロセッサ内で行い、その複素フーリエ変換の第1の変換結果を求める。そして、第1の変換結果を利用して、上記実数データのフーリエ変換の第2の変換結果を求める。
【0012】
出力手段7は、上記第2の変換結果を出力する。
また、計算手段5は、上記第1の2次元配列の第2次元についての実フーリエ変換の第3の変換結果の一部を、上記第1の変換結果から求めて、その第3の変換結果の一部の実部および虚部からなる第2の2次元配列を配列記憶手段2に格納する。このとき、転置手段6は、配列記憶手段2に格納された第2の2次元配列を転置して第1の記憶手段3および第2の記憶手段4に格納することにより、上記第3の変換結果の一部の実部および虚部をそれぞれ第1の記憶手段3および第2の記憶手段4に格納する。そして、計算手段5は、第1の記憶手段3および第2の記憶手段4のデータを用いて、第2の2次元配列の第1次元についての複素フーリエ変換を各プロセッサ内で行い、その結果から上記第2の変換結果を求める。
【0013】
例えば、図1の入力手段1と出力手段7は、実施例における図2の入出力装置13に対応し、配列記憶手段2、第1の記憶手段3、第2の記憶手段4は、各プロセッサ11−1、11−2、・・・、11−M内のメモリ16に対応する。また、計算手段5と転置手段6は、各プロセッサ11−1、11−2、・・・、11−M内の処理部15に対応する。さらに、例えば、これらの各手段の機能をプログラム化して記憶したディスク装置等の記憶媒体もまた、これらの各手段に対応する。
【0014】
【作用】
入力手段1が入力した2次元実数データが、第1の2次元配列として、配列記憶手段2により複数のプロセッサに分散配置される。2次元実フーリエ変換を行うには、この第1の2次元配列を第1次元および第2次元についてそれぞれフーリエ変換すればよい。このとき、第1の2次元配列の第1次元の大きさを、例えば(2×プロセッサ数)の倍数とし、それをプロセッサ数で分割したときに、各プロセッサ内の部分配列の第1次元が偶数になるようにしておく。これにより、各部分配列を第1次元で2つに分割して格納することが可能になる。第1の記憶手段3は、各プロセッサ毎に、各部分配列を分割した2つデータのうち第1のデータを記憶し、第2の記憶手段4は第2のデータを記憶する。
【0015】
計算手段5は、第1の記憶手段3内の第1のデータを複素数の実部とみなし、第2の記憶手段4内の第2のデータを虚部とみなして、各プロセッサ内で複素数のフーリエ変換を行うことができる。これにより、分割されていない第2次元についての複素フーリエ変換が各プロセッサ内で行われ、第1の変換結果が得られる。第1のデータおよび第2のデータのそれぞれの第2次元についての実フーリエ変換の結果は、第1の変換結果から容易に得ることができ、次に第1次元についての複素フーリエ変換を行えば、上記実数データの2次元フーリエ変換の結果である第2の変換結果が得られる。
【0016】
このように、入力された2次元データを各プロセッサ内で2つの部分に分け、一方を実部、他方を虚部とみなすことにより、2組の実数データをまとめてフーリエ変換することができる。このとき、計算は各プロセッサ内で閉じて行われるため、データ転送に要する時間が節約され、処理が効率化される。
【0017】
尚、入力データが1次元実数データの場合は、これを2次元データに変換して配列記憶手段2に記憶させることにより、2次元データと同様に処理することが可能である。この場合は、第1次元についての複素フーリエ変換を行う前に、各プロセッサ内でローテーションの計算を行えばよい。また、3次元以上の次元の実数データのフーリエ変換についても、基本的には2次元データと同様の手法により処理することができる。
【0018】
また、第1の変換結果から第2の変換結果を得る時、計算手段5は、まず第1の2次元配列の第2次元についての実フーリエ変換の結果である第3の変換結果を、第1の変換結果から求める。このとき、第3の変換結果には一般に特定の共役関係があり、これを利用すれば、第3の変換結果の約半分は他の部分から計算できることが知られている。したがって、第3の変換結果については、その一部分(約半分)のみを求めればよい。求めた第3の変換結果の一部の実部および虚部は、第2の2次元配列として配列記憶手段2に格納される。
【0019】
しかし、このままでは、第2の2次元配列の第1次元が複数のプロセッサにまたがって配置されているため、残された第1次元についてのフーリエ変換を各プロセッサ内で閉じて行うことができない。そこで、転置手段6が第2の2次元配列を転置して、第1の記憶手段3および第2の記憶手段4に格納する。これにより、第3の変換結果の一部の実部および虚部が、それぞれ第1の記憶手段3および第2の記憶手段4に格納される。計算手段は、これらを1組の複素数として、第2の2次元配列の第1次元についての複素フーリエ変換を各プロセッサ内で行い、最終的に第2の変換結果を求める。得られた第2の変換結果は、入力された2次元実数データのフーリエ変換の結果を与えている。
【0020】
このように、第2次元についてのフーリエ変換の後に2次元配列を転置すれば、第1次元についてのフーリエ変換も複数のプロセッサで並列に処理することができる。1次元実数データの場合は、配列記憶手段2に格納された第2の2次元配列に対してローテーションの計算が行われ、その結果が転置されて、第1次元についてのフーリエ変換が行われる。
【0021】
【実施例】
以下、図面を参照しながら本発明の実施例を詳細に説明する。
図2は、実施例における並列計算機システムの構成図である。図2の並列計算機システムは、ネットワーク12により結合された複数のプロセッサ11−1、11−2、・・・、11−Mからなり、ネットワーク12に接続された入出力装置13を備える。ネットワーク12は、任意の2つのプロセッサ間でデータ転送を行えるように設計されており、例えばクロスバー・ネットワークである。入出力装置13は、例えばディスプレイやキーボードを備えた端末装置であり、フーリエ変換されるデータを入力し、変換結果を出力する。
【0022】
また、各プロセッサ11−1、11−2、・・・、11−Mは、それぞれ通信部14、処理部15、メモリ16、およびそれらを接続する内部バス17を備える。通信部14は、ネットワーク12を介して、他のプロセッサや入出力装置13との間でデータ転送を行う。メモリ16は、各プロセッサに割り当てられたデータや他のプロセッサから転送されたデータを記憶する。処理部15は、メモリ16に記憶されたデータを用いて、演算等の処理を行う。
【0023】
本実施例においては、図2の並列計算機システムにより行われる1次元、2次元、および3次元のフーリエ変換処理について順に説明する。最初に、フーリエ変換に必要となる数学的な前提について述べる。
【0024】
1次元の離散フーリエ変換は次式で与えられる。
【0025】
【数1】
【0026】
ただし、
ωN ≡exp(−2πi/N) …(2)
とする。今、N=p・qと因数分解できるとすると、
n=n1+n2・p, …(3)
(n1=0,1,...,p−1,n2=0,1,...,q−1)
j=j1+j2・q, …(4)
(j1=0,1,...,q−1,j2=0,1,...,p−1)
x(n1,n2)=xn , …(5)
f(j1,j2)=fj …(6)
とおくことができる。(3)、(4)、(5)、(6)式を(1)式に代入して、nについての和をn1とn2についての和に書き換えると、
【0027】
【数2】
【0028】
となる。このように、離散フーリエ変換の項数Nが適当な因数に分解できるときには、1次元のデータを2次元データとみなして処理することができる。並列計算機による処理においては、例えばx(n1,n2)の第1次元を複数のプロセッサに分割して配置する。このとき、(7)式は次の4段の処理に分けられる。
【0029】
【数3】
【0030】
(8)式は2次元配列x(n1,n2)の添字n2についてのフーリエ変換を表し、(9)式はY1(n1,j1)に回転因子ωN n1j1を乗算する計算(ローテーション)を表し、(10)式は2次元配列Y2(n1,j1)の転置を表し、(11)式はY3(j1,n1)の添字n1についてのフーリエ変換を表す。第3段で転置を行うのは、常に2次元配列の第2次元についてのフーリエ変換を行うようにするためである。ここでは、2次元配列の第2次元は分割されていないので、第2次元についてのフーリエ変換は各プロセッサ内で独立に行うことができる。
【0031】
次に、実1次元フーリエ変換を複素フーリエ変換と組み合わせて行う方法について説明する。変換すべき実データを{x1n }と{x2n }(n=0,...,Q−1)とに分け、それぞれを複素数の実部と虚部とみなして、
zn =x1n +ix2n …(12)
とおく。また、zn 、x1n 、x2n のフーリエ変換の結果を、それぞれ{αz j }、{αx1 j }、{αx2 j }とおくと、
【0032】
【数4】
【0033】
となる。(14)、(15)式のαx1 j 、αx2 j は、(13)式のαz j を用いて、次のように表される。
【0034】
【数5】
【0035】
ここで、α* はαの複素共役を表し、Re(α)、Im(α)はそれぞれαの実部、虚部を表す。したがって、{αz j }が求まれば、(16)、(17)式に従って{αx1 j }、{αx2 j }を計算することができるが、実フーリエ変換の結果には、
αx1 Q-j =(αx1 j )* , j=1,...,Q−1 …(20)
αx2 Q-j =(αx2 j )* , j=1,...,Q−1 …(21)
なる共役関係があるため、すべてのjについてαx1 j 、αx2 j を求める必要はない。実際には、最初の(Q/2+1)個のαx1 j とαx2 j について、実フーリエ変換の結果を求めれば充分である。ただし、Q/2はQを2で割った時の整数商(剰余は切り捨て)を表す。以下、特に断らない限り、数式に現れる除算は整数商を表すものとする。
【0036】
以上の知識を前提として、1次元実FFTの方法を説明する。図3は、N=p・qと分解できるN個の実数を(1)式に従って変換する1次元実FFTのフローチャートである。図3において処理が開始されると、まず入出力装置13は与えられた1次元データを取り込み、それをN=p×qの2次元配列とみなして、各プロセッサ(PE)に所定数の行ベクトルを均等に割り当てる(ステップS1)。割当てられた行ベクトルは、各プロセッサのメモリ16に格納される。
【0037】
図4は、このときの2次元データを格納する2次元格納配列Aの分割方法を示している。図4では、簡単のためプロセッサ数を4(PE1、PE2、PE3、PE4)としているが、より一般的にはそれをprocと書くことにする。このとき、Aの第1次元(行の次元)の大きさs1を、
s1=2×proc×k1, …(22)
k1=(p+2×proc−1)/(2×proc) …(23)
と定め、第1次元をproc台のプロセッサにより均等に分割したとき、各プロセッサに格納される部分の行数が偶数になるようにする。また、Aの第2次元の大きさは、
k2=(q/2+1)×2 …(24)
以上とする。図4では、Aの第2次元の大きさはk2となっており、配列AはA(s1,k2)と表される。次に、
k3=((q/2+proc)/proc)×proc …(25)
として、Aの転置用の格納配列B(2×k3,s1)を用意する。Bは同じ大きさの2つの配列BR(k3,s1)とBI(k3,s1)からなる。BR、BIの第1次元の大きさk3は、Aの第2次元の大きさk2の半分をproc台のプロセッサで分割できるように、k2/2=(q/2+1)を修正したものである。したがって、
2×k3≧k2=(q/2+1)×2 …(26)
なる関係がある。
【0038】
そして、A(s1,k2)、BR(k3,s1)、BI(k3,s1)の第1次元を各プロセッサで均等に分割し、分割された各プロセッサの部分をa(2×k1,k2)、br(k3/proc,s1)、bi(k3/proc,s1)とする。
【0039】
次に、各プロセッサ内で、(8)式に対応する1段目の処理を並列に行う。ただし、このときメモリの使用領域を節約するために、各プロセッサに割り当てられた行ベクトルを前半と後半の2組に分け、一方を実部、他方を虚部として、複素数のフーリエ変換を行う。
【0040】
まず、各プロセッサは行ベクトルのペアを作り、一方を実部、他方を虚部として別々の領域に格納する(ステップS2)。具体的には、格納領域br、biをそれぞれ格納配列br(k1,2×k3)、bi(k1,2×k3)として利用し、a(1:k1,k2)をbr(k1,1:k2)にコピーし、a(k1+1:2×k1,k2)をbi(k1,1:k2)にコピーする。
【0041】
図4では、4台のプロセッサPE1、PE2、PE3、PE4の各々に割り当てられたa(2×k1,k2)が、前半部分と後半部分に分割されている。PE1のデータはR1とI1に分けられ、PE2のデータはR2とI2に分けられ、PE3のデータはR3とI3に分けられ、PE4のデータはR4とI4に分けられる。そして、これらのデータが、図5に示すように、配列BR、BIにコピーされる。図5において、R1、R2、R3、R4は実部としてBRに格納され、I1、I2、I3、I4は虚部としてBIに格納されている。このとき、BR、BIは、それぞれBR(s1/2,2×k3)、BI(s1/2,2×k3)なる配列として利用される。
【0042】
次に、br(k1,1:k2)の行ベクトルと、対応するbi(k1,1:k2)の行ベクトルとを束ねて、各プロセッサで複素数のフーリエ変換を行う(ステップS3)。つまり、br(k1,1:k2)の1つの行ベクトルの各要素を(12)式のx1n とみなし、対応するbi(k1,1:k2)の行ベクトルの要素を(12)式のx2n とみなして、複素数zn に対するフーリエ変換を(13)式により計算する。ただし、このときQ=qとする。
【0043】
そして、(16)〜(19)式により、最初の(q/2+1)個の実フーリエ変換の結果を求め、その実部および虚部をそれぞれa(2×k1,1:q/2+1)およびa(2×k1,q/2+2:k2)に格納する(ステップS4)。図6は、このときの格納方法を示している。図6において、Aの第2次元の前半が実部に割り当てられ、後半が虚部に割り当てられていることが分かる。例えばプロセッサPE1内では、図4のR1部分の行ベクトルの実フーリエ変換結果のうち、最初の(q/2+1)個が実際に求められ、それらの実部がCR1に格納され、虚部がDR1に格納される。また、図4のI1部分の行ベクトルの実フーリエ変換結果のうち、最初の(q/2+1)個が実際に求められ、それらの実部がCI1に格納され、虚部がDI1に格納される。他のプロセッサの領域CR2、DR2、CI2、DI2、CR3、DR3、CI3、DI3、CR4、DR4、CI4、DI4についても同様である。
【0044】
図4、図5のような格納方法によれば、変換される複素数の実部と虚部が同じプロセッサ内にあるので、複素フーリエ変換を各プロセッサ内で独立に行うことができ、余分なデータ転送を行う必要がない。また、長さqの実データのペアに対して、一方を実部、他方を虚部とみなして複素フーリエ変換を行った結果から、(q/2+1)個の実フーリエ変換の結果を計算する方法をベースにして、1次元のフーリエ変換を束ねて行うことで、プロセッサのベクトル性能を引き出すことができる。
【0045】
次に、各プロセッサ内で(9)式に対応する2段目の処理を並列に行って、ローテーションを計算する(ステップS5)。この計算結果は再び配列Aに格納される。
【0046】
この後、(10)式に対応する3段目の処理を行って、配列Aのp×(q/2+1)×2のデータをブロック(小領域)に分割し、ブロックレベルで転置して配列Bに格納する(ステップS6)。このとき、格納領域BR、BIはそれぞれ配列BR(k3,s1)、BI(k3,s1)として利用され、その第1次元に関して分割されている。そして、プロセッサ間のデータ転送により、A(p,1:q/2+1)のデータがBR(1:q/2+1,p)に転置され、A(p,q/2+2:(q/2+1)×2)のデータがBI(1:q/2+1,p)に転置される。
【0047】
図7は、ステップS6で行われる行列の転置処理のフローチャートである。図7を参照しながら、配列Aの実部を配列BRに転置する処理について説明する。図7において処理が開始されると、まず配列Aの実部、配列BRをメッシュで区切る(ステップS11)。これにより、各プロセッサ内にあるAの実部とBRの部分が、それぞれプロセッサ数procに相当する数のブロックに分割される。図8は、転置前の配列Aの実部(または虚部)の分割例を示しており、図9は、転置後のデータを格納する配列BR(またはBI)の分割例を示している。
【0048】
図8において、Aの実部のうちプロセッサPE1内にあるデータは、A11、A12、A13、A14の4つのブロックに分割されている。同様に、プロセッサPE2内のデータはブロックA21、A22、A23、A24に分割され、プロセッサPE3内のデータはブロックA31、A32、A33、A34に分割され、プロセッサPE4内のデータはブロックA41、A42、A43、A44に分割される。また、図9において、BRのうちプロセッサPE1内にあるデータは、B11、B12、B13、B14の4つのブロックに分割されている。同様に、プロセッサPE2内のデータはブロックB21、B22、B23、B24に分割され、プロセッサPE3内のデータはブロックB31、B32、B33、B34に分割され、プロセッサPE4内のデータはブロックB41、B42、B43、B44に分割される。
【0049】
次に、各プロセッサで、K=(そのプロセッサの番号)、J=K、#ct=1とおき(ステップS12)、ブロックAJKの転置行列AJK T を求めて、ブロックBKJに格納する(ステップS13)。ここで、BKJが同じプロセッサ内にあればAJK T をそこに格納し、BKJが他のプロセッサ内にあるときはデータ転送を行う。そして、K=mod(K,proc)+1、#ct=#ct+1とおき(ステップS14)、#ctとprocを比較する(ステップS15)。ここで、mod(K,proc)は、Kをprocで割った時の剰余を意味する。#ctがprocを超えていなければステップS13以降の処理を繰り返し、#ctがprocを超えると処理を終了する。
【0050】
例えば、プロセッサPE1の場合は、まず最初にA11 T を求めて同じプロセッサ内のB11に格納する(ステップS13)。次に、K=mod(1,4)+1=2となるので(ステップS14)、A12 T を求める(ステップS13)。ところが、対応する格納先のB21はプロセッサPE2内にあるため、A12 T をプロセッサPE2に転送する。同様にして、A13 T 、A14 T を順次求めて、プロセッサPE3のB31、PE4のB41にそれぞれ転送する。すべてのプロセッサが同様の処理を行った結果、BRの内容は図10に示すようになる。図10において、プロセッサPE1内にはA11 T 、A21 T 、A31 T 、A41 T が格納され、プロセッサPE2内にはA12 T 、A22 T 、A32 T 、A42 T が格納され、プロセッサPE3内にはA13 T 、A23 T 、A33 T 、A43 T が格納され、プロセッサPE4内にはA14 T 、A24 T 、A34 T 、A44 T が格納されている。
【0051】
ステップS13においては、proc台のプロセッサの間でデータ転送が発生するが、VPP500のように各プロセッサに対して同時に読込みと書込みができる並列計算機では、配列の対角方向に並ぶブロック要素について並列にデータ転送を行うことができる。例えば、図8の斜線部分のブロックA12、A23、A34、A41の転置データA12 T 、A23 T 、A34 T 、A41 T は、図9の斜線部分の各ブロックに並列に転送される。このような並列転置処理を行うことにより、データ転送のコストが軽減される。
【0052】
配列Aの虚部を配列BIに転置する場合も、同様の処理を行う。このとき、Aの虚部は図8のように分割され、BIは図9のように分割される。ここで、配列Aを転置しておくことにより、配列Aの列ベクトルに対するフーリエ変換を配列Bの行ベクトルに対するフーリエ変換に置き換えることができ、次の4段目の処理を各プロセッサで並列に行うことができる。
【0053】
そして、各プロセッサで(11)式に対応する4段目の処理を並列に行って(ステップS7)、処理を終了する。ステップS7では、各プロセッサは行列の転置結果を用いて、メモリ16内の長さpの各行ベクトルに対する複素FFTを行う。これにより、与えられたN=p×q個の実数のフーリエ変換の結果のうち、p×(q/2+1)個が得られる。残りのp×(q−(q/2+1))個の実フーリエ変換の値は得られた結果と共役関係にあるため、これですべての結果を求めたことになる。
【0054】
次に、図11から図16までを参照しながら、1次元実FFTの具体例について説明する。
図11は、入力データを2次元の格納配列に収容して4台のプロセッサに分散配置した例を示している。図11では、N=300個の実数が1次元データとして入力され、p=20、q=15として、20×15個の2次元データx(n1,n2)(n1=1,2,...,20, n2=1,2,...,15)として分散配置される(ステップS1)。このとき、(22)、(23)、(24)、(25)式よりs1=24、k1=3、k2=16、k3=8となり、20×15個のデータを格納する配列Aの大きさはs1×k2=24×16となる。また、Aの第1次元を4台のプロセッサで分割するので、1つのプロセッサに割り当てられる格納配列の大きさは6×16となり、その行ベクトルの数(6)は偶数になる。ここでは、プロセッサPE1、PE2、PE3のすべての行ベクトルとプロセッサPE4の2本の行ベクトルにデータが格納されている。そして、配列Aのデータを格納しない部分の要素(図11の*印)の値は、必要のないオーバフローやアンダーフローを避けるために0にしておく。
【0055】
こうして配列Aに格納されたデータは、各プロセッサ内で別の格納配列Bにコピーされる(ステップS2)。図12は、図11のデータがコピーされた配列Bを示している。ここでは、配列Bはs1×(2×k3)=24×16の配列として利用され、それぞれ12×16の大きさを持つ配列BRとBIに分けられる。そして、それらのうちのそれぞれ3×16の部分が各プロセッサに配置される。各プロセッサに割り当てられたAの6本の行ベクトルのうち、上半分の3本はBRの対応する領域にコピーされ、下半分の3本はBIの対応する領域にコピーされる。
【0056】
次に、各プロセッサ内で、BRに格納されたデータを実部とみなし、BI内でそれと同じ位置に格納されたデータを虚部とみなして複素数をつくり、そのフーリエ変換を計算する(ステップS3)。例えば、プロセッサPE1内の1行目の行ベクトルについては、x10 =x(1,1),x11 =x(1,2),...,x114=x(1,15)、かつ、x20 =x(4,1),x21 =x(4,2),...,x214=x(4,15)として、(12)式に代入し、15個の複素数zn を作る。そして、Q=15として(13)式によりそのフーリエ変換を求め、その結果得られる複素数αz j (j=0,1,2,...,14)の実部をBRに格納し、虚部をBIに格納する。他の行ベクトルについても同様である。
【0057】
図13は、フーリエ変換の結果を格納した配列BR、BIを示している。図13において、BR内のX(n1,n2)(n1=1,2,3,7,8,9,13,14,15,19,20, n2=1,...,15)は、各フーリエ変換結果の実部を表し、BI内のX(n1,n2)(n1=4,5,6,10,11,12,16,17,18, n2=1,...,15)は、各フーリエ変換結果の虚部を表している。例えば、図12のx(1,n2)を実部、x(4,n2)を虚部として変換した結果得られた複素数の実部がX(1,n2)、虚部がX(4,n2)である。
【0058】
次に、BR、BIに格納された複素フーリエ変換の結果を利用して、(16)〜(19)式により実フーリエ変換の結果αx1 j 、αx2 j を求め、配列Aに格納する(ステップS4)。ただし、この場合は(20)、(21)式の共役関係があるので、jの最初の15/2+1=8個の値についてαx1 j 、αx2 j を求めればよい。こうして求められたx(n1,n2)のn2に関するフーリエ変換の結果をα(n1,j2)(n1=1,...,20, j2=1,...,8)と書くことにする。例えば、x(1,1),x(1,2),...,x(1,15)のフーリエ変換の結果のうち、約半分に当たるα(1,1),α(1,2),...,α(1,8)が求められ、同様に、x(4,1),x(4,2),...,x(4,15)のフーリエ変換の結果のうち、約半分に当たるα(4,1),α(4,2),...,α(4,8)が求められる。これらの実フーリエ変換の結果は、図14に示すように配列Aに格納される。図14において、α(n1,j2)の実部Re(α(n1,j2))はAの左半分に格納され、虚部Im(α(n1,j2))はAの右半分に格納されている。
【0059】
そして、各プロセッサ内で、(9)式に準じてα(n1,j2)に回転因子を乗算し、その結果をα′(n1,j2)として再び配列Aに格納する(ステップS5)。図15は、α′(n1,j2)を格納した配列Aを示している。図15においては、図14の場合と同様に、α′(n1,j2)の実部Re(α′(n1,j2))はAの左半分に格納され、虚部Im(α′(n1,j2))はAの右半分に格納されている。
【0060】
次に、プロセッサPE1〜PE4は、行列Aを図7の処理によりブロックレベルで転置して、配列BR、BIに格納する(ステップS6)。このとき、Aの左半分と右半分はそれぞれ図8に示すように分割され、対角方向に並ぶ4つのブロックが転置されて並列転送される。このような並列転送を繰り返すことにより、行列全体が転置される。図16は、転置後のデータを格納した配列BR、BIを示している。ここでは、BR、BIはそれぞれ8×24の配列として利用され、各プロセッサはBR、BIのそれぞれの2×24の部分を格納している。例えば、図15のプロセッサPE1の1行目の行ベクトルRe(α′(1,1)),...,Re(α′(1,8)),Im(α′(1,1)),...,Im(α′(1,8))のうち、Re(α′(1,1)),...,Re(α′(1,8))はBRの1列目に格納され、Im(α′(1,1)),...,Im(α′(1,8))はBIの1列目に格納される。
【0061】
次に、各プロセッサ内で転置後の行ベクトルを使用して、α′(n1,j2)(n1=1,...,20)のn1に関するフーリエ変換を計算する(ステップS7)。このときの計算方法は、ステップS3の場合と同様である。計算に必要なα′(n1,j2)の実部と虚部は、それぞれBRとBI内の対応する位置に格納されている。そして、各行ベクトルについて得られた20個のフーリエ変換の結果は、実部と虚部に分けてそれぞれBRとBIに格納される。こうして、最終的に、図11の20×15個の実数に対する1次元実FFTの結果のうち、最初の約半分が求められる。残りの部分は、得られた結果の複素共役を取ることにより求めることができる。
【0062】
次に、2次元実FFTの方法について説明する。p×qの2次元データの離散フーリエ変換は次式で与えられる。
【0063】
【数6】
【0064】
(27)式を(7)式と比べると、回転因子の乗算を除いて右辺の計算手順が同じであることが分かる。ただし、xn1n2は(7)式のx(n1,n2)に対応し、fj1j2はf(j2,j1)に対応している。したがって、並列計算機により(27)式を計算するには、図3から3段目の処理を除いた処理を行い、得られた2次元配列を転置すればよい。
【0065】
図17は、p×q個の2次元データを(27)式に従って変換する2次元実FFTのフローチャートである。図17において処理が開始されると、まず入出力装置13は与えられたp×qの2次元データを取り込み、これをp×qの2次元配列として、各プロセッサに所定数の行ベクトルを均等に割り当てる(ステップS21)。割当てられた行ベクトルは、図4と同様にして、各プロセッサのメモリ16に格納される。
【0066】
次に、各プロセッサ内で、1次元実FFTの場合と同様にして、(8)式に対応する1段目の処理を並列に行う。まず、各プロセッサは行ベクトルのペアを作り、一方を実部、他方を虚部として、図5と同様の格納領域BR、BIにそれぞれコピーする(ステップS22)。次に、各プロセッサで、BRの行ベクトルと、対応するBIの行ベクトルとを束ねて、(13)式により複素数のフーリエ変換を行う(ステップS23)。そして、その結果から(16)〜(19)式により、最初の(q/2+1)個の実フーリエ変換の結果を求め、その実部および虚部を、図6と同様にして配列Aに格納する(ステップS24)。
【0067】
次に、2段目の処理を行って、配列Aのp×(q/2+1)×2のデータをブロック(小領域)に分割し、ブロックレベルで転置して配列Bに格納する(ステップS25)。このときの転置処理の方法は、図7〜10に示す方法と同様である。
【0068】
そして、各プロセッサで3段目の処理を並列に行って、行列の転置結果における長さpの各行ベクトルに対する複素FFTを計算する(ステップS26)。この結果得られた複素数の実部と虚部は、それぞれBR(1:q/2+1,p)とBI(1:q/2+1,p)に格納される。
【0069】
次に、BRとBIに格納された配列をブロックレベルで再び転置して、配列Aに格納し(ステップS27)、処理を終了する。このとき、ステップS25と同様のデータ転送により、BR(1:q/2+1,p)のデータがA(p,1:q/2+1)に転置され、BI(1:q/2+1,p)のデータがA(p,q/2+2:(q/2+1)×2)に転置される。
【0070】
こうして、与えられたp×q個の実数のフーリエ変換の結果のうち、p×(q/2+1)個が得られる。2次元実フーリエ変換の結果にも1次元実フーリエ変換の場合と同様の共役関係があるため、残りのp×(q−(q/2+1))個の結果は得られた結果から求められる。
【0071】
次に、2次元実FFTの拡張として、3次元実FFTの方法について説明する。p×q×rの3次元データの離散フーリエ変換は次式で与えられる。
【0072】
【数7】
【0073】
(28)式は、(27)式の3次元への拡張となっているため、3次元実FFTは基本的に2次元実FFTと同様にして行う。ただし、増えた次元に相当するフーリエ変換処理が追加される。
【0074】
図18は、p×q×r個の3次元データを(28)式に従って変換する3次元実FFTのフローチャートである。図18において処理が開始されると、まず入出力装置13は与えられた3次元データを取り込み、それをp×q×rの3次元配列とする。そして、この3次元配列を第1次元で分割して、各プロセッサに所定数の第3次元のベクトルを均等に割り当てる(ステップS31)。割当てられた第3次元のベクトルは、各プロセッサのメモリ16に格納される。
【0075】
図19は、このときの3次元データを格納する3次元格納配列Aの分割方法を示している。図19では、簡単のためプロセッサ数を4(PE1、PE2、PE3、PE4)としているが、より一般的にはそれをprocと書くことにする。このとき、Aの第1次元(行の次元)の大きさs1を、(22)、(23)式と同様に、
s1=2×proc×k1, …(29)
k1=(p+2×proc−1)/(2×proc) …(30)
と定め、第1次元をproc台のプロセッサにより均等に分割したとき、各プロセッサに格納される部分の行数が偶数になるようにする。また、Aの第2次元の大きさはqとし、第3次元の大きさは、
k4=(r/2+1)×2 …(31)
以上とする。図19では、Aの第3次元の大きさはk4となっており、配列AはA(s1,q,k4)と表される。次に、
k5=((r/2+proc)/proc)×proc …(32)
として、Aの第1次元と第3次元の転置用の格納配列B(2×k5,q,s1)を用意する。Bは同じ大きさの2つの配列BR(k5,q,s1)とBI(k5,q,s1)からなる。BR、BIの第1次元の大きさk5は、Aの第3次元の大きさk4の半分をproc台のプロセッサで分割できるように、k4/2=(r/2+1)を修正したものである。したがって、
2×k5≧k4=(q/2+1)×2 …(33)
なる関係がある。
【0076】
そして、A(s1,q,k4)、BR(k5,q,s1)、BI(k5,q,s1)の第1次元を各プロセッサで均等に分割し、分割された各プロセッサの部分をa(2×k1,q,k4)、br(k5/proc,q,s1)、bi(k5/proc,q,s1)とする。
【0077】
次に、各プロセッサ内で、1段目の処理を並列に行う。ただし、このときメモリの使用領域を節約するために、各プロセッサに割り当てられた第3次元のベクトルを前半と後半の2組に分け、一方を実部、他方を虚部として、複素数のフーリエ変換を行う。
【0078】
まず、各プロセッサは第3次元のベクトルのペアを作り、一方を実部、他方を虚部として別々の領域に格納する(ステップS32)。具体的には、格納領域br、biをそれぞれ格納配列br(k1,q,2×k5)、bi(k1,q,2×k5)として利用し、a(1:k1,q,k4)をbr(k1,q,1:k4)にコピーし、a(k1+1:2×k1,q,k4)をbi(k1,q,1:k4)にコピーする。
【0079】
図19では、4台のプロセッサPE1、PE2、PE3、PE4の各々に割り当てられたa(2×k1,q,k4)が、前半部分と後半部分に分割されている。PE1のデータはR1とI1に分けられ、PE2のデータはR2とI2に分けられ、PE3のデータはR3とI3に分けられ、PE4のデータはR4とI4に分けられる。そして、これらのデータが、図20に示すように、配列BR、BIにコピーされる。図20において、R1、R2、R3、R4は実部としてBRに格納され、I1、I2、I3、I4は虚部としてBIに格納されている。このとき、BR、BIは、それぞれBR(s1/2,q,2×k5)、BI(s1/2,q,2×k5)なる配列として利用される。
【0080】
次に、br(k1,q,1:k4)の第3次元のベクトルと、対応するbi(k1,q,1:k4)の第3次元のベクトルとを束ねて、各プロセッサで複素数のフーリエ変換を行う(ステップS33)。つまり、br(k1,q,1:k4)の1つの第3次元方向のベクトルの各要素を(12)式のx1n とみなし、対応するbi(k1,q,1:k4)の第3次元方向のベクトルの要素を(12)式のx2n とみなして、複素数zn に対するフーリエ変換を(13)式により計算する。ただし、このときQ=rとする。
【0081】
そして、(16)〜(19)式により、最初の(r/2+1)個の実フーリエ変換の結果を求め、その実部および虚部をそれぞれa(2×k1,q,1:r/2+1)およびa(2×k1,q,r/2+2:k4)に格納する(ステップS34)。図21は、このときの格納方法を示している。図21において、Aの第3次元の前半が実部に割り当てられ、後半が虚部に割り当てられていることが分かる。例えばプロセッサPE1内では、図20のR1部分のベクトルの実フーリエ変換結果のうち、最初の(r/2+1)個が実際に求められ、それらの実部がCR1に格納され、虚部がDR1に格納される。また、図20のI1部分のベクトルの実フーリエ変換結果のうち、最初の(r/2+1)個が実際に求められ、それらの実部がCI1に格納され、虚部がDI1に格納される。他のプロセッサの領域CR2、DR2、CI2、DI2、CR3、DR3、CI3、DI3、CR4、DR4、CI4、DI4についても同様である。
【0082】
次に、各プロセッサ内で、a(2×k1,q,1:r/2+1)の第2次元方向のベクトルと、a(2×k1,q,r/2+2:k4)の第2次元方向のベクトルとを束ねて、長さqの複素数のフーリエ変換を行う(ステップS35)。そして、その結果の実部および虚部を、それぞれa(2×k1,q,1:r/2+1)およびa(2×k1,q,r/2+2:k4)に格納する。
【0083】
次に、2段目の処理を行って、配列Aのp×q×(r/2+1)×2のデータをブロックに分割し、ブロックレベルで第1次元と第3次元の間の転置を行い、配列Bに格納する(ステップS36)。このとき、格納領域BR、BIはそれぞれ配列BR(k5,q,s1)、BI(k5,q,s1)として利用され、その第1次元に関して分割されている。そして、プロセッサ間のデータ転送により、A(p,q,1:r/2+1)のデータがBR(1:r/2+1,q,p)に転置され、A(p,q,r/2+2:(r/2+1)×2)のデータがBI(1:r/2+1,q,p)に転置される。この時行われる転置処理は、図7と同様である。ただし、ここでは図7におけるBKJ、AJK T は、3次元配列を第1次元および第3次元に関して分割したブロックを意味する。図22は、転置前の配列Aの実部または虚部の分割例を示しており、図23は、転置後のデータを格納する配列BRまたはBIの分割例を示している。
【0084】
図22において、Aの実部(または虚部)のうちプロセッサPE1内にあるデータは、A11、A12、A13、A14の4つのブロックに分割されている。同様に、プロセッサPE2内のデータはブロックA21、A22、A23、A24に分割され、プロセッサPE3内のデータはブロックA31、A32、A33、A34に分割され、プロセッサPE4内のデータはブロックA41、A42、A43、A44に分割される。また、図23において、BR(またはBI)のうちプロセッサPE1内にあるデータは、B11、B12、B13、B14の4つのブロックに分割されている。同様に、プロセッサPE2内のデータはブロックB21、B22、B23、B24に分割され、プロセッサPE3内のデータはブロックB31、B32、B33、B34に分割され、プロセッサPE4内のデータはブロックB41、B42、B43、B44に分割される。
【0085】
図24は、転置処理を行った後のBR(またはBI)の内容を示している。図24において、プロセッサPE1内にはA11 T 、A21 T 、A31 T 、A41 T が格納され、プロセッサPE2内にはA12 T 、A22 T 、A32 T 、A42 T が格納され、プロセッサPE3内にはA13 T 、A23 T 、A33 T 、A43 T が格納され、プロセッサPE4内にはA14 T 、A24 T 、A34 T 、A44 T が格納されている。
【0086】
3次元の場合も、図8に示す2次元配列のデータ転送と同様に、図22の配列の対角方向に並ぶブロック要素について並列にデータ転送を行う。例えば、図22の斜線部分のブロックA12、A23、A34、A41の転置データA12 T 、A23 T 、A34 T 、A41 T は、図24の斜線部分の各ブロックに並列に転送される。
【0087】
そして、各プロセッサで3段目の処理を並列に行って、配列の転置結果における長さpの各第3次元のベクトルに対する複素FFTを計算する(ステップS37)。この結果得られた複素数の実部と虚部は、それぞれBR(1:r/2+1,q,p)とBI(1:r/2+1,q,p)に格納される。
【0088】
次に、BRとBIに格納された配列の第1次元と第3次元の間の転置を、再びブロックレベルで行って配列Aに格納し(ステップS38)、処理を終了する。このとき、ステップS36と同様のデータ転送により、BR(1:r/2+1,q,p)のデータがA(p,q,1:r/2+1)に転置され、BI(1:r/2+1,q,p)のデータがA(p,q,r/2+2:(r/2+1)×2)に転置される。
【0089】
こうして、与えられたp×q×r個の実数のフーリエ変換の結果のうち、p×q×(r/2+1)個が得られる。3次元実フーリエ変換の結果にも1次元実フーリエ変換の場合と同様の共役関係があるため、残りのp×q×(r−(r/2+1))個の結果は得られた結果から求められる。
【0090】
以上説明したように、本実施例では、ベクトル計算機向けの1〜3次元実フーリエ変換を、2つの実数列をそれぞれ実部および虚部とみなした複素フーリエ変換に置き換え、並列計算機の各プロセッサでその結果の約半分を取り出して、最終的にすべての結果を求めている。尚、本発明は、1〜3次元実フーリエ変換に限らず、より高い次元の離散フーリエ変換にも容易に拡張することができる。例えば、D次元の実フーリエ変換を計算するには、図18の3次元実フーリエ変換の処理のステップS35において、(D−2)次元部分の複素フーリエ変換を続けて行えばよい。
【0091】
【発明の効果】
本発明によれば、メモリ分散型並列計算機システムによる実フーリエ変換処理において、変換される実数配列の1つの次元の大きさが各プロセッサ内で偶数になるように、データが分割配置される。これにより、各プロセッサ内で実数ベクトルのペアを作ることが可能になり、一方を実部、他方を虚部とみなして、他の次元についてのフーリエ変換をそのプロセッサ内で閉じて行うことができる。したがって、並列計算機の並列性およびベクトル性能を効率良く利用できる。
【0092】
また、並列転置と組み合わせることでデータ転送のコストがさらに削減され、処理が効率化される。
【図面の簡単な説明】
【図1】本発明の原理図である。
【図2】実施例の並列計算機システムの構成図である。
【図3】1次元実FFTのフローチャートである。
【図4】2次元配列の分割を示す図である。
【図5】2次元配列のコピー領域を示す図である。
【図6】実フーリエ変換の結果を2次元配列に格納する方法を示す図である。
【図7】行列の転置処理のフローチャートである。
【図8】転置前の2次元配列を示す図である。
【図9】転置後の2次元配列を示す図である。
【図10】転置後の2次元配列の内容を示す図である。
【図11】2次元配列の例を示す図である。
【図12】コピーされた2次元配列の例を示す図である。
【図13】複素フーリエ変換後の2次元配列の例を示す図である。
【図14】実フーリエ変換の結果の格納例を示す図である。
【図15】ローテーション計算後の2次元配列の例を示す図である。
【図16】転置後の2次元配列の例を示す図である。
【図17】2次元実FFTのフローチャートである。
【図18】3次元実FFTのフローチャートである。
【図19】3次元配列の分割を示す図である。
【図20】3次元配列のコピー領域を示す図である。
【図21】実フーリエ変換の結果を3次元配列に格納する方法を示す図である。
【図22】転置前の3次元配列を示す図である。
【図23】転置後の3次元配列を示す図である。
【図24】転置後の3次元配列の内容を示す図である。
【符号の説明】
1 入力手段
2 配列記憶手段
3 第1の記憶手段
4 第2の記憶手段
5 計算手段
6 転置手段
7 出力手段
11−1,11−2,11−M プロセッサ
12 ネットワーク
13 入出力装置
14 通信部
15 処理部
16 メモリ
17 内部バス
Claims (12)
- データを複数のプロセッサのメモリに分散配置し、プロセッサ間でデータ転送を行いながら高速フーリエ変換を実行することのできるメモリ分散型並列計算機システムにおいて、
実数データを、第1次元と第2次元からなる第1の2次元配列として入力する入力手段と、
前記第1の2次元配列の第1次元をプロセッサ数で分割して、第1次元が偶数であるような複数の部分配列を生成し、該複数の部分配列を前記複数のプロセッサに分散して記憶する配列記憶手段と、
前記複数の部分配列の各々を前記第1次元で2つに分割して得られる第1のデータと第2のデータのうち、該第1のデータを記憶する第1の記憶手段と、
前記第2のデータを記憶する第2の記憶手段と、
2次元配列を転置する転置手段と
前記配列記憶手段から前記第1のデータおよび第2のデータを前記第1の記憶手段および第2の記憶手段に移し、該第1のデータを実部、該第2のデータを虚部とみなして前記第2次元についての複素フーリエ変換を各プロセッサ内で行い、該複素フーリエ変換の第1の変換結果から前記第1の2次元配列の第2次元についての実フーリエ変換の変換結果の一部を求め、該変換結果の一部の実部および虚部からなる第2の2次元配列を前記配列記憶手段に格納する計算手段と、
出力手段を備え、
前記転置手段は、該配列記憶手段に格納された該第2の2次元配列を転置して前記第1の記憶手段および第2の記憶手段に格納することにより、前記変換結果の一部の実部および虚部をそれぞれ該第1の記憶手段および第2の記憶手段に格納し、
前記計算手段は該第1の記憶手段および第2の記憶手段のデータを用いて、該第2の2次元配列の第1次元についての複素フーリエ変換を各プロセッサ内で行って前記実数データのフーリエ変換の第2の変換結果を求め、
前記出力手段は該第2の変換結果を出力することを特徴とする並列計算機。 - 前記転置手段は、前記第2の2次元配列をブロック単位に分割して、プロセッサ間で該ブロック単位の並列データ転送を行うことにより、該第2の2次元配列を転置することを特徴とする請求項1記載の並列計算機。
- 前記転置手段は、前記第2の2次元配列の第1次元についての複素フーリエ変換の結果得られる第3の2次元配列を再び転置し、前記第2の変換結果として前記配列記憶手段に格納することを特徴とする請求項1記載の並列計算機。
- 前記入力手段は、前記実数データが1次元データのとき、該1次元データを前記第1の2次元配列の形式に変換して入力することを特徴とする請求項1記載の並列計算機。
- 前記実フーリエ変換変換結果の一部に回転因子を乗算し、乗算結果の実部および虚部からなる第2の2次元配列を前記配列記憶手段に格納し、前記転置手段は、該配列記憶手段に格納された該第2の2次元配列を転置して前記第1の記憶手段および第2の記憶手段に格納することにより、前記変換結果の一部の実部および虚部をそれぞれ該第1の記憶手段および第2の記憶手段に格納し、前記計算手段は、該第1の記憶手段および第2の記憶手段のデータを用いて、該第2の2次元配列の第1次元についての複素フーリエ変換を各プロセッサ内で行い、前記第2の変換結果を求めることを特徴とする請求項4記載の並列計算機。
- データを複数のプロセッサのメモリに分散配置し、プロセッサ間でデータ転送を行いながら高速フーリエ変換を実行することのできるメモリ分散型並列計算機システムにおいて、
実数データを、第1次元と第2次元を有する第1の多次元配列として入力する入力手段と、
前記第1の多次元配列の第1次元をプロセッサ数で分割して、第1次元が偶数であるような複数の部分配列を生成し、該複数の部分配列を前記複数のプロセッサに分散して記憶する配列記憶手段と、
前記複数の部分配列の各々を前記第1次元で2つに分割して得られる第1のデータと第2のデータのうち、該第1のデータを記憶する第1の記憶手段と、
前記第2のデータを記憶する第2の記憶手段と、
2次元配列を転置する転置手段と
前記配列記憶手段から前記第1のデータおよび第2のデータを前記第1の記憶手段および第2の記憶手段に移し、該第1のデータを実部、該第2のデータを虚部とみなして前記第2次元についての複素フーリエ変換を各プロセッサ内で行い、該複素フーリエ変換の第1の変換結果から前記第1の2次元配列の第2次元についての実フーリエ変換の変換結果の一部を求め、該変換結果の一部の実部および虚部からなる第2の2次元配列を前記配列記憶手段に格納する計算手段と、
出力手段を備え、
前記転置手段は、該配列記憶手段に格納された該第2の2次元配列を転置して前記第1の記憶手段および第2の記憶手段に格納することにより、前記変換結果の一部の実部および虚部をそれぞれ該第1の記憶手段および第2の記憶手段に格納し、
前記計算手段は該第1の記憶手段および第2の記憶手段のデータを用いて、該第2の2次元配列の第1次元についての複素フーリエ変換を各プロセッサ内で行って前記実数データのフーリエ変換の第2の変換結果を求め、
前記出力手段は該第2の変換結果を出力することを特徴とする並列計算機。 - データを複数のプロセッサのメモリに分散配置し、プロセッサ間でデータ転送を行いながら高速フーリエ変換を実行することのできるメモリ分散型並列計算機システムを構成するプロセッサであって、
第1次元と第2次元を有する多次元配列の形式で入力された実数データのうち、該第1次元をプロセッサ数で分割して割り当てられた部分データを記憶するための、第1次元が偶数であるような格納領域を有する配列記憶手段と、
前記格納領域に記憶された前記部分データを前記第1次元で2つに分割して得られる第1のデータと第2のデータのうち、該第1のデータを記憶する第1の記憶手段と、
前記第2のデータを記憶する第2の記憶手段と、
2次元配列を転置する転置手段と
前記配列記憶手段から前記第1のデータおよび第2のデータを前記第1の記憶手段および第2の記憶手段に移し、該第1のデータを実部、該第2のデータを虚部とみなして前記第2次元についての複素フーリエ変換を行い、該複素フーリエ変換の第1の変換結果から前記第1の2次元配列の第2次元についての実フーリエ変換の変換結果の一部を求め、該変換結果の一部の実部および虚部からなる第2の2次元配列を前記配列記憶手段に格納する計算手段を備え、
前記転置手段は、該配列記憶手段に格納された該第2の2次元配列を転置して前記第1の記憶手段および第2の記憶手段に格納することにより、前記変換結果の一部の実部および虚部をそれぞれ該第1の記憶手段および第2の記憶手段に格納し、
前記計算手段は該第1の記憶手段および第2の記憶手段のデータを用いて、該第2の2次元配列の第1次元についての複素フーリエ変換を行って前記実数データのフーリエ変換を求めることを特徴とするプロセッサ。 - データを複数のプロセッサのメモリに分散配置し、プロセッサ間でデータ転送を行いながら高速フーリエ変換を実行することのできるメモリ分散型並列計算機システムにおいて、
長さN=p×qの1次元データをp×qの第1の2次元配列とみなし、該第1の2次元配列を第1次元で分割して、各プロセッサ内の第1次元の大きさが偶数になるように分散配置する配列記憶手段と、
各プロセッサで前記2次元配列と見なされ分散配置されたデータの大きさが偶数の第1次元を2等分してできる第2次元のベクトルのペアを複素数とみなして、複素フーリエ変換を行い、変換結果から実フーリエ変換の(q/2+1)部分を計算した後、ローテーション演算を行う第1の計算手段と、
前記ローテーション演算の結果を、第1次元を分割配置した(q/2+1)×pの第2の2次元配列に転置する転置手段と、
該第2の2次元配列の長さpの第2次元のベクトルに対する1次元複素フーリエ変換を各プロセッサで並列に行って、前記1次元データの実フーリエ変換の結果を求める第2の計算手段とを備えることを特徴とする並列計算機。 - データを複数のプロセッサのメモリに分散配置し、プロセッサ間でデータ転送を行いながら高速フーリエ変換を実行することのできるメモリ分散型並列計算機システムにおいて、
(p,q)の大きさの2次元データをp×qの第1の2次元配列に入力し、該第1の2次元配列を第1次元で分割して、各プロセッサ内の第1次元の大きさが偶数になるように分散配置する配列記憶手段と、
各プロセッサで前記分散配置された2次元データの大きさが偶数の第1次元を2等分してできる第2次元のベクトルのペアを複素数とみなして、複素フーリエ変換を行い、変換結果から実フーリエ変換の(q/2+1)部分を計算する第1の計算手段と、
前記第1の計算手段による計算結果を、第1次元を分割配置した(q/2+1)×pの第2の2次元配列に転置する第1の転置手段と、
該第2の2次元配列の長さpの第2次元のベクトルに対する1次元複素フーリエ変換を各プロセッサで並列に行う第2の計算手段と、
該第2の2次元配列の変換結果を、第1次元を分割配置したp×(q/2+1)の配列に転置することにより、前記2次元データの実フーリエ変換の(p,q/2+1)部分を求める第2の転置手段とを備えることを特徴とする並列計算機。 - データを複数のプロセッサのメモリに分散配置し、プロセッサ間でデータ転送を行いながら高速フーリエ変換を実行することのできるメモリ分散型並列計算機システムにおいて、
(p,q,r)の大きさの3次元データをp×q×rの第1の3次元配列に入力し、該第1の3次元配列を第1次元で分割して、各プロセッサ内の第1次元の大きさが偶数になるように分散配置する配列記憶手段と、
各プロセッサで前記分散配置された3次元データの大きさが偶数の第1次元を2等分してできる第3次元のベクトルのペアを複素数とみなして、複素フーリエ変換を行い、変換結果から実フーリエ変換の(r/2+1)部分を計算した後、第2次元のベクトルに対するフーリエ変換を各プロセッサで並列に行う第1の計算手段と、
前記第1の計算手段による計算結果を、第1次元を分割配置した(r/2+1)×q×pの第2の3次元配列に転置する第1の転置手段と、
該第2の3次元配列の長さpの第3次元のベクトルに対する1次元複素フーリエ変換を各プロセッサで並列に行う第2の計算手段と、
該第2の3次元配列の変換結果を、第1次元を分割配置したp×q×(r/2+1)の配列に転置することにより、前記3次元データの実フーリエ変換の(p,q,r/2+1)部分を求める第2の転置手段とを備えることを特徴とする並列計算機。 - データを複数のプロセッサのメモリに分散配置し、プロセッサ間でデータ転送を行いながら高速フーリエ変換を、メモリ分散型並列計算機システムに実行させるプログラムを記憶したコンピュータ読み取り可能な記録媒体であって、
前記プログラムは、前記メモリ分散並列計算機システムを、
実数データを、第1次元と第2次元を有する第1の多次元配列として入力する入力手段と前記第1の多次元配列の第1次元をプロセッサ数で分割して、第1次元が偶数であるような複数の部分配列を生成し、該複数の部分配列を前記複数のプロセッサに分散して配置する分散配置手段と、
前記複数の部分配列の各々を前記第1次元で2つに分割して第1のデータと第2のデータを生成し、該第1のデータを記憶する第1の記憶域と該第2のデータを記憶する第2の記憶域とを割り当てる割り当て手段と、
2次元配列を転置する転置手段と
前記配列記憶手段から前記第1のデータおよび第2のデータを前記第1の記憶手段および第2の記憶手段に移し、該第1のデータを実部、該第2のデータを虚部とみなして前記第2次元についての複素フーリエ変換を各プロセッサ内で行い、該複素フーリエ変換の第1の変換結果から前記第1の2次元配列の第2次元についての実フーリエ変換の変換結果の一部を求め、該変換結果の一部の実部および虚部からなる第2の2次元配列を前記配列記憶手段に格納する計算手段と、
出力手段として動作させ、
前記転置手段は、該配列記憶手段に格納された該第2の2次元配列を転置して前記第1の記憶手段および第2の記憶手段に格納することにより、前記変換結果の一部の実部および虚部をそれぞれ該第1の記憶手段および第2の記憶手段に格納し、
前記計算手段は該第1の記憶手段および第2の記憶手段のデータを用いて、該第2の2次元配列の第1次元についての複素フーリエ変換を各プロセッサ内で行って前記実数データのフーリエ変換の第2の変換結果を求め、
前記出力手段は該第2の変換結果を出力することを特徴とするコンピュータ読み取り可能な記録媒体。 - メモリ分散型並列計算機システムにおいて、データを複数のプロセッサのメモリに分散配置し、プロセッサ間でデータ転送を行いながら高速フーリエ変換を実行する方法であって、
実数データを、第1次元と第2次元を有する第1の多次元配列として入力し、
前記第1の多次元配列の第1次元をプロセッサ数で分割して、第1次元が偶数であるような複数の部分配列を生成し、該複数の部分配列を前記複数のプロセッサに分散して配置し、
前記複数の部分配列の各々を前記第1次元で2つに分割して第1のデータと第2のデータを生成し、
該第1のデータおよび第2のデータを第1の記憶域および第2の記憶域に移し、
該第1のデータを実部、該第2のデータを虚部とみなして前記第2次元についての複素フーリエ変換を各プロセッサ内で行い、
該複素フーリエ変換の第1の変換結果から前記第1の2次元配列の第2次元についての実フーリエ変換の変換結果の一部を求め、該変換結果の一部の実部および虚部からなる第2の2次元配列を前記配列記憶手段に格納し、
該配列記憶手段に格納された該第2の2次元配列を転置して前記第1の記憶手段および第2の記憶手段に格納することにより、前記変換結果の一部の実部および虚部をそれぞれ該第1の記憶手段および第2の記憶手段に格納し、
該第1の記憶手段および第2の記憶手段のデータを用いて、該第2の2次元配列の第1次元についての複素フーリエ変換を各プロセッサ内で行って、前記実数データのフーリエ変換の第2の変換結果を求めることを特徴とするフーリエ変換処理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP31122495A JP3675537B2 (ja) | 1995-11-29 | 1995-11-29 | 高速フーリエ変換を行うメモリ分散型並列計算機およびその方法 |
US08/701,165 US5751616A (en) | 1995-11-29 | 1996-08-21 | Memory-distributed parallel computer and method for fast fourier transformation |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP31122495A JP3675537B2 (ja) | 1995-11-29 | 1995-11-29 | 高速フーリエ変換を行うメモリ分散型並列計算機およびその方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH09153029A JPH09153029A (ja) | 1997-06-10 |
JP3675537B2 true JP3675537B2 (ja) | 2005-07-27 |
Family
ID=18014596
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP31122495A Expired - Fee Related JP3675537B2 (ja) | 1995-11-29 | 1995-11-29 | 高速フーリエ変換を行うメモリ分散型並列計算機およびその方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US5751616A (ja) |
JP (1) | JP3675537B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9251118B2 (en) | 2009-11-16 | 2016-02-02 | International Business Machines Corporation | Scheduling computation processes including all-to-all communications (A2A) for pipelined parallel processing among plurality of processor nodes constituting network of n-dimensional space |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
SE507529C2 (sv) * | 1996-10-21 | 1998-06-15 | Ericsson Telefon Ab L M | Anordning och förfarande vid beräkning av FFT |
JP2008117044A (ja) * | 2006-11-01 | 2008-05-22 | Oki Electric Ind Co Ltd | 2次元高速フーリエ変換演算方法及び2次元高速フーリエ変換演算装置 |
US5968112A (en) * | 1997-09-04 | 1999-10-19 | Motorola,Inc. | Signal processor and method for Fourier Transformation |
JP3749022B2 (ja) | 1997-09-12 | 2006-02-22 | シャープ株式会社 | 高速フーリエ変換を用いて短い待ち時間でアレイ処理を行う並列システム |
US6088714A (en) * | 1998-07-27 | 2000-07-11 | Agilent Technologies | Mechanism for calculating one-dimensional fast fourier transforms |
US6594284B1 (en) * | 1998-09-16 | 2003-07-15 | Cirrus Logic, Inc. | Network synchronization |
US6609140B1 (en) * | 1999-11-30 | 2003-08-19 | Mercury Computer Systems, Inc. | Methods and apparatus for fast fourier transforms |
JP3639207B2 (ja) | 2000-11-24 | 2005-04-20 | 富士通株式会社 | 共有メモリ型スカラ並列計算機における多次元フーリエ変換の並列処理方法 |
CA2437036A1 (en) * | 2001-02-24 | 2002-09-06 | International Business Machines Corporation | Efficient implementation of a multidimensional fast fourier transform on a distributed-memory parallel multi-node computer |
WO2003034269A1 (en) * | 2001-10-12 | 2003-04-24 | Pts Corporation | Method of performing a fft transform on parallel processors |
JP4052181B2 (ja) * | 2003-05-23 | 2008-02-27 | 株式会社日立製作所 | 通信隠蔽型の並列高速フーリエ変換方法 |
US7788310B2 (en) * | 2004-07-08 | 2010-08-31 | International Business Machines Corporation | Multi-dimensional transform for distributed memory network |
US9852079B2 (en) * | 2006-08-01 | 2017-12-26 | Massachusetts Institute Of Technology | EXtreme virtual memory |
US8464026B2 (en) * | 2010-02-17 | 2013-06-11 | International Business Machines Corporation | Method and apparatus for computing massive spatio-temporal correlations using a hybrid CPU-GPU approach |
WO2013125173A1 (ja) * | 2012-02-20 | 2013-08-29 | 日本電気株式会社 | ディジタルフィルタ回路、ディジタルフィルタ処理方法及びディジタルフィルタ処理プログラム記憶媒体 |
US9292476B2 (en) * | 2012-10-10 | 2016-03-22 | Intel Corporation | Fourier transform computation for distributed processing environments |
JP6666548B2 (ja) | 2016-03-14 | 2020-03-18 | 富士通株式会社 | 並列計算機、fft演算プログラムおよびfft演算方法 |
CN106021182B (zh) * | 2016-05-17 | 2018-11-30 | 华中科技大学 | 一种基于二维fft处理器的行转置架构设计方法 |
US11086967B2 (en) * | 2017-03-01 | 2021-08-10 | Texas Instruments Incorporated | Implementing fundamental computational primitives using a matrix multiplication accelerator (MMA) |
WO2018225127A1 (ja) * | 2017-06-05 | 2018-12-13 | 三菱電機株式会社 | 画像再生器、信号処理装置及び画像再生方法 |
CN111125628A (zh) * | 2019-12-24 | 2020-05-08 | 上海寒武纪信息科技有限公司 | 人工智能处理器处理二维数据矩阵的方法和设备 |
CN111124996A (zh) * | 2019-12-24 | 2020-05-08 | 上海寒武纪信息科技有限公司 | 通过人工智能处理器处理一维复数数组的方法和设备 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5617458A (en) * | 1979-07-21 | 1981-02-19 | Tatsuo Nogi | Parallel processing computer |
JP2580501B2 (ja) * | 1986-06-14 | 1997-02-12 | 工業技術院長 | 並列デ−タ処理装置 |
GB2217058A (en) * | 1988-03-23 | 1989-10-18 | Benchmark Technologies | Processing integral transform operations |
JPH03262076A (ja) * | 1990-03-13 | 1991-11-21 | Mitsubishi Electric Corp | 並列データ処理装置 |
US5583803A (en) * | 1993-12-27 | 1996-12-10 | Matsushita Electric Industrial Co., Ltd. | Two-dimensional orthogonal transform processor |
US5481487A (en) * | 1994-01-28 | 1996-01-02 | Industrial Technology Research Institute | Transpose memory for DCT/IDCT circuit |
-
1995
- 1995-11-29 JP JP31122495A patent/JP3675537B2/ja not_active Expired - Fee Related
-
1996
- 1996-08-21 US US08/701,165 patent/US5751616A/en not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9251118B2 (en) | 2009-11-16 | 2016-02-02 | International Business Machines Corporation | Scheduling computation processes including all-to-all communications (A2A) for pipelined parallel processing among plurality of processor nodes constituting network of n-dimensional space |
DE112010003810B4 (de) | 2009-11-16 | 2019-02-21 | International Business Machines Corporation | Verfahren, Programm und paralleles Computersystem für die Planung einer Vielzahl von Berechnungsverfahren einschließlich All-to-All Kommunikation (A2A) zwischen einer Vielzahl von Knoten (Prozessoren), die ein Netzwerk formen |
Also Published As
Publication number | Publication date |
---|---|
US5751616A (en) | 1998-05-12 |
JPH09153029A (ja) | 1997-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3675537B2 (ja) | 高速フーリエ変換を行うメモリ分散型並列計算機およびその方法 | |
JP3639323B2 (ja) | メモリ分散型並列計算機による連立1次方程式計算処理方法および計算機 | |
Nassimi et al. | Bitonic sort on a mesh-connected parallel computer | |
CN107665126A (zh) | 用于外积累加操作的处理器和方法 | |
Flanders | A unified approach to a class of data movements on an array processor | |
US9268564B2 (en) | Vector and scalar based modular exponentiation | |
US8880575B2 (en) | Fast fourier transform using a small capacity memory | |
WO2018075655A1 (en) | Exact quantum circuits and circuit syntheses for qudit and multiple qubit circuits | |
Franke et al. | SHARK: A realizable special hardware sieving device for factoring 1024-bit integers | |
JP2778622B2 (ja) | 2次元dct回路 | |
Swarztrauber et al. | Vector and parallel methods for the direct solution of Poisson's equation | |
JP3639207B2 (ja) | 共有メモリ型スカラ並列計算機における多次元フーリエ変換の並列処理方法 | |
Hofer | Parallelization of continuous and discontinuous Galerkin dual–primal isogeometric tearing and interconnecting methods | |
CN114330656A (zh) | 一种卷积运算硬件加速器及数据处理方法 | |
Elster | Fast bit-reversal algorithms | |
JP2021005242A (ja) | 情報処理装置、情報処理プログラム、及び情報処理方法 | |
Wang | Parallel polynomial operations on SMPs: an overview | |
EP0080266A2 (en) | Discrete fourier transform circuit | |
CN115859003A (zh) | 执行fft的方法、装置及设备 | |
De Stefani | Communication-optimal parallel standard and karatsuba integer multiplication in the distributed memory model | |
JP3659307B2 (ja) | ベクトル・コンピュータにおける演算方法、及び記録媒体 | |
Field | Nonbinary transforms for genetic algorithm problems | |
US11379557B2 (en) | Device and method for flexibly summing matrix values | |
Hattori et al. | Parallel matrix‐multiplication algorithm for distributed parallel computers | |
Frederickson | Totally Parallel Multilevel Algorithms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040203 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040317 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050208 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050406 |
|
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: 20050426 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050426 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080513 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090513 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090513 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100513 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100513 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110513 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120513 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130513 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140513 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |