JP4057729B2 - フーリエ変換方法およびプログラム記録媒体 - Google Patents
フーリエ変換方法およびプログラム記録媒体 Download PDFInfo
- Publication number
- JP4057729B2 JP4057729B2 JP37768498A JP37768498A JP4057729B2 JP 4057729 B2 JP4057729 B2 JP 4057729B2 JP 37768498 A JP37768498 A JP 37768498A JP 37768498 A JP37768498 A JP 37768498A JP 4057729 B2 JP4057729 B2 JP 4057729B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- fourier transform
- processor
- dimensional
- processors
- 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
Landscapes
- Multi Processors (AREA)
- Complex Calculations (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Description
本発明は、複数のプロセッサを有する計算機で実行するのに適したフーリエ変換方法に係り、とくに、ベクトル演算器を内蔵する複数のプロセッサからなるベクトル並列計算機で実行するのに適したフーリエ変換方法に関する。
【従来の技術】
科学技術計算において頻繁に利用される処理の一つに、フーリエ変換がある。フーリエ変換は、物理現象のシミュレーションその他に使用される。フーリエ変換は、ある実数区間で定義された複素数値をとる関数f(x)を複素指数関数exp(ikx)の重ね合わせとして表す処理であり、計算機上で実現する場合には、扱いうる点の数が有限であることから、複素数の点列f0,f1,...,fN-1をN個の複素指数関数exp(2πikj/N)(ただし、k=0,1,...,N−1で、iは虚数単位、πは円周率)の重ね合わせとして表す処理となる。すなわち、f0,f1,...,fN-1が与えられたときに、式1aにより重ね合わせの係数c0,c1,...,cN-1を求めるのがフーリエ変換である。各点fjの値は、これらの係数を用いると、式1bによりあらわされる。
【数1】
ck=(1/N)Σj=0 N-1 fj exp(-2πikj/N)
(ただし、k=0,1,...,N-1) (1a)
fj=Σk=0 N-1 ck exp(2πikj/N)
(ただしj=0,1,...,N-1) (1b)
しかし、この定義に基づいて計算を行うと、式の数がN本あり、各式がN個の項から成るため、複素指数関数exp(−2πikj/N)の計算に加えて、複素数の加算と乗算が約N2回必要である。そこで実際には、アルゴリズム上の工夫により計算量を約NlogNのオーダーに減少させた高速フーリエ変換という手法が広く使われている。
高速フーリエ変換を並列計算機上で効率的に行うための手法として、従来、転置アルゴリズムとバイナリ・エクスチェンジと呼ばれる2つの手法が提案されている(たとえばV. Kumar, A. Grama, A. Gupta and G. Karypis: "Introduction to Parallel Computing, The Benjamin/Cummings Publishing Company, 1994参照)。前者はプロセッサ間の通信を計算途中の一箇所にまとめて行う方式、後者はプロセッサ間で通信を行いながら計算を進める方式であり、プロセッサの台数をpとすると、通信の回数は前者がp−1、後者がlog2pで、通信1回あたりに送るデータ量は、前者がN/p2、後者がN/2pである。後者は前者に比べて通信の回数が少なくて済むため、通信のセットアップ時間が支配的となる小規模問題では通信時間が少なくて済むという利点があるが、通信すべきデータの総量は多くなるため、大規模データの場合には前者が有利となる。
半導体デバイスの特性計算、電子状態計算、気象予測のための計算などの科学技術計算では、数万から数百万に上る変数を扱う大規模シミュレーションが必要である。このような大規模問題を扱う手段としては、並列計算機が有力である。並列計算機は数十個から数万個に上る多数の高速プロセッサをネットワークで結んだシステムであり、従来の逐次型計算機に比べ、プロセッサ台数を増やすことでピーク性能をいくらでも高めることができるという利点を持つ。さらに、最近の並列計算機では、各プロセッサで、一連のデータに対して同じ演算を高速に実行するできるように演算器が構成されていることも多い。とくに、各プロセッサに、そのような演算器として同じ演算を複数のデータに対してパイプライン的に実行するベクトル演算器を有するベクトル並列計算機も開発されている。ベクトル並列計算機の中には、このベクトル演算器による演算を指定するベクトル命令を実行できるものもある。さらに、メモリとベクトル演算器の間に複数のベクトルレジスタが設けられている並列計算機もある。これらのベクトルレジスタはメモリと演算器のデータの転送時間が処理時間に及ぼす時間を軽減している。より高速にシミュレーションを実行可能になっている。また、厳密にはベクトル並列計算機ではないが、ベクトル並列計算機に類似の並列計算機として、ある演算を実行する演算器がベクトル演算器でなくても、一連のデータに対してその演算を高速に実行できるように構成されている演算器を使用する並列計算機も多い。
フーリエ変換は科学技術計算でもっともよく使われる処理の一つであり、最近では並列計算機用のライブラリとして提供されることも多い。たとえば日立製作所編「プログラムプロダクトHI−UX/MPP行列計算副プログラムライブラリMATRIX/MPP」参照。
並列計算機で実行する大規模のシミュレーションがフーリエ変換を実行する場合には前述の転置アルゴリズムが使用されることが多い。上に記載したように、ベクトル型並列計算機あるいはそれらに類似の並列計算機で転置アルゴリズムを実行する場合には、変換すべき一次元空間の点列データを3次元空間に直方体状に並べ、これに対してたとえばY方向の変換、X方向の変換、Z方向の変換を順次行うことによって、全データ点列に対して高速フーリエ変換を行ったのと同一の結果を得る。より具体的には、フーリエ変換の対象となる一次元のデータf0,f1,...,fN-1を入力し、各辺の長さがNX,NY,NZの直方体状に並べる。ここで、NX,NY,NZはNX*NY*NZ=Nを満たす整数である。データを直方体状に並べるに当たっては、原点からたとえばZ方向にデータを並べていき、NZ個のデータを並べ終わったら次はX座標を1だけ増やしてデータを並べ、これを繰り返してNX*NZ個のデータを並べ終わったら次はY座標を1だけ増やしてデータを並べる、という操作を行う。
このようにデータを並べた後、直方体をZ軸に垂直にスライスし、こうしてできる各面を並列計算機の一つのプロセッサに割り当てる。次に、Y方向の変換を行う。プロセッサへの入力データfjの割り当て方式より、各XY平面は1台のプロセッサに担当されているから、この変換処理は通信なしに各プロセッサで独立に行える。次に、同様にして各プロセッサで独立にY方向の変換の結果データに対してX方向の変換を行う。X方向の変換の終了後、プロセッサ間でのX方向の変換の結果データの入れ替えを行い、今度はその結果データが構成する直方体をX軸に垂直にスライスし、こうしてできる各面を一つのプロセッサに割り当てる。この処理を転置と呼び、各プロセッサが自分以外の全プロセッサとデータの交換を行う必要がある。転置の終了後、今度は各プロセッサで独立にZ方向の変換を行う。以上で、直方体状に並べられた一次元入力データfjのフーリエ変換が終了し、直方体状に並べられた、重ね合わせの係数を表す出力データckが求まる。出力データckの並び方は、原点からまずY方向に、Y方向にNY個行ったら次はX座標が1だけ増え、XY平面上にNX*NY個のデータが並んだら次はZ座標が1だけ増えるという順で並ぶ。
上記の転置アルゴリズムでは、入力データfjの分割は、fjを第MOD(j,p)番のプロセッサが担当するという形でデータがプロセッサ間で分割されている。このデータ分割形式はサイクリック分割と呼ばれる。データ分割形式はデータのプロセッサへの割り当ての順序を表すものでもあり、本明細書ではデータ分割形式のことを割り当て順序あるいは割り当て態様とも呼ぶことがある。一方、出力データckの分割は、NY個の連続するデータを1台のプロセッサが担当するブロックサイクリック分割となり、入力データfjとはプロセッサ間のデータ分割形式が異なる。
上記の転置アルゴリズムでは、入力データfjの並べ方およびそのデータのプロセッサへの分割の仕方より分かるように、入力データの分割形式は、fjを第MOD(j,p)番のプロセッサが担当するというサイクリック分割となる。一方、転置後のデータのプロセッサへの分割の仕方、および変換で得られた出力データckの並び方より分かるように、出力データの分割形式は、NY個の連続するデータを1台のプロセッサが担当するというブロックサイクリック分割となる。
しかし多くの応用では、フーリエ変換と逆フーリエ変換とを対にして用い、しかも逆フーリエ変換はフーリエ変換プログラムを流用して行うため、フーリエ変換の入力データと出力データが同じデータ分割形式(データ割り当て順序)になっている方が都合がよい。そのため、従来の高速フーリエ変換方法では、以上の処理に従ってブロックサイクリック分割の出力データckを得た後、再びプロセッサ間でデータの転送を行い、データckをサイクリック分割に直して出力する必要がある。
【発明が解決しようとする課題】
本発明者の検討の結果、以上の従来のフーリエ変換方法では、フーリエ変換係数の計算後に行うデータ分割形式(データ割り当て順序)の変更のためのプロセッサ間でのデータ転送が、フーリエ変換時間の短縮を妨げていることが分かった。
したがって、本発明の目的は、フーリエ変換係数の計算後にデータ分割形式の変更のためにデータ転送を行わなくても、フーリエ変換結果データがフーリエ変換対象データと同一のデータ分割形式(データ割り当て順序)を持ち得るフーリエ変換方法を提供することである。
【課題を解決するための手段】
上記目的を達成するため、本発明によるフーリエ変換方法は、
各プロセッサにより、第1の変換処理、第2の変換処理、第3の変換処理を順次実行し、
上記複数のプロセッサの各々による、上記第1、第2の変換処理のいずれか一方の変換処理の実行後に、上記複数のプロセッサでのその一方の変換処理を実行した結果得られた一群の結果データを構成する複数の結果データ部分群が異なるプロセッサに割り当てられるように、上記一群の結果データを上記複数のプロセッサの間で交換するステップを有する。
上記第1から第3の変換処理は、一群の順序づけられた変換対象データに対する一群の順序づけられたフーリエ変換係数データを構成する複数のフーリエ変換係数データ部分群をそれぞれ異なるプロセッサにより生成するように定められ、各プロセッサには、上記一群の変換対象データを構成する複数の変換対象データ部分群の一つの変換対象データ部分群がそのプロセッサに対して予め割り当てられ、
上記一群のフーリエ変換係数データのそれぞれを生成したプロセッサの順序が、上記一群の変換対象データのそれぞれが割り当てられたプロセッサの順序と同一となるように、上記交換するステップで各プロセッサに割り当てられる結果データ部分群が定められているもの。
より具体的には、上記第1、第2、第3の変換処理は、それぞれ3次元データ空間の第1、第2、第3の座標軸に関する変換処理であり、
上記変換対象データ群の各々は、上記3次元データ空間の直方体形状に位置する格子点群の一つの座標をそれぞれ有し、
上記複数の変換対象データ部分群は、上記3次元データ空間の第3の座標軸の座標値が同じであり、上記3次元データ空間の第1、第2の座標軸の座標値が異なる全ての変換対象データが同一の変換対象データ部分群に含まれるように定められ、
上記フーリエ変換係数データ群の各々は、3次元係数空間の直方体形状に位置する格子点群の一つの座標をそれぞれ有し、
上記複数のフーリエ変換係数データ部分群は、上記3次元係数空間の第1の座標軸の座標値が同じであり、上記3次元波数空間の第2、第3の座標軸の座標値が異なる全てのフーリエ変換係数データが同一のフーリエ変換係数データ部分群に含まれるように定められている。
本発明の具体的な態様によるフーリエ変換方法では、
上記変換対象データ群の各々は、上記3次元データ空間の直方体形状に位置する格子点群の一つの座標をそれぞれ有し、
上記複数の変換対象データ部分群は、上記3次元データ空間の第3の座標軸の座標値が同じであり、上記3次元データ空間の第1、第2の座標軸の座標値が異なる全ての変換対象データが同一の変換対象データ部分群に含まれるように定められ、
上記フーリエ変換係数データ群の各々は、3次元係数空間の直方体形状に位置する格子点群の一つの座標をそれぞれ有し、
上記複数のフーリエ変換係数データ部分群は、上記3次元係数空間の第1の座標軸の座標値が同じであり、上記3次元波数空間の第2、第3の座標軸の座標値が異なる全てのフーリエ変換係数データが同一のフーリエ変換係数データ部分群に含まれるように定められる。
更に具体的には、
上記変換対象データ群が上記3次元データ空間に直方体形状に位置する格子点群に上記3次元空間に第3の座標軸、第2の座標軸、第1の座標軸の順に順次割り当てられ、
上記第1から第3の変換処理は、上記複数のフーリエ変換係数データが、3次元係数空間に直方体形状に位置する格子点群に、当該3次元係数空間の第1、第2、第3の座標軸の順序で割り当てられるように定められている。
更に具体的な態様では、
各プロセッサが上記第1の変換処理により生成する上記一つの第1の結果データ部分群は、上記3次元データ空間の第3の座標軸の座標値が所定の同じ値であり、上記3次元データ空間の第2の座標軸の座標値と上記3次元係数空間の第1の座標軸の座標値が異なる値を有する全ての複数の第1の結果データを含み、
上記交換ステップが上記第1の変換処理が上記複数のプロセッサにより実行された後に実行され、
上記複数のプロセッサは、この交換ステップで、上記3次元係数空間の第1の座標軸の座標値が所定の同じ値であり、上記3次元データ空間の第2、第3の座標軸の座標値が異なる値を有する全ての複数の第1の結果データを含む第1の結果データ部分群が同一のプロセッサに割り当てられるように、上記複数のプロセッサが生成した一群の第1の結果データを上記複数のプロセッサの間で交換し、各プロセッサが上記第2の変換処理により生成する上記一つの第2の結果データ部分群は、上記3次元係数空間の第1の座標軸の座標値が所定の同じ値であり、上記3次元波数空間の第2の座標軸の座標値と上記3次元データ空間の第3の座標軸の座標値が異なる値を有する全ての複数の第2の結果データを含み、
各プロセッサが上記第3の変換処理により生成する上記一つのフーリエ変換係数部分群は、上記3次元係数空間の第1の座標軸の座標値が所定の値であり、上記3次元波数空間の第2、第3の座標軸の座標値が異なる値を有する全ての複数のフーリエ変換係数を含む。
更に具体的な他の態様では、
各プロセッサが上記第1の変換処理により生成する上記一つの第1の結果データ部分群は、上記3次元データ空間の第3の座標軸の座標値が所定の同じ値であり、上記3次元データ空間の第2の座標軸の座標値と上記3次元係数空間の第1の座標軸の座標値が異なる値を有する全ての複数の第1の結果データを含み、
上記交換ステップが上記第2の変換処理が上記複数のプロセッサにより実行された後に実行され、
各プロセッサが上記第2の変換処理により生成する上記一つの第2の結果データ部分群は、上記3次元データ空間の第3の座標軸の座標値が所定の同じ値であり、上記3次元係数空間の第1、第2の座標軸の座標値が異なる値を有する全ての複数の第2の結果データを含み、
上記複数のプロセッサは、上記交換ステップにより、上記3次元係数空間の第1の座標軸の座標値が所定の同じ値であり、上記3次元係数空間の第1の座標軸の座標値と上記3次元データ空間の第3の座標軸の座標値が異なる値を有する全ての複数の第1の結果データを含む第1の結果データ部分群が同一のプロセッサに割り当てられるように、上記複数のプロセッサが生成した一群の第1の結果データを上記複数のプロセッサの間で交換し、
各プロセッサが上記第3の変換処理により生成する上記一つのフーリエ変換係数部分群は、上記3次元係数空間の第1の座標軸の座標値が所定の値であり、上記3次元係数空間の第2、第3の座標軸の座標値が異なる値を有する全ての複数のフーリエ変換係数を含む。
本発明のより具体的な態様では、
各プロセッサにより、3次元空間の第1、第2、第3の座標軸の座標にそれぞれ関する第1、第2、第3の変換処理を順次かつ他のプロセッサと並行して実行し、
各プロセッサが上記第1、第2の変換処理のいずれか一方を実行した後に、その一方の変換処理の結果それぞれのプロセッサで得られた複数の結果データを上記複数のプロセッサの間で交換するステップを有する。
ここで、一群の順序づけられた変換対象データが上記3次元空間に直方体の形に並べられ、
上記第1から第3の変換処理は、上記一群の変換対象データに対する一群の順序づけられた3次元空間の座標を有する複数のフーリエ変換係数データを生成するように定められ、
上記複数の変換対象データが構成する上記直方体を分割する上記3次元空間の上記第1の座標軸に垂直な複数の面の各々に含まれる複数の変換対象データが同一のプロセッサに割り当てられ、
上記交換ステップは、上記一方の変換処理の結果得られた上記複数の結果データが構成する3次元空間の直方体を、その3次元空間の第1の座標軸に垂直な複数の面で分割し直して、各面に属する複数の結果データを同一のプロセッサに割り当てるように、上記一方の変換処理の結果得られた上記複数の結果データを上記複数のプロセッサ間で交換するステップを有する。
とくに、望ましくは、上記一群の順序づけられた変換対象データを上記3次元空間に直方体の形に並べられる順序は、第3の座標軸、第2の座標軸、第1の座標軸の順であり、
上記第1から第3の変換処理は、上記複数のフーリエ変換係数データが3次元空間に第1、第2、第3の座標軸の順序で並べられるように定められている。
さらに望ましくは、本発明によるフーリエ変換方法は、各プロセッサがパイプライン演算器を含み、その演算器での演算の対象とするループ長がLのときのその各プロセッサの演算性能を求めるための性能データを上記複数のプロセッサに共通に記憶し、
その性能データを用いて、上記直方体の上記第1、第2、第3の座標軸方向の長さを決定し、
その決定された上記第1、第2、第3の座標軸方向の長さを有する直方体に、上記順序づけられた複数の変換対象データを並べるステップをさらに有する。
本発明によるプログラム記憶媒体は、上記いろいろのフーリエ変換方法のいずれかを実行するようにプログラムされたプログラムが記憶する。
さらに、本発明によるシミュレーション方法は、上記いろいろのフーリエ変換方法のいずれかを使用してシミュレーションを実行する。
本発明による他のプログラム記憶媒体は、上記シミュレーション方法を実行するようにプログラムされたプログラムを記憶する。
【発明の実施の形態】
以下、本発明に係るフーリエ変換方法、それを用いるシミュレーション方法およびプログラムを図面に示したいくつかの実施の形態を参照してさらに詳細に説明する。なお、以下においては、同じ参照番号は同じものもしくは類似のものを表わすものとする。また、第2の実施の形態以降では、第1の実施の形態との相違点を主に説明するに止める。
<発明の実施の形態1>
(1)装置の概略構成
本発明によるフーリエ変換方法を実行するための並列計算機システムの一例を図1に示す。並列計算機28は、それぞれがメモリ26を備えた複数のプロセッサ27と、プログラムおよびデータを格納するための複数の外部記憶装置31から構成され、これらの装置は、内部データ転送ネットワーク29を介して相互にデータを交換可能なように構成されている。外部記憶装置31には、たとえば、多くのユーザの利用に供するために並列計算機28に予め準備された複数のプログラムライブラリ44とそれらが使用するデータ30等が記憶される。各プロセッサのメモリ26は、いわゆるローカルメモリであり、このメモリに記憶されたデータに割り当てられるアドレスは、そのプロセッサで定められたローカルなアドレス空間に属するアドレスであり、この種のメモリは一般に分散メモリと呼ばれ、この種のメモリを有する計算機は分散メモリ型の並列計算機と呼ばれる。並列計算機28は、各プロセッサ29が、一連のデータ要素からなるベクトルデータに対して同じ演算をパイプライン的に連続して実行できるベクトル演算器(図示せず)を備えるベクトル並列計算機であると仮定する。
これらのプロセッサ27内の特定の一つのプロセッサには、ユーザが操作可能な計算機、たとえばワークステーション1がLAN等のネットワーク2を介して接続されている。この計算機は他の計算機たとえばパーソナルコンピュータでもよい。このワークステーション1には、並列計算機28に対する指示あるいはデータを入力するための入力装置3(典型的には、キーボードとマウス)と、並列計算機28からの計算結果を出力するための出力装置29(典型的には、表示装置と印刷装置)が接続されている。なお、ワークステーション1内には、並列計算機28に送るべきプログラムおよびそのプログラムで使用するデータを記憶する記憶装置(図示せず)も設けられている。
上記特定のプロセッサは、並列計算機28内で計算を司るプロセッサの役目とユーザ用のワークステーション1との通信の役目とを兼ねる。すなわち、このプロセッサは、ワークステーション1から送付されるプログラムとデータを受信し、それらを外部記憶装置31の一つに記憶し、その後、並列計算機28の内部に記憶された適当なプログラムにより、ユーザ指定のプログラムを複数のプロセッサ(具体的には全プロセッサ)にロードし、ユーザ指定のデータの異なる部分を、それぞれそれらのプロセッサの異なるものに割り当て、そのユーザ指定のプログラムを起動する。
しかしながら、本発明によるフーリエ変換方法を実施するためには、並列計算機28は、複数のプロセッサを有することが必要であるが、それ以外の点では特に限定した構造を有しなくてもよいことは言うまでもない。並列計算機28は、ベクトル並列計算機であると仮定したが、このベクトル演算器はごく一部の演算のみを実行でき、他の演算はベクトル演算器ではないスカラ演算器で実行されてもよい。さらに、並列計算機28は、対してこのような演算器を有しなくてもよい。もちろん、一連のデータに対する同じ演算を高速に実行できるように構成されている演算器を有することが望ましい。また、並列計算機28は、メモリ29と演算器(図示せず)の間に複数のベクトルレジスタを有しないと仮定するが、これらのレジスタが使用することはより望ましいことである。
さらに、それらのプロセッサの具体的な構造あるいはそれらの間のデータ転送ネットワークの構造、あるいはそれらのプロセッサと入力装置あるいは出力装置との接続形態がいろいろであっても、本発明はそれらの並列計算機に適用可能である。たとえば、ワークステーションと通信可能な複数のプロセッサが設けられていてもよく、また、ワークステーションと通信可能な少なくとも一つのプロセッサが計算用のプロセッサとは別に設けられていてもよい。また、実行すべきプログラムとデータを並列計算機28に送付する方法は他の方法に依ってもよいことは明らかである。
ユーザは上記複数のプロセッサ27を使用して種々の計算を実行できる。最も典型的な計算は、物理現象などのシミュレーションであり、たとえば、地球の気象の予測もシミュレーションにより行われる。半導体デバイスの設計も、半導体デバイスの物理的な動作をシミュレーションして行われている。このようなシミュレーションを並列計算機を使用して実行する場合、シミュレーション対象の物理領域を複数の部分領域に区分し、各部分領域を一つのプロセッサに割り当て、そのプロセッサにおいて、その部分領域についてのシミュレーションを、たとえば一つまたは複数の物理量に関する偏微分方程式を解いて実行することが多い。この場合、シミュレーションに使用される複数のプロセッサは、同じシミュレーションプログラムを互いに並列に実行する。したがって、このようなプログラムは並列プログラムとも呼ばれる。各プロセッサが実行するシミュレーションプログラムが使用するデータは異なる。たとえばシミュレーション領域の位置と形状を表すデータ、シミュレーションすべき物理量の初期値、シミュレーション領域の物質に関する物質定数、あるいは各部分領域に関する境界条件など異なる。各プロセッサは、計算の途中で得られた結果データを他の適当なプロセッサに転送し、あるいは他のプロセッサから計算結果データを受け取り、さらにシミュレーションを続けていく。
このシミュレーションプログラムの中にはフーリエ変換を使用するものもある。本実施の形態では、いろいろのシミュレーションの利用に供するために、本発明によるフーリエ変換方法にしたがってフーリエ変換を実行するようにプログラムされたフーリエ変換ライブラリがいずれかの外部記憶装置31に記憶される。さらにプロセッサ間の通信を実行するための通信ライブラリも外部記憶装置31に記憶される。シミュレーションプログラムは、上記フーリエ変換ライブラリあるいは通信ライブラリを必要な時点でコールするようにプログラムされる。並列計算機28は、ワークステーション1から送信されたユーザ指定のシミュレーションプログラムと、そのシミュレーションプログラムが使用するライブラリ(今の場合には上記フーリエ変換ライブラリと上記通信ライブラリ)を各プロセッサにロードする。さらに、並列計算機28は、それぞれのプロセッサでシミュレーションプログラムが使用する、ワークステーション1から送信されたユーザ指定のデータをそれぞれのプロセッサにロードする。なお、シミュレーションプログラムは全プロセッサにロードされてもよく、一部のプロセッサにロードされてもよいが、以下では簡単化のために、シミュレーションプログラムは、全てのプロセッサにロードされると仮定する。上記ライブラリあるいは上記シミュレーションプログラムは、並列計算機28の命令セットあるいはハード構造の特徴、ソフトウエア上の制約等を反映するコンパイラによりコンパイルされたものである。本発明によりフーリエ変換方法を実行する上記ライブラリあるいは上記シミュレーションプログラムに上記ライブラリに含まれたフーリエ変換のためのプログラム部分を組み込んだプログラムを磁気記憶装置のようなプログラム記録媒体に記憶して販売できる。
(2)並列高速フーリエ変換の原理
すでに述べたごとく、フーリエ変換は、N個の入力データf0,f1,...,fN-1からN個の出力データc0,c1,...,cN-1を、式1aを用いて計算する処理である。
入力データfj、出力データckは、実数データであっても複素データであってもよい。入力データfj、出力データckはそれぞれ実空間のデータ、波数空間のデータと呼ばれることがある。すなわち、入力データfjの添え字jは、一次元の実空間の格子点の座標を表し、出力データckの添え字kは、一次元の波数空間の格子点の座標を表すと考えることができる。言い換えると、上記の式によるフーリエ変換は、一次元の実空間のデータを一次元の波数空間のデータに変換する処理である。したがって、本明細書では、入力データfjの添え字jを一次元実空間の格子点座標あるいは単に座標と呼び、出力データckの添え字kを一次元波数空間の格子点の座標あるいは単に座標と呼ぶことがある。あるいは、それらのデータはその座標を有すると呼ぶことがある。しかし、入力データfj、出力データckが実際にはそのような実空間、波数空間に属するデータでなくてもよい。
一般に、並列計算機を使用して演算を行う場合、できるだけ多くのプロセッサが互いに並列に動作する時間を増大するとともに、プロセッサ間のデータ通信の総回数を少なくすることが望ましいことが知られている。データ通信は、プロセッサ内部の計算時間に比べて時間が掛かる上に、通信はあるプロセッサからのデータの送信と他のプロセッサでの受信となからなり、受信側のプロセッサでは、ある処理を実行する前に他のプロセッサからそこでの演算結果データを受信するようにプログラムされた場合、そのプロセッサは、受信すべき演算結果データが受信されるまで、その処理を開始することができない。したがって、各プロセッサでは、通信の発生に伴い、受信待ち時間が増大し、他のプロセッサと並列に動作する時間が減少する。したがって、並列計算機で演算を高速に行うには、プロセッサ間の通信の総回数を減らすことが望ましいことが知られている。このことは演算としてフーリエ変換を並列計算機で実行する場合も同じである。このためには、演算で使用するデータをどのプロセッサに割り当てるか、いつプロセッサ間で演算結果データを交換するかが重要な問題である。
並列計算機でフーリエ変換を行うには、従来の転置アルゴリズムでは、変換対象データfjを以下のようにして3次元の実空間のデータに写像し、それを用いて変換対象データを割り当てるプロセッサを決定することになる。
いま、NX,NY,NZをNX*NY*NZ=Nを満たす正の整数とし、1次元の添字j,kを3次元の添字(jx,jy,jz)、(kx,ky,kz)に次の式2、3によって置換する。
【数2】
【数3】
ここで、記号*は乗算を表す。この置換は、1次元実空間の格子点座標j、1次元の波数空間の格子点座標kを、それぞれ3次元の実空間の格子点座標(jx,jy,jz)、3次元の波数空間の格子点座標(kx,ky,kz)に写像することであるとも言える。
3次元の実空間の座標(jx,jy,jz)は、1次元の実空間の座標jから次式により計算される。
j x=MOD(j/NZ,NX)
jy=(j/(NX*NZ))↓
jz=MOD(j,NZ)
ここで、( )↓は、括弧内の数値の整数部分のみを表し、小数点以下を切り捨てることを表す。
したがって、jが0,1,2,3,,,(N−1)と変化したときに、(jx,jy,jz)は、(0,0,0),(0,0,1),(0,0,2),(0,0,3),,,(0,0,NZ−1)と変化し、さらに、(1,0,0),(1,0,1),(1,0,2),(1,0,3),,,(1,0,NZ−1)と変化し、この変化を(NX−1,0,NZ−1)まで変化した後に、jyを1に変えて上記変化を座標(NX−1,NY−1,NZ−1)に達するまで繰り返す。すなわち、一次元の順次異なる座標点jに対応する3次元の座標点(jx,jy,jz)は、Z方向、X方向、Y方向の順に変化する。本明細書では、このようにフーリエ変換の対象となる一次元実空間のデータf0,f1,.,fN-1を3次元実空間のデータに写像することを、簡単化のために各辺の長さがNX,NY,NZの直方体状に並べるともいう。以上の置換は、言い換えると、図2に示すように、原点からまずZ方向にデータを並べていき、NZ個のデータを並べ終わったら次はX座標を1だけ増やしてデータを並べ、これを繰り返してNX*NZ個のデータを並べ終わったら次はY座標を1だけ増やしてデータを並べるという操作を行うことと等価である。但し、図2では、Nは512であり、NX,NY,NZはともに8に等しいと仮定した。
3次元の波数空間の座標(kx,ky,kz)は、1次元の波数空間の座標kから次式により計算される。
kx=MOD(k/NY,NX)
ky=MOD(k,NY)
kz=(k/(NX*NY))↓
したがって、kが0,1,2,3,,,(NX*NY*NZ−1)と変化したときに、(kx,ky,kz)は、(0,0,0),(0,1,0),(0,2,0),(0,3,0),,,(0,NY−1,0)と変化し、さらに、(1,0,0),(1,1,0),(1,2,0),(1,3,0),,,(1,NY−1,0)と変化し、この変化を(NX−1,NY−1,0)まで変化した後に、kzを1に変えて上記変化を座標(NX−1,NY−1,NZ−1)に達するまで繰り返す。すなわち、一次元の順次異なる座標点kに対応する3次元の座標点(kx,ky,kz)は、Y方向、X方向、Z方向の順に変化する。したがって、求めるべきフーリエ変換係数ckとそれに対応する3次元の波数空間の座標(kx,ky,kz)との関係は図3に示すとおりになる。但し、図3では、Nは512であり、NX,NY,NZはともに8に等しいと仮定した。
なお,転置アルゴリズム自体は、1次元空間のデータ列fj、それに対するフーリエ変換結果データckを2次元空間のデータfjx,jy,ckx,kyに変換して行うこともできる。この場合には、1次元のフーリエ変換を2次元のフーリエ変換に置き直すことになる。しかし、ここで記載するように、1次元空間のデータ列fj、それに対するフーリエ変換結果データckを3次元空間のデータfjx,jy,jzとckx,ky,kzに変換してフーリエ変換を行うのは,並列計算機の個々のプロセッサがベクトル演算器を持つ場合に、そのベクトル演算器をうまく利用するためである。この場合には、1次元のフーリエ変換を3次元のフーリエ変換に置き直すことになる。すなわち,以下の実施の形態でも述べるように,変換の各ステップでは,X方向、Y方向、Z方向のうちのどれかの方向について変換を行い,残りの2方向のうちの1方向を用いて並列化を行い,更に残りの1方向を用いてベクトル化を行う。このため,データを3つの方向を持つ直方体状に並べる必要がある。原理的には,式2,3と同様の変換を行って,データを2次元空間あるいは4次元以上の空間に並べ直すこともできるが,2次元では並列化とベクトル化の両方を行うには次元が足りず,また,4次元以上では不要な次元ができ,その分だけベクトル化対象のループ長が短くなってしまうので性能的に不利である。そのため,ベクトル演算器を持つ並列計算機上で高速フーリエ変換を行うには,データを式2,3のように3次元に並べ直すことがことが望ましい。このようなデータの変換は、各プロセッサがベクトル演算器を持たない場合にも演算の高速化に有効な場合が多い。
置換式2,3を使用すると、式1aは次のように書き換えられる。
【数4】
さらに、この変換式は次の3式で表される3ステップの変換をそれらの式の順に順次実行することにより実現される変換であることが分かる。
【数5】
c'jx,ky,jz=Σjy=0 Ny-1fjx,jy,jz*exp(-2πikyjy/NY) (5)
【数6】
【数7】
式5は、jx、jzが特定の値であり、jyの値が異なるNY個の入力データfjx,jy,jzに対するフーリエ変換を、jx、jzが採りうる値の組合わせの数(NX*NZ組)だけ行い、それにより上記二つの実空間座標(jx、jz)の組のひとつにそれぞれ対応する複数(NX*NZ)組の、3次元の波数空間の一つの座標(ky)に関する一次変換結果データ(c'jx,ky,jz)(ky=0〜NY−1、jx=0〜NX−1、jz=0〜NZ−1)を得る処理を表す。
式6も、複素指数関数の中にky/NYという余分な項が入る以外はフーリエ変換と同じ変換を表し、具体的には、この式は、jz、kyが特定の値であり、jxの値が異なるNX個の一次変換結果データc'jx,ky,jzに対してフーリエ変換と類似の変換を、jz、kyが採りうる値の組合わせの数(NY*NZ組)だけ行い、それにより、座標jzの異なる値に対する、3次元の波数空間の二つの座標(kx、ky)に関する2次変換結果データ(c''kx,ky,jz)(kx=0〜NX−1、ky=0〜NY−1、jz=0〜NZ−1)を得る処理を表す。
式7も、複素指数関数の中にkx/NY+ky/(NX*NY)という余分な項が入る以外はフーリエ変換と同じ変換を表し、具体的には、この式は、kx、kyが特定の値であり、jzの値が異なるNZ個のデータc''kx,ky,jzに対してフーリエ変換と類似の変換を、kx、kyが採りうる値の組合わせの数(NX*NY組)だけ行い、それにより3次元の波数空間の3つの座標(kx,ky,kz)に関する最終的なフーリエ変換結果データ(ckx,ky,kz)(kx=0〜NX−1、ky=0〜NY−1、kz=0〜NZ−1)を得る処理を表す。したがって、これらの3つの変換は、すべて高速フーリエ変換のアルゴリズムを用いて実行することができる。
以下では、これらの変換をそれぞれY方向の変換、X方向の変換、Z方向の変換と呼ぶ。本明細書では、これらの変換を簡単化のためにそれぞれY方向のフーリエ変換、X方向のフーリエ変換、Z方向のフーリエ変換と呼ぶこともある。ここで、X方向等は、式2、3で定めた座標変換できまる方向である。すなわち、一次元の順次異なる座標点jに対応して最初に順次変化する座標がZ座標であり、その後に変化する座標がX座標であり、最後に変化する座標がY座標である。座標変換式を式2、3から変更すれば、X方向等の変換の内容が変わるのは言うまでもない。したがって、本明細書では、より一般的には、これらの変換は以下の変換を指す。
Y方向の変換とは、式5により例示されたように、実空間の第1、第3の座標軸の座標(jx,jz)が特定の値であり、第2の座標軸の座標(jy)の値が異なる複数(NY)個の入力データfjx,jy,jzに対してフーリエ変換を行い、3次元実空間の第1、第3の座標軸の座標(jx,jz)の組のひとつにそれぞれ対応する複数(NX*NZ)組の、3次元波数空間の第2の座標軸の座標(ky)に関連する一次変換結果データ(c'jx,ky,jz)(jx=0〜NX−1、ky=0〜NY−1、jz=0〜NZ−1)を得る処理を指す。あるいは、言い換えると、Y方向の変換は、入力データfjx,jy,jzに対して、実空間の第2の座標軸に関してフーリエ変換を行い、3次元波数空間の第2の座標軸の座標と、3次元実空間の第1の座標軸の座標と、第3の座標軸の座標との関数である一次変換結果データを得る処理を指すとも言える。
さらに、X方向の変換とは、式6により例示されたように、上記第3の実空間座標系の第1の座標系の座標(jz)と3次元波数空間の第2の座標系の座標(ky)とが特定の値であり、上記第1の実空間座標系の座標(jx)の値が異なる複数(NX)個の一次変換結果データ(c'jx,ky,jz)に対してフーリエ変換に類似の変換を行い、上記第3の実空間座標軸の座標(jz)の異なる値の一つにそれぞれ対応する複数(Nz)個の、上記3次元の波数空間の第1、第2の座標軸の座標(kx、ky)に関連する2次変換結果データ(c''kx,ky,jz)(kx=0〜NX−1、ky=0〜NY−1、jz=0〜NZ−1)を得る処理を指す。あるいは、言い換えると、X方向の変換は、一次変換結果データに対して、3次元実空間の第1の座標軸に関してフーリエ変換に類似の変換を行い、3次元実空間の第3の座標軸の座標と、3次元波数空間の第1、第2の座標軸の座標との関数である2次変換結果データを得る処理を指すとも言える。
さらに、Z方向の変換とは、式7により例示されたように、3次元波数空間の第1、第2の座標系の座標(kx,ky)とが特定の値であり、3次元実空間の第3の座標系の座標(jz)の値が異なる複数(NZ)個の2次変換結果データ(c''kx,ky,jz)に対してフーリエ変換に類似な変換を行い、3次元波数空間の第1、第2、第3の座標軸の座標(kx,ky,kZ)に関連する、入力データに対する最終的なフーリエ変換結果データ(ckx,ky,kz)(kx=0〜NX−1、ky=0〜NY−1、kz=0〜NZ−1)を得る処理を指すとも言える。あるいは、言い換えると、Z方向の変換は、2次変換結果データに対して、3次元実空間の第3の座標軸に関してフーリエ変換に類似の変換を行い、3次元波数空間の第1、第2、第3の座標軸の座標の関数である最終的なフーリエ変換結果データを得る処理を指すとも言える。
Y方向の変換は、式5にて示されるように、NX*NZ組のデータに対する互いに独立な変換からなる。同様に、X方向の変換は、式6にて示されるように、NY*NZ組のデータに対する互いに独立な変換からなる。同様に、Z方向の変換は、式7にて示されるように、NX*NY組のデータに対する互いに独立な変換からなる。
従来の転置アルゴリズムによるフーリエ変換方法では、この特徴を利用してプロセッサ間の通信を少なくするように、変換対象データを並列計算機の異なるプロセッサに割り当てている。すなわち、式2に従って、また、図2に例示されるように、変換対象データfj(j=0〜N)を直方体状に並べ、3次元実空間のZ軸に並行な平面でこのデータを分割し、図4に例示するように、jz=0,1,,,7をそれぞれ有する複数のデータはプロセッサ0,1,,7に割り当てられている。すなわち、特定の値のZ座標jzを有する全ての変換対象データは、それらのX座標jx、Y座標jyの値に依らないで同一のプロセッサに割り当てる。図2では、N=512,NX=NY=NZ=8と仮定し、図4ではプロセッサの総数NPU=8と仮定したが、これらの数値がここに仮定の数値と異なる場合でも、特定の値のZ座標jzを有する全ての変換対象データは、それらのX座標、Y座標の値に依らないで同一のプロセッサに割り当てればよい。たとえば、プロセッサの総数NPU=NX=NZとし、NY=(N/(NX*NZ))↑とすればよい。ここで、( )↑は、括弧内の数値の小数点以下を切り上げた後の整数を示す。たとえば、N=512、NPU=4のときには、NX=NZ=4、NY=32であればよい。
このようなデータの割り当てを行った後、フーリエ変換を以下のように実行する。この方法では式5によるY方向の変換と式6によるX方向の変換とは、プロセッサ間の通信を使用しないで行うことができる。
(ステップ1)Y方向の変換
まず、Y方向の変換を実行する。式5から分かるように、Y方向の変換では、X座標jxとZ座標jzが特定の値であり、Y座標jyが異なる複数の変換対象データに対してフーリエ変換が実行される。しかし、これらの複数のデータは同じプロセッサに割り当てられている。こうして、各プロセッサでは、式5にしたがって、プロセッサ間の通信を使用しないで、 X座標jxとZ座標jzが特定の値であり、波数空間のY座標kyがいろいろの値を有する複数の一次変換結果データが得られる。
(ステップ2)X方向の変換
次に、X方向の変換を実行する。式6から分かるように、X方向の変換では、Z座標jzと波数空間のY座標kyが特定の値であり、X座標jxが異なる複数の一次変換結果データに対してフーリエ変換に類似の変換が実行される。しかし、これらの複数のデータは同じプロセッサでのY方向の変換によりすでに得られている。こうして、各プロセッサは、式6にしたがって、他のプロセッサとの通信をしないで、そのプロセッサに割り当てられた、3次元実空間のZ座標jzの特定の値に対する、3次元波数空間の座標(kx,ky)に関連するNX*NY個の2次変換結果データ(c''kx,ky,jz)(kx=0〜NX−1、ky=0〜NY−1)を得る。
(ステップ3)データの転置
式7によるZ方向の変換を行うには、3次元波数空間の座標(kx,ky)の特定の値と、3次元実空間のZ座標jzの全ての値に対して得られた2次変換結果データ(c''kx,ky,jz)が必要である。そこで、各プロセッサに、3次元波数空間の座標kxの特定の値を割り当てて、Z方向の変換を実行するに必要なデータをプロセッサ間で転送する処理が実行される。すなわち、各プロセッサへの座標kxの値の割り当てでは、プロセッサ0,1,2,,,7には、kx=0,1,2,3,,,を順次割り当てる。このことは、図5に示すように、3次元波数空間を、そのkx軸に垂直な平面で分割して、分割後の部分空間の各々を一つのプロセッサに割り当てることを意味する。
各プロセッサが、そのプロセッサに割り当てられた3次元波数空間の座標kxの特定の値と、3次元波数空間の座標kyの全ての値と、3次元実空間のZ座標jzの全ての値とに対して得られた全ての2次変換結果データ(c''kx,ky,jz)を使用してZ方向の変換を実行できるように、全プロセッサ間で2次変換結果データの転送が行われる。このデータ転送は、データの転置あるいはデータの並び替えとも言われる。すなわち、各プロセッサは、3次元実空間のZ座標jzの全ての値と、3次元波数空間の座標(kx,ky)の全ての値との組に対して得られた2次変換結果データ(c''kx,ky,jz)(但し、kx=特定値、ky=0〜NY―1、kz=0〜(NZ―1))の内、自プロセッサが生成しなかったデータを他のプロセッサから受信するように、全プロセッサの間で2次変換結果データを転送する。
(ステップ4)Z方向の変換
各プロセッサは、そのプロセッサに割り当てられた3次元波数空間の座標kxの特定の値と、3次元波数空間の他の二つの座標ky,kzの全ての値を有する最終的なフーリエ変換結果データckx,ky,kz(但し、kx=特定値、ky=0〜NY―1、kz=0〜NZ―1)を計算する。各プロセッサはこの計算を互いに並列に実行できる。
(ステップ5)データの転置
しかし以上の処理だけでは、変換対象データfjと変換結果データckのデータ分割形式が異なり、実用上不便であるという問題がある。すなわち、変換対象データfjは、図2に示すように、3次元実空間のデータに写像され、後者のデータは、図4にしたがって分割されて複数のプロセッサに割り当てられた。したがって、図6に示すように、変換対象データfjの分割は、fjを第MOD(j,p)番のプロセッサが担当するサイクリック分割となる。一方、変換結果データckは、図3に示すように、3次元波数空間のデータに写像され、3次元波数空間は図5にしたがって分割されて複数のプロセッサに割り当てられた。したがって、図7に示すように、変換結果データckのデータ分割は、NY個の連続するデータを1台のプロセッサが担当するブロックサイクリック分割となる。
多くの応用では、変換対象データをフーリエ変換して得られる変換結果データに対してある処理を施し、その処理結果に対して再び逆フーリエ変換を行う。逆フーリエ変換はフーリエ変換のプログラムを流用して行われることが多い。すなわち、次の逆フーリエ変換の式
【数8】
fj=Σk=0 N-1ckexp(2πikj/N)
(ただし、j=0,1,...,N-1) ...(8)
を変形すると次式が得られる。
【数9】
fj=(Σk=0 N-1ck *exp(-2πikj/N))*
(ただし、j=0,1,...,N-1) ...(9)
ここで、*印は複素共役を示す。したがって、式1aと9の比較より明らかなように、逆フーリエ変換は、フーリエ変換結果データの複素共役をフーリエ変換し、得られた結果データの複素共役を取ることに等価である。したがって、原理的には、逆フーリエ変換はフーリエ変換のプログラムを流用して実行できることが分かる。しかし、並列計算機でフーリエ変換を実行するときには、変換対象データと変換結果データとのデータ分割形式が異なると、いずれかのプロセッサに割り当てられた変換対象データに対する変換結果データがそのプロセッサに割り当てられていないことになり、そのプロセッサは、その変換結果データを他のプロセッサから受信しないとフーリエ変換のプログラムを流用して逆フーリエ変換を行うことができなくなる。
このような不便を避けるため、従来の転置アルゴリズムを使ったフーリエ変換プログラムでは、上記Z方向の変換を実行した後に、3次元フーリエ変換結果データckx,ky,kzのプロセッサへの割り当てを変更し、再びプロセッサ間でフーリエ変換結果データckx,ky,kzの転置(入れ替え)を行い、フーリエ変換結果データckx,ky,kzのデータ分割をサイクリック分割に直すのが一般的であった。すなわち、図8に示すように、3次元波数空間を、Y座標軸に垂直な平面で切断し、同じY座標値kyを有するフーリエ変換結果データckx,ky,kzを同一のプロセッサに割り当てる。具体的には、ky=0,1,2,,,を有するフーリエ変換結果データckx,ky,kzを順次プロセッサ0,1,2,,,に割り当てる。各プロセッサが、この割り当てにしたがってそのプロセッサに割り当てられたフーリエ変換結果データckx,ky,kzの内、自プロセッサが生成しなかったデータを他のプロセッサから受信するように、全プロセッサの間でフーリエ変換結果データckx,ky,kzを転送する。こうして、サイクリック分割された3次元フーリエ変換結果データが得られる。
こうして、得られた最終的3次元フーリエ変換結果データckx,ky,kzから目的とする1次元フーリエ変換結果データckは式3より得ることができる。データckとその三次元座標kx,ky,kzとの関係は図3に示されたとおりである。
しかし、本発明者による検討によれば、従来のデータのデータ入れ替えのためのプロセッサ間での余分な通信は、並列化効率を低下し、フーリエ変換に必要な処理時間を増大する原因であることが判明した。
そこで本発明では、従来の転置アルゴリズムにおけるデータの分割方式を見直し、プロセッサ間のデータ転送量の削減の側面から最適なデータ分割方式を以下のようにして決定した。
従来の転置アルゴリズムは、Y方向、X方向、Z方向の各変換と、プロセッサ間でのデータの入れ替えを行う転置操作から構成される。そのアルゴリズムでは、Y方向の変換を行う際に、変換対象データの空間をZ軸に垂直な複数の平面で切り、各面を一つのプロセッサに割り当てて、次にX方向の変換を行う際には、その割り当てをそのまま使用し、さらにZ方向の変換を行う際には、X軸に垂直な複数の平面で変換対象データの空間を切り、各面を一つのプロセッサに割り当てていた。これにより、その変換そのものは、プロセッサ間のデータ転送なしに実行できた。
しかし、たとえば最初のY方向の変換を行う際には、変換の対象となる同一のX座標とZ座標を持つNY個のデータが1台のプロセッサ上にありさえすれば、その変換そのものは、プロセッサ間のデータ転送なしに実行できる。したがって、この変換対象データの分割は、Z軸に垂直な平面によってではなく、X軸に垂直な平面によって行ってもよい。このことは、X方向、Z方向の変換についても言える。したがって、望ましいデータ分割方式が満たすべき第一の条件は、「ある方向の変換を行うときには、その変換の変換対象データをその方向以外の方向に垂直な複数の平面で分割してプロセッサへのデータ割り当てをする」というデータ分割形式が、Y方向、X方向、Z方向のすべてに採用されていることである。
今ひとつ考慮すべきことは転置のためのデータ転送回数である。たとえば、Y方向、X方向、Z方向の変換を行うとき、変換対象データをそれぞれZ軸、Y軸、X軸に垂直な複数の平面で切って分割するというデータ分割方式は、上記の第1の条件を満たすが、このデータ分割方式では、データ分割形式がX方向、Z方向の変換を行うときという2回にわたって変更され、その変更の度に転置のためのデータ転送が必要になる。したがって、望ましいデータ分割方式が満たすべき条件として、上記の第1の条件に加えて、「データ分割形式の変更のための転置処理は一回に限る」という第二の条件を付加する。
これら2つの条件を満たすデータ分割方式を数え上げた結果を図9に示す。上記第1、第2の条件を満たすデータ分割方式は4通りあり、これらの内で、フーリエ変換対象データのデータ分割形式とフーリエ変換結果データのデータ分割形式が同一のデータ分割方式が求めるものである。
方式1が従来の転置アルゴリズムで採用されているものである。方式4は入力データがX方向に分割、出力データがY方向に分割だから、図3および図6と照らし合わせてみると、フーリエ変換対象データがブロックサイクリック分割、フーリエ変換結果データがサイクリック分割であり、方式1とはデータ分割形式がちょうど逆になってはいるものの、これらの二つの種類のデータの間でデータ分割形式が異なるという方式1と同様の欠点を抱えていることがわかる。
一方、方式2では、従来の転置アルゴリズムと同じく、フーリエ変換対象データがZ方向に沿って分割され、Y方向の変換、X方向の変換も従来の転置アルゴリズムと同じように実行されるが、Z方向の変換は、従来の転置アルゴリズムと異なり、X方向の変換の結果データがY方向に沿って分割された後に実行される。X方向の変換とZ方向の変換の間では、データ転置が必要である。図2および図3と照らし合わせてみると、フーリエ変換対象データもフーリエ変換結果データもサイクリック分割になることが分かる。したがって、方式2のデータ分割方式を採用すると、フーリエ変換係数の計算後にプロセッサ間でデータ転送を行わなくても、フーリエ変換対象データとフーリエ変換結果データとが同じデータ分割形式を保つ。
この方式2では、フーリエ変換は具体的には以下のようにして実行される。以下に記載するY方向、X方向、Z方向の変換はFFTのアルゴリズムにより計算される。
(ステップa)Y方向の変換
Y方向の変換は、従来の転置アルゴリズムについて既に述べたステップ1の要領で実行される。既に述べたごとく、フーリエ変換対象データのデータ分割は、サイクリック分割である。
(ステップb)X方向の変換
さらに、X方向の変換は、Y方向の変換の結果データに対して、従来の転置アルゴリズムについて既に述べたステップ2の要領でなされる。
(ステップc)データ転置
式7によるZ方向の変換を行うには、3次元波数空間の座標(kx,ky)の特定の値と、3次元実空間のZ座標jzの全ての値に対して得られた2次変換結果データ(c’’kx, ky, jz)が必要である。方式2では、従来の転置アルゴリズムと異なり、X方向の変換で得られた2次変換結果データ(c’’kx, ky, jz)は、Y軸に垂直な複数の平面で分割される。このことは、図8に示すように、3次元波数空間を、そのky軸に垂直な複数の平面で分割して、分割後の部分空間(上記複数の平面)の各々を一つのプロセッサに割り当てることを意味する。すなわち、各プロセッサへ座標kyの特定の値を割り当てる。具体的には、k y=0,1,2,3,,,の2次変換結果データ(c’’kx, ky, jz)を順次プロセッサ0,1,2,,,7に割り当てる。
この割り当てに従い、Z方向の変換を実行するに必要なデータをプロセッサ間で転送する処理が実行される。各プロセッサが、そのプロセッサに割り当てられた3次元波数空間の座標kyの特定の値と、3次元波数空間の座標kxの全ての値と、3次元実空間のZ座標jzの全ての値とに対して得られた全ての2次変換結果データ(c''kx,ky,jz)を使用してZ方向の変換を実行できるように、全プロセッサ間で2次変換結果データの転送が行われる。すなわち、各プロセッサは、3次元実空間のZ座標jzの全ての値と、3次元波数空間の座標kxの全ての値と、座標kyの特定の値との組に対して得られた2次変換結果データ(c''kx,ky,jz)(但し、kx=0〜(NX―1)、ky=特定値、kz=0〜(NZ―1))の内、自プロセッサが生成しなかったデータを他のプロセッサから受信するように、全プロセッサの間で2次変換結果データを転送する。
(ステップd)Z方向の変換
各プロセッサは、そのプロセッサに割り当てられた3次元波数空間の座標kyの特定の値と、3次元波数空間の他の二つの座標kx、kzの全ての値を有する最終的なフーリエ変換結果データckx,ky,kz(但し、kx=0〜NX―1、ky=特定値、kz=0〜NZ―1)を計算する。各プロセッサはこの計算を互いに並列に実行できる。
この結果、座標ky=0,1,2,3,,,に対応するフーリエ変換係数c0,c1,c2,,,が、順次プロセッサ0,1,2,,,で生成され、全フーリエ変換結果データckx,ky,kzは、プロセッサ間でサイクリックに分割されていることが分かる。
本実施の形態では、上記データ分割方式2を使用する。なお、データ分割方式3も後に詳細に説明するように、フーリエ変換対象データもフーリエ変換結果データもサイクリック分割になっている。したがって、この方式3も使用することができる。後に述べるように、実際にフーリエ変換ライブラリを構成する場合に、方式3は、方式2に比べて、ライブラリが生成する複素指数関数の値のテーブルのサイズが小さくてよいという利点を有する。
なお、計算機により入力データfjに対して以上の変換を実施するときには、 一般に配列データが使用される。すなわち、同じプロセッサでY方向の変換を施すべき一群のデータは、3次元配列に格納され、その配列に対してY方向の変換が実行される。その結果得られた1次変換結果データは、同じ配列あるいは他の3次元配列に格納されてもよい。他の方向の変換も先に実行された変換の結果データを格納する配列に対してなされる。また、プロセッサ間でのデータの転置も各プロセッサが生成した配列の内容を交換するようになされる。したがって、このようにそれらの変換において同じ3次元配列を使用するときには、その3次元配列の各次元のインデックスは、あるときには3次元実空間の各座標軸に対応し、他の時にはある方向の変換後の結果データが属する3次元空間の各座標軸に対応し、最終的にはフーリエ変換係数が属する3次元波数空間の各座標軸に対応することになる。しかし、このように同じ配列を異なる種類の一群のデータの格納に使用された場合でも、ある時点でその配列に格納されている一群のデータは、その一群のデータが属する3次元空間に属し、その配列の各インデックスは、その一群のデータが属する3次元空間のいずれかの座標軸を表すことには変わりはない。したがって、本発明を実施するにあたって一群のデータを格納するのに使用する配列の具体的な構造は特定のもの限定されない。さらに、以上の原理で説明したいくつかの3次元空間のいずれか一つに属する一群のデータを格納する配列の構造が、その3次元空間に直接対応しないものであっても、その配列に含まれた各データは、その3次元空間の座標を有すると見なすことができ、以上の原理説明がその配列に対してもあてはまるのは言うまでもない。
(3) 多次元フーリエ変換への応用
以上、1次元フーリエ変換のためのアルゴリズムを説明したが、本方式は多次元フーリエ変換の場合へも簡単に拡張できる。次式の2次元フーリエ変換を例に採って説明する。
【数10】
この式は、次式11に変形できる。この式11は、更に次の2ステップからなる変換式11a、11bとして書くことができる。
【数11】
したがって、2次元フーリエ変換は、まず式11aのようにN1個のデータに対する1次元フーリエ変換をN2組行い、次に式11bのようにN2個のデータに対する1次元フーリエ変換をN1組行うことに帰着する。したがって、これらの1次元フーリエ変換において、本発明の方式を適用できる。
本発明の方式を用いて並列計算機上で2次元フーリエ変換を行うには、2次元データfj1,j2に対し、添え字j1の方向(以下、これを第1方向と呼ぶ)にサイクリック分割を行う。すなわち、第i番目のプロセッサにfm*NPU+i,j2(但し、m=0,1,...,((N1/NPU)-1)、j2=0,1,...,N2)番目の要素を割り当てる。ここで、NPUはプロセッサの台数である。
すると、式11aのステップは、j2が同じN1個の要素の間での1次元フーリエ変換をN2組行うことであり、このN1個の要素はプロセッサ間にサイクリック分割されているから、このステップは本発明の方式による1次元フーリエ変換をN2組行うことに帰着する。変換後のデータc'k1,j2は、第1方向にサイクリック分割されている。
次に式11bのステップでは、j1が同じN2個の要素の間での1次元フーリエ変換をN1組行うが、これらN2個の要素は同一プロセッサ上にあるため、この変換は通信なしに各プロセッサごとに独立に行える。以上により2次元フーリエ変換が完了し、変換後のデータck1,k2は第1方向にサイクリック分割される。
なお、以上では2次元の場合を示したが、より次元の大きい場合も、第1方向にサイクリック分割を行い、第1方向の変換のみを本発明の方式を用いて行い、以下の変換はプロセッサごとに独立に行うことにより、本発明のフーリエ変換方式を適用可能である。
(4)並列高速フーリエ変換ライブラリ
図1に戻り、並列計算機28上で使用される高速フーリエ変換ライブラリは、具体的には、たとえば以下のように構成される。但し、本発明を適用したフーリエ変換ライブラリは、これに限定されないことは言うまでもない。本ライブラリは、全てのプロセッサにロードされ、そのプロセッサ内のシミュレーションプログラムから必要に応じてサブルーチンとしてコールされる。
サブルーチン名称をFFT1Dとし、これを実行するには
CALL FFT1D (NX, NY, NZ, NPU, F, TB, IOPT, IER)
のように所定の引数を指定して、いずれかのプロセッサにロードされたすべてのシミュレーションプログラムから同時にコールする必要がある。ここで、N=NX*NY*NZはフーリエ変換対象データfjの個数、NPUはプロセッサ台数、Fはライブラリのコール時はフーリエ変換対象データfj、ライブラリからのリターン時はフーリエ変換結果データckを格納する配列、TBは複素指数関数の値を格納するテーブル、IOPTはサブルーチンの機能を指定する入力、IERは実行時エラーが生じたか否かを示す出力である。
ここで、配列Fは各プロセッサがそれぞれ持つ部分配列である。フーリエ変換の原理説明で説明したように、全入力データ(フーリエ変換対象データ)fjは、図2のように3次元実空間に直方体状に配置され、各プロセッサには、この直方体の内、一つまたは複数の特定のZ座標を有するZ軸に垂直な平面に属する入力データが割り当てられる。この割り当てられた入力データが、上記引数Fで指定される部分配列に格納されている。すなわち、フーリエ変換対象データとフーリエ変換結果データは、ともにサイクリック分割されるので、第i番目のプロセッサは、m*NPU+i(m=0,1,...,N/NPU−1)番目の要素のみを持つ。すなわち、第i番目のプロセッサの配列Fには、N個の入力データ列fj(j=0〜N−1)の内、次式で示されるように、一群の入力データfm*NPU+iを格納する。
F(m)=fm*NPU+i(m=0,1,...,N/NPU- 1)
したがって各プロセッサの持つ配列Fの大きさはN/NPUである。また、TBは、第1回目のコールで計算した複素指数関数の値を格納しておくテーブルであり、2回目のコールからはここに格納した値を再利用することにより、新たな計算が不要となる。また、第1回目のコールではIOPT=1を指定し、このときは複素指数関数のテーブルを作成する。IOPT=2は2回目以降のコールを意味し、このときは既にTBに格納されている値を用いる。
本ライブラリのフローチャートを図10に示す。本ライブラリは、コールされると (ステップ45) 、まず引数をチェックする(ステップ46)。すなわち、N=NX*NY*NZとNPUとが1以上の整数であるかどうか、IOPTが1または2の値であるかどうかなど、引数の有効性を調べる。入力データに無効な値が入っていた場合は、IER=1000と設定して(処理47)リターンする。
次に、他のプロセッサに本ライブラリがコールされたことを通知する(ステップ48)。この通知は、実際には、そのライブラリがロードされている通信ライブラリに、他の全てのプロセッサに当該プロセッサでのライブラリコールの発生を通知することを要求し、その通信ライブラリが、その発生を他の全てのプロセッサに通知するメッセージを送信し、それぞれの他のプロセッサでは、そこにロードされた通信ライブラリが、このメッセージを受信して、そのプロセッサでロードされた本ライブラリに、送信元のプロセッサでの本ライブラリのコールを通知する。
次に、ライブラリが引数で指定した通りにNPU台のプロセッサでコールされているかどうかをチェックする(ステップ49)。このチェックは、上に述べた他の全てのプロセッサから本ライブラリに対するライブラリコールが発生したとの通知を受信したか否かに基づいて行われる。この条件が満たされていない場合は、IER=2000と設定して(ステップ50)リターンする。次にIOPTの値をチェックし(ステップ51)、IOPT=1の場合は、現在のコールが、最初のコールである。したがって、そのコール元のプロセッサでのフーリエ変換を実行するための準備を行う。具体的には、X、Y、Zの方向の変換のために、そのプロセッサで式5,6,7で使用する複素指数関数の値を前もって計算し、複素指数関数のテーブルを生成し、配列TBとして格納する(ステップ55)。計算すべき複素指数関数の値は、そのプロセッサに対するデータの割り当てにより定まる。すなわち、X、Y、Zの方向の変換の各々においてそのプロセッサが処理すべきデータの3次元実空間の座標jx,jy,jzと3次元実空間の座標kx,ky,kzとを決定し、この結果により、式5から7の複素指数の偏角が採りうるいろいろの値を決定し、それぞれの偏角に対する余弦関数の値と正弦関数の値を計算し、配列TBに格納する。上記決定では、各方向での変換に使用されるデータ分割形式とそのコール元のプロセッサに予め割り当てられたプロセッサ番号と、式2、3が使用される。このプロセッサ番号は、シミュレーションプログラムのロード時に予め各プロセッサに並列計算機28により指定されるものである。各方向での変換に使用されるデータ分割形式は、使用されるデータ分割方式、本実施の形態では前述の方式2、により定まる。
なお、IOPT=1でない場合は、現在のコールが、2回目以降のコールである。このようなコールは、ライブラリのコール元のシミュレーションプログラムが、異なる物理量に対するフーリエ変換を行うようにプログラムされている場合において生じる。たとえば、シミュレーションプログラムが、第1の物理量に対するフーリエ変換のために本ライブラリをコールした後に、第2の物理量に対するフーリエ変換のために本ライブラリを再度コールした場合である。この場合、第2の物理量を表すフーリエ変換対象データも第1の物理量を表すフーリエ変換対象データと同じ添え字を有することが多い。この場合には、第2の物理量に対するフーリエ変換の実行時に、先に配列BTに格納した複素指数の値が使用できる。したがって、IOPT=1でない場合は、ステップ55を実行しない。
次に、Y方向の変換を行う(ステップ56)。本実施の形態では、全プロセッサが持つフーリエ変換対象データを仮想的に図2のような各辺の長さが引数NX,NY,NZの直方体状に並べ、図4に示すように、特定の座標を有するフーリエ変換対象データを同一のプロセッサに割り当てられる。このY方向の変換では、既にステップ1あるいはステップaとして述べたように、各プロセッサは、同じX座標とZ座標とを持つNY個のデータについて、高速フーリエ変換が式5に従い行う。このようなデータの組は全部でNX*NZ組あるため、結局、NX*NZ個の独立なNY次の高速フーリエ変換を行うことになる。プロセッサへのデータの割り当て方式より、各XY平面は1台のプロセッサに担当されているから、この変換処理は通信なしに各プロセッサで独立に行える。
本ライブラリの場合、本ライブラリにより各プロセッサが処理すべき変換対象データは、そのプロセッサで実行されるシミュレーションプログラムにより、引数Fで指定される配列として、そのプロセッサのメモリ(26(図1))にコール前に格納されている。その配列Fの添え字と3次元実空間の座標jx,jy,jzとの関係は、データ分割形式により定まる。したがって、このY方向の変換では、この関係を使用して配列F内の変換対象データに対して式5で指定される変換を実行する。変換で得られた一次変換結果データはそのプロセッサのメモリに記憶される。
具体的には、各プロセッサでは、本ライブラリがコールされると、適当なタイミングで(たとえば、ステップ46で入力データに無効な値が入っていないと判定された時)、各プロセッサは、データ格納用の3次元配列及び第1、第2、第3の3次元の作業配列をメモリ上に確保する。ここでは、データ格納用の3次元配列は、3次元のインデックスの長さが引数NX、NY、NZに等しい。以下ではこれらの3次元の作業配列もデータ格納用の3次元配列と同じ大きさを有すると仮定する。しかし、これらの3次元の作業配列は、以下に説明するデータを格納できる大きさを有すればよく、したがって、これらの作業配列の大きさは適宜変更可能である。さらに、これらの3次元の作業配列の構造も、その使用目的に合致する限り、変更することができる。
データ格納用の3次元配列には、上記引数が指定する配列Fに含まれるデータ点列を以下のようにして格納できる。そのプロセッサに、図2のZ軸に垂直な一つの平面が割り当てられているときには、その一つの平面に属するNX*NY個の入力データが、それぞれのデータのX、Y、Z座標に対応する、上記データ用3次元配列のインデックスを有する位置に格納される。そのプロセッサにZ軸に垂直な複数の平面が割り当てられたときには、各面のデータは同様にして、上記データ用3次元配列の対応するインデックスの位置に格納される。
各プロセッサでは、Y方向の変換はこのデータ格納用の配列を使用して、Z座標が特定の値を有し、Y座標とX座標がいろいろの値を有する一群の入力データに対して、式5により行なわれる。このとき、Z座標が特定の値を有し、X座標が異なる一群の入力データに対してY方向の変換が高速フーリエ変換アルゴリズム(FFT)を用いて実行される。この変換の実行にあっては、X座標が異なる一群のデータに対して、プロセッサ内のベクトル演算器(図示せず)が使用され、パイプライン的に計算が実行される。
その結果得られる1次変換結果データc’jx,ky,jz(但し、jx=0〜NX−1,ky=0〜NY−1,jz=特定値)は、第1の3次元の作業配列の、これらの座標値jx,ky,jzに対応するインデックスのところに格納される。したがって、図2の場合、各プロセッサでは、図2の一つの平面上の一群の入力データに対する1次変換結果データc’jx,ky,jzが、第1の3次元作業配列の、特定の座標jzを有する平面上に格納される。もし、図2において、Z軸に垂直な複数の平面に属する入力データがそのプロセッサに割り当てられているときには、それぞれのZ面に対応する、上記第1の3次元作業配列内の、Z軸に垂直な複数の平面のそれぞれに対応する1次変換結果データc'jx,ky,jzが格納される。
Y方向の変換の終了後、同様にしてX方向の変換を行う(ステップ57)。すなわち、各プロセッサは、すでにステップ2あるいはステップbとして述べたように、各プロセッサは、Y方向の変換で得られた一次変換結果データに対して式6で指定される変換を実行する。変換で得られた2次変換結果データはそのプロセッサのメモリに記憶される。この変換処理も通信なしに各プロセッサで独立に行える。
具体的には、各プロセッサでは、X方向の変換は、Z座標が特定の値を有し、X座標とky座標とがいろいろの値を有する一群の1次変換結果データc’jx,ky,jzに対して、式6により行なわれる。このとき、Z座標が特定の値を有し、ky座標が異なる一群の入力データに対してX方向の変換が高速フーリエ変換アルゴリズム(FFT)を用いて実行される。この変換は、上記第1の3次元作業配列を使用して実行される。この変換の実行にあっては、ky座標が異なる一群のデータに対して、プロセッサ内のベクトル演算器が使用され、計算がパイプライン的に実行される。
その結果得られる2次変換結果データc''kx,ky,jz(但し、kx=0〜NX−1,ky=0〜NY−1,jz=特定値)は、第2の3次元作業配列の、これらの座標値kx,ky,jzに対応するインデックスのところに格納される。したがって、図2の場合、各プロセッサでは、2次変換結果データc''kx,ky,jzは、第2の3次元作業配列の、特定の座標jzを有する一つの平面に格納される。もし、図2において、Z軸に垂直な複数の平面に属する入力データがそのプロセッサに割り当てられているときには、それぞれのZ面に対応する、上記第2の3次元作業配列内の、Z軸に垂直な複数の平面のそれぞれに対応する2次変換結果データc''kx,ky,jzが格納される。
X方向の変換の終了後、プロセッサ間でのデータの転置(入れ替え)を行う。すなわち、今度は既にステップcで述べたように、2次変換結果データの直方体を図8のようにY軸に垂直にスライスし、こうしてできる各面を一つのプロセッサに割り当てる(ステップ58)。既にステップcで述べたように、この割り当てに従い、各プロセッサが自分以外の全プロセッサとの間でそれぞれのプロセッサが生成した2次変換結果データの交換を行う。
具体的には、この転置時には、各プロセッサは、上記第2の作業配列に、そのプロセッサに割り当てられた座標kyの値を有するY軸に垂直な平面に属すべき、kyが特定値で、kx,jzが種々の値を持つ2次変換結果データc''kx,ky,jz(但し、kx=0〜NX−1,ky=特定値,jz=0〜NZ−1)を受信するように、プロセッサ間で2次変換結果データc''kx,ky,jzを交換する。
転置の終了後、Z方向の変換を行う(ステップ59)。すなわち、各プロセッサは、既にステップdで記載したように、そのプロセッサに新たに割り当てられた2次変換結果データに対して、式7により指定される変換を実行し、最終的な3次元のフーリエ変換結果データを生成する。転置により各XZ平面は1台のプロセッサに担当されているから、この変換処理も通信なしに各プロセッサで独立に行える。
具体的には、各プロセッサでは、Z方向の変換は、ky座標が特定の値を有し、kx座標とZ座標とがいろいろの値を有する一群の2次変換結果データc''kx,ky,jzに対して、式7により行なわれる。このとき、ky座標が特定の値を有し、kx座標が異なる一群の入力データに対してZ方向の変換が高速フーリエ変換アルゴリズム(FFT)を用いて実行される。この変換は、上記第2の3次元作業配列を使用して実行される。この変換の実行にあっては、kz座標が異なる一群のデータに対して、プロセッサ内のベクトル演算器が使用され、計算がパイプライン的に実行される。
その結果得られる最終フーリエ変換結果データckx,ky,kz(但し、kx=0〜NX−1,ky=特定値,kz=0〜NZ−1)は、第3の3次元作業配列の、これらの座標値kx,ky,kzに対応するインデックスのところに格納される。したがって、図8のように、一つのプロセッサに一つの座標kyを有す一つの平面が割り当てられた場合、各プロセッサでは、最終フーリエ変換結果データckx,ky,kzは、上記第3の3次元作業配列の、特定の座標kyを有する一つの平面に格納される。もし、図8において、ky軸に垂直な複数の平面がそのプロセッサに割り当てられているときには、それぞれの平面に対応する、上記第3の3次元作業配列内の、ky軸に垂直な複数の平面のそれぞれに対応する最終フーリエ変換結果データckx,ky,kzが格納される。
Z方向の変換が終了すると、一次元の変換対象データfjのフーリエ変換が終了し、重ね合わせの係数ckが求まる。ckの並び方は、原点からまずY方向に、Y方向にNY個行ったら次はX座標が1だけ増え、XY平面上にNX*NY個のデータが並んだら次はZ座標が1だけ増える、という順で並ぶ(図3)。このデータの並び方と図8のデータの分割形式とを照らし合わせることにより、本実施の形態では、出力データckもサイクリック分割になっていることがわかる。上記第3の3次元作業配列内でも、最終フーリエ変換結果データckx,ky,kzはこの並びに対応する並びを有する。ライブラリはこのデータckx,ky,kzを一次元座標kの順に並び替えて一次元配列Fに格納し(ステップ61)、リターンする(ステップ62)。本ライブラリでは、従来法で必要であった変換後のデータ分割形式の変更が不要となり、通信の削減により従来法を上回る並列化効率を得ることが可能となり、フーリエ変換時間を低減できる。
なお、NX,NY,NZの決め方としては、プロセッサ台数をpとすると、Y方向、X方向の変換でZ方向に垂直な面でデータを分割することから、NZ≧pが成り立つ必要がある。また、Z方向の変換ではY方向に垂直な面でデータを分割することから、NY≧pも成り立つ必要がある。
また、並列計算機28の各プロセッサ29がベクトル演算器(図示せず)を備えると仮定した。このような並列計算機では、このベクトル演算器を効率的に使うためには、ベクトル化の対象となるループの長さ(すなわち、同じ演算を受けるデータ群(ベクトルデータ)の要素数であり、ベクトル長とも言われる)をできるだけ長く取る必要があることが知られている。本アルゴリズムで式5から7を計算するときには、このベクトル演算器が使用される。ベクトル化の対象となるループは、フーリエ変換にも並列化にも使わない座標軸の方向で複数のデータに対して同じ演算を実行する計算であり、Y方向、X方向、Z方向の変換において、それぞれX方向、Y方向、X方向での演算となる。したがって、ベクトル演算器の性能を引き出すには、NY≧p,NZ≧pの2つの条件を満たしつつNXとNYをできるだけ大きく取るようにNX,NY,NZを決めることが望ましい。
なお、並列計算機28は、ベクトル演算器を有すると仮定したいが、この演算器がフーリエ変換において必要な全ての演算の一部の演算をパイプライン的に実行できるものでもよい。さらに、並列計算機28がベクトル演算器を有しない並列計算機であっても、ループ長を大きくすることが高速化に有効である場合が多い。また、以上の動作の説明では、並列計算機28がメモリ29と演算器(図示せず)の間に複数のベクトルレジスタを有しないと仮定し、各方向の変換で利用される配列はメモリ29から直接演算器に読み出され、あるいはその変換で生成される配列はメモリ29に直接演算器から書き込まれるかのように説明した。しかし、複数のベクトルレジスタを有する並列計算機では、メモリ29上の配列に対する演算あるいはその演算の結果得られた配列のメモリ29への格納は、これらのレジスタを介して実行させればよいことは当業者に明らかである。
本実施の形態では本ライブラリは逆フーリエ変換を実行するためのプログラムを有しない。後で説明するように、シミュレーションプログラムが逆フーリエ変換を必要とするときには、シミュレーションプログラムの方で、逆フーリエ変換の対象のデータの複素共役データを生成し、そのデータに対してフーリエ変換を本ライブラリに要求する。この複素共役データに対して得られたフーリエ変換データの複素共役をシミュレーションプログラムが生成する。
しかし、本ライブラリにフーリエ変換の機能を持たせることもできる。すなわち、本ライブラリの引数としてフーリエ変換か逆フーリエ変換かを指定する引数を追加し、シミュレーションプログラムが逆フーリエ変換を要求したときには、本ライブラリで、変換対象データの複素共役を求め、これにフーリエ変換を上記のようにして実行し、得られた結果データの複素共役を求め、それを逆フーリエ変換結果データとしてシミュレーションプログラムに戻せばよい。
(5)シミュレーションプログラム
本実施の形態において使用するシミュレーションプログラムの例として気象計算のための並列プログラムを図11に示す。気象計算は本来3次元の計算であるが、現在は計算機能力の制約から2次元で行うことも多い。そこで本実施の形態では、2次元の気象予測対象とする領域(これが計算対象領域となる)の場合を例にとってシミュレーションプログラムを説明する。ユーザは、予め全計算対象領域を複数の部分計算領域に区分し、それぞれをいずれか一つのプロセッサに割り当てる。さらに、各部分計算領域のサイズN1,N2、フーリエ変換で用いるNX,NY,NZなどのパラメータを指定する。ユーザが本プログラムを並列計算機28で使用するときには、まず、ワークステーション1が、並列計算機28内の特定のプロセッサ(たとえばプロセッサ0)と交信して、このプログラムと上記ユーザ指定の情報と、空気の熱伝導率などの計算に使用する物質定数と、全計算対象領域に内の観測によって得られた温度・風速・圧力などの初期値データとを、その特定のプロセッサ0を介して外部記憶装置31に記憶する。その後、その特定のプロセッサ0が、各プロセッサに本プログラムをロードし、全プロセッサで本プログラムを起動する。本プログラムは、並列計算機28内の全プロセッサで全く同じようにして並行して実行される。
本プログラムでは、起動されると、まず計算領域のサイズN1,N2、フーリエ変換で用いるNX,NY,NZ、空気の熱伝導率などの物質定数などのパラメータと、観測によって得られた温度・風速・圧力などの初期値データとを外部記憶装置31から入力する(ステップ32)。本プログラムは、それがロードされたプロセッサがどの部分計算領域に関する計算を実行するかを判断するようにプログラムされていると仮定する。このステップでは、各プロセッサは、プロセッサに依らないで使用される上記パラメータを入力するとともに、外部記憶装置31に記憶された全計算対象領域に対する初期値データの内、そのプロセッサに割り当てられた部分計算領域に関する初期値データを選択して外部記憶装置31から入力する。
なお、上記(3)の「多次元フーリエ変換への応用」の項で述べたように、本発明の方式による2次元高速フーリエ変換では、入力データが第1の座標方向にサイクリック分割されている必要がある。すなわち、サイズN1×N2のメッシュ上で定義されたある物理量Aj1,j2(ただしj1=0, 1, ... ,N1−1,j2=0, 1, ... ,N2−1)のうち,要素Am*NPU+i,j2(m=0,1,...,N1/NPU−1,i=0,1,...,NPU−1, j2=0, 1, ... ,N2−1)は第i番目のプロセッサに割り当てられている必要がある。そこで,本実施の形態のシミュレーションプログラムでも,2次元高速フーリエ変換での入力形式に合わせて,このように第1の座標方向をサイクリック分割することによって得られる部分計算領域を用いる。
その後計算に必要な前処理を行う(ステップ33)。ここで前処理とは、観測によって得られた温度・風速・圧力などのデータに対して補間を行い、計算に必要なメッシュポイントでの温度・風速・圧力などのデータを得ることである。
これらの処理が終わった後、以下に説明する繰り返しループにより各時間ステップでの温度・風速・圧力などの量を順々に求めていく。基礎となる方程式は、以下に示す風速に対する運動方程式、質量保存の式、温度変化を表す式の3本である。
【数12】
du/dt=−2Ω×u−(1/ρ)∇p+Fu ,...(12)
【数13】
dρ/dt=−ρ∇・u ...(13)
【数14】
dT/dt=−κ∇2T+u・∇T ...(14)
ここで、uは風速、pは圧力、Tは温度を表し、Ωはコリオリ力と呼ばれる地球の自転による力、Fuはそれ以外の外力、ρは空気の密度、κは空気の熱伝導率を表す。これらの式から次の時刻でのデータの値を求めるには、まずフーリエ変換により格子点上の温度T、圧力pおよび風速uをそれぞれ波数空間でのデータに変換する。そのために、それぞれの物理量についてのデータについて2次元高速フーリエ変換ライブラリFFT2Dを順次コールする(ステップ34)。ライブラリFFT2Dのコール時には、既に述べた引数を指定する。
波数空間でそれぞれの物理量のデータを微分する(ステップ35)。すなわち、ライブラリFFT2Dから与えられる、各物理量に関するフーリエ変換係数データを波数空間で微分し、その物理量についての、波数空間の格子点上での温度勾配∇T、2次微分∇2T、圧力勾配∇p、風速の発散∇・u等の微分に関連するデータを求める。
各物理量についての上記微分に関連するデータを逆フーリエ変換して、実空間の格子点上での温度勾配∇T、2次微分∇2T、圧力勾配∇p、風速の発散∇・u等の微分に関連するデータを求める(ステップ36)。逆フーリエ変換するには、すでに述べた式8、9を使用する。すなわち、各物理量についての上記微分後のデータの複素共役なデータを生成し、ライブラリFFT2Dをコールしてこの複素共役なデータに対するフーリエ変換を要求する。さらに、得られたフーリエ変換結果データの複素共役なデータを生成し、この生成された複素共役なフーリエ変換結果データを逆フーリエ変換結果データとして使用する。
この後、上記逆フーリエ変換で得られた微分に関連するデータを、式12−14の右辺に代入し、風速u、空気密度ρ、温度Tのそれぞれに関する時間微分を決定し、得られたそれらの時間微分を用いて、次の時間ステップでの温度・風速・圧力を求める(ステップ37)。
なお、ステップ34,35,36で、フーリエ変換により実空間上の格子点のデータを波数空間上のデータに変換してそこで微分関連データを求め、得られた微分関連データを逆フーリエ変換して実空間に関する微分関連データを得るのは、その方が微分が精度良く計算できるからであり、本シミュレーションプログラムでは、この計算部分で2次元フーリエ変換ライブラリFFT2Dを用いる。
上記のループでは、各時間ステップ毎に、求める時刻までの計算が終了したかどうかを判定し(ステップ38)、終了したら、後処理を行い(ステップ39)、予測結果データとして出力する(ステップ40)。後処理では、主に計算を行うメッシュポイントと予測結果データが必要な点とがずれている場合に、計算結果データを補間して必要な点での予測値を計算するなどの処理を行う。出力処理40では、各プロセッサは、生成したデータを外部記憶装置31に書き戻し、上記特定のプロセッサはシミュレーションプログラムの実行終了時に、このデータをワークステーション1に一つの結果データとして転送する。
なお、以上ではシミュレーションプログラムは、並列計算機28内の全プロセッサで全く同じようにして並行して実行されると仮定した。さらに、それがロードされたプロセッサがどの部分計算領域に関する計算を実行するかを判断するようにプログラムされていると仮定する。しかし、本発明に依るフーリエ変換を利用するプログラムはこのようなプログラムに限定されないことはいうまでもない。上記フーリエ変換ライブラリFFT2Dを使用するには、それぞれのライブラリが要求する上記複数の引数を指定することが必要であり、それらの引数の生成あるいは獲得は他の方法でも良い。たとえば、本プログラムは、並列計算機28内の特定の一つのプロセッサで実行される単独処理部分と全プロセッサで並行して実行される並列処理部分とから構成されてもよい。たとえば、本プログラムがいずれかのプロセッサで起動されたときに、そのプロセッサが上記特定の一つのプロセッサであるときにその単独処理部分が実行され、そうでないときには上記並列処理部分のみが実行される。上記単独処理部分では、各プロセッサが担当する部分計算領域を判断し、その結果を他のプロセッサに通知するように構成できる。
上記の例では気象予測計算を行う場合を例にとって説明したが、本発明の手法は、これ以外の応用例についても、並列計算機上で高速フーリエ変換を用いてシミュレーションを行う場合に適用できることは明らかである。一次元フーリエ変換ライブラリFFT1Dについても全く同様である。
<発明の実施の形態2>
上記の実施の形態1では、フーリエ変換ライブラリは、図9の方式2を採用した。しかし、本実施の形態では、フーリエ変換ライブラリは、図9の方式3を採用する。この方式3では、Y方向の変換を行った後で転置を行い、その後X方向とZ方向の変換を行う。
この方式2では、フーリエ変換は具体的には以下のようにして実行される。
(ステップa’)Y方向の変換
Y方向の変換は、従来の転置アルゴリズムについて既に述べたステップ1あるいはa’の要領で実行される。既に述べたごとく、フーリエ変換対象データのデータ分割は、サイクリック分割である。
(ステップb’)データ転置
式6によるX方向の変換を行うには、3次元波数空間の座標kyの特定の値と、3次元実空間の座標(jx,jz)の全ての値に対して得られた1次変換結果データc'jx,ky,jzが必要である。方式3では、方式2と異なり、Y方向の変換で得られた1次変換結果データc'jx,ky,jzは、Y軸に垂直な複数の平面で分割される。このことは、図8に示すように、3次元波数空間を、そのky軸に垂直な複数の平面で分割して、分割後の部分空間(上記複数の平面)の各々を一つのプロセッサに割り当てることを意味する。すなわち、各プロセッサへの座標kyの特定の値を割り当てる。具体的には、ky=0,1,2,3,,,の1変換結果データc'jx,ky,jzを順次プロセッサ0,1,2,,,7に割り当てる。
この割り当てに従い、後にX方向の変換を実行するに必要なデータをプロセッサ間で転送する処理がここのステップb’で実行される。各プロセッサが、そのプロセッサに割り当てられた3次元波数空間の座標kyの特定の値と、3次元実空間の座標(jx,jz)の全ての値とに対して得られた全ての1次変換結果データc'jx,ky,jzを使用してX方向の変換を実行できるように、全プロセッサ間で1次変換結果データの転送が行われる。すなわち、各プロセッサは、3次元実空間の座標(jx,jz)の全て値と、3次元波数空間の座標kyの特定の値との組に対して得られた1次変換結果データc'jx,ky,jz(但し、jx=0〜(NX―1)、jz=0〜(NZ―1)、ky=特定値)の内、自プロセッサが生成しなかったデータを他のプロセッサから受信するように、全プロセッサの間で2次変換結果データを転送する。
(ステップc’)X方向の変換
次に、X方向の変換を実行する。各プロセッサは、式6により、他のプロセッサとの通信をしないで、そのプロセッサに割り当てられた3次元波数空間の座標kyの特定の値と、3次元波数空間の座標kxの全ての値と、3次元実空間の座標jzの全ての値に関連するNX*NZ個の2次変換結果データ(c''kx,ky,jz)(kx=0〜NX−1、jz=0〜NZ−1)を得る。
(ステップd’)Z方向の変換
各プロセッサは、そのプロセッサに割り当てられた3次元波数空間の座標kyの特定の値と、3次元波数空間の他の二つの座標kx、kzの全ての値を有する最終的なフーリエ変換結果データckx,ky,kz(但し、kx=0〜NX―1、ky=特定値、kz=0〜NZ―1)を計算する。各プロセッサはこの計算を互いに並列に実行できる。
この結果、座標ky=0,1,2,3,,,に対応するフーリエ変換係数c0,c1,c2,,,が、順次プロセッサ0,1,2,,,で生成され、全フーリエ変換結果データckx,ky,kzは、プロセッサ間でサイクリックに分割されていることが分かる。
本方式は、実施の形態1で使用した方式2に比べ、複素指数関数テーブルを格納する配列BTの容量の点で有利となる。実際、式6により、X方向の変換における複素指数関数の値はX方向、Y方向のインデックスのみに依存し、Z方向のインデックスには依存しない。したがって、実施の形態1のようにX方向の変換においてZ軸に垂直な分割を採用した場合には、各プロセッサが同じテーブルを重複して持つことになる。それに対して本方式では、分割をY軸に垂直な面で行うので、各プロセッサが自分の計算に必要なテーブルの一部分のみを持つことになり、重複はない。これにより、本方式ではX方向の変換に必要なテーブルの大きさが1/(プロセッサ台数)に削減できる。
本実施の形態では、ベクトル化の対象となるループはY方向、X方向、Z方向の変換において、それぞれX方向、Z方向、X方向となるので、ベクトル並列計算機の性能を引き出すには、NY≧p,NZ≧pの2つの条件を満たしつつNXとNZをできるだけ大きく取るのがよい。
<発明の実施の形態3>
本実施の形態において対象となる並列計算機は、実施の形態1で説明した図1の並列計算機システムとほぼ同様であるが、各プロセッサは同一のベクトル演算器を内蔵し、かつ、外部記憶装置中32に、そのベクトル演算器の性能に関するデータベースを持つ。ベクトル演算器の演算性能とはたとえば単位時間あたりに実行可能な演算回数である。ベクトル演算器性能データベース中には、ベクトル演算器の性能データがループ長Lの関数(g(L))の形で格納されている。
実施の形態1では、フーリエ変換のためのパラメータNX,NY,NZはプログラムへの入力として決定していたが、これを並列計算機28の各々のプロセッサを構成するベクトル演算器の特性に応じて最適化することにより、さらに効率的な計算が可能となる。一般に、ベクトル演算器の演算性能は、ループ長Lの関数g(L)である。g(L)は通常、Lに対して単調に増加する関数である。いま、実施の形態1のフーリエ変換方式でY方向の変換を計算するステップの演算量を考えると、NY次のフーリエ変換を一回行うための演算量はNYlogNYであり、これをNX*NZ組計算するから、全体での演算量はNX*NY*NZlogNY=NlogNYである。同様にして、NX方向、NZ方向での演算量は、それぞれNlogNX、NlogNZである。一方、それぞれの演算におけるベクトル化のループ長は、実施の形態1で述べたようにNX,NY,NXであるから、ベクトル演算器の演算性能はそれぞれg(NX),g(NY),g(NX)となる。演算時間tは演算量を演算性能で割ることによって得られ、合計で
t=NlogNY/g(NX)+NlogNX/g(NY)+NlogNZ/g(NX)
となる。したがって、プロセッサ台数をpとするとき、NX≧p,NZ≧pという条件の下でtを最小化するようにNX,NY,NZを決めることにより、ベクトル演算器の性能を最大限に発揮できる高速フーリエ変換が実現できる。
本実施の形態でのライブラリのフローチャートを図12に示す。処理は、NX,NY,NZの決定部分(ステップ43)を除いては、実施の形態1(図10)と同様である。ステップ43では、上記ベクトル演算器性能データベースを用いて、NX≧p,NZ≧pという条件の下で上記演算時間tを最小化するようにNX,NY,NZを決める。その後の処理は、実施の形態1と同様である。このライブラリへのコール文ではシミュレーションプログラムはこれらのパラメータNX,NY,NZを指定する必要はない。本実施の形態の方式によれば、ユーザは自分でNX,NY,NZを計算することなく、ベクトル演算器を内蔵する並列計算機の性能を最大限に引き出すことが可能となる。
なお、NとNPUとが一般の整数の場合には、NX,NY,NZを変えることにより、入力データのプロセッサへの分割形式も変更する必要があるが、フーリエ変換でもっともよく利用される、NおよびNPUが共に2のべき乗の場合には、NX,NY,NZを変えても、分割形式を変更する必要がない場合がある。
実際、2つの組(NX,NY,NZ)=(NX1,NY1,NZ1)、(NX2,NY2,NZ2)が共にNY≧NPU,NZ≧NPUの2つの条件を満たしているとき、入力データfjを図2に示す順番で直方体状に並べ、これをZ軸に垂直な面でスライスして、各面をサイクリックにプロセッサ0,1,...,NPU−1に割り当てたとする。すると、(NX,NY,NZ)=(NX1,NY1,NZ1)の場合は、fjの属する面は上からMOD(fj,NZ1)+1番目であり、この面を担当するプロセッサの番号は
MOD(MOD(fj,NZ1),NPU)
である。一方、(NX,NY,NZ)=(NX2,NY2,NZ2)の場合も同様にして、fjを担当するプロセッサの番号は
MOD(MOD(fj,NZ2),NPU)
となる。ところが、いまNZ1≧NPU,NZ2≧NPUであり、NZ1,NZ2,NPUはすべて2のべき乗であるから、NZ1,NZ2は共にNPUの倍数である、したがって、
すなわち、fjを担当するプロセッサの番号は、どちらの場合も同じである。
以上の考察より、NおよびNPUが共に2のべき乗で、NY≧NPU,NZ≧NPUの2つの条件が成り立っている限り、NX,NY,NZを変えても、入力データfjのプロセッサへの分割形式は変更する必要がないことがわかる。
このことを利用し、分割形式を変えずに済む範囲でNX,NY,NZの最適化を行えば、分割形式変更に伴う新たな通信オーバーヘッドを生じることなく、ベクトル演算器を含む並列計算機での処理速度、具体的には、フーリエ変換速度を向上させることができる。
<発明の実施の形態4>
本発明による高速フーリエ変換を用いてシミュレーションを行う他の例として、半導体デバイス等における電子構造計算を説明する。電子構造計算は、その結果を利用して半導体デバイスの設計、とくにデバイス構造の決定に使用されている。
電子構造計算では、2次元または3次元のメッシュで定義された電子の波動関数u(r)を、次のシュレディンガー方程式
【数15】
に従って計算することにより、半導体の性質を決定するバンドギャップの大きさや、結晶の構造安定性などを求める。ただし、上式で、hはプランク定数、mは電子の質量、Eは対象とする波動関数のエネルギーレベル、Vは結晶中の原子や他の電子によるポテンシャルエネルギーを表す。
式15の計算では、波動関数u(r)の2次微分∇2u(r)が必要であるが、気象計算の例において述べたのと同様な理由により、この部分はu(r)をフーリエ変換により波数空間に移してから計算し、結果を逆フーリエ変換で再び実空間に戻す。したがって、並列計算機上で電子構造計算を行う場合には、この部分で本発明の高速フーリエ変換方法が適用できる。
<変形例>
本発明は、以上の実施の形態に限定されるのではなく、以下に例示する変更あるいは変形以外のいろいろの変更あるいは変形により実現可能である。
(1)本発明によるフーリエ変換方法は、シミュレーションに限らず他の用途にも使用できるのは言うまでもない。たとえば、伝送される信号あるいは地震波等の波動の解析に利用でき、解析の結果を用いて、信号伝送に関係する装置、例えば伝送装置あるいは伝送線路の設計を行うことができ、あるいは地震を利用した応用、例えば資源開発等にも利用できる。
(2)以上の実施の形態では、フーリエ変換変換はそのために用意されたフーリエ変換ライブラリにより実行された。しかし、本発明は、フーリエ変換を使用するアプリケーションプログラム自身にこのフーリエ変換手順を実行するプログラムを組み込んでもよいことは明らかである。このようなシミュレーションプログラムは。プログラムを磁気記憶装置のようなプログラム記録媒体に記憶して販売できる。
(3)本発明は、フーリエ変換対象データfjが実データであるときにも適用できる。その場合に、Y方向等の変換のときに、係数の計算においては、虚数部の計算を省略することができる。
以上から明らかなように、本発明によれば、並列計算機を使用してフーリエ変換を従来より高速に実行できる。たとえば本出願人により開発された並列計算機SR2201を用いて本発明の効果を評価した結果では以下の通りである。3次元フーリエ変換を実行する場合、従来法では、256×256×256のサイズのデータを256台のプロセッサを用いて変換するのに、約0.26秒の時間が必要である。この内訳は、計算に0.14秒、途中でのデータの転置に0.06秒、最後のデータの並べ替えに0.06秒の時間がかかる。実施の形態1あるいは2に記載の方法によれば、計算と転置の時間は従来法と同じであり、最後のデータの並べ替えが省略できるので、0.20秒でフーリエ変換を行うことができ、約24%の高速化が達成できる。とくに、実施の形態1で記載した気象計算を、3次元フーリエ変換を用いて行う場合、気象計算では全計算時間の約50%がフーリエ変換で占められるため、約12%の高速化が得られる。また、実施の形態4で記載した電子構造計算を3次元フーリエ変換を用いて行う場合、通常全実行時間の30%程度がフーリエ変換で占められるため、約7%の高速化が達成できる。
【発明の効果】
以上説明したように、本発明によれば、並列計算機上でのフーリエ変換を高速に実行できる。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態で使用する並列計算機の概略構成図。
【図2】本発明の第1の実施の形態で使用する一次元変換対象データの3次元データへの写像を説明する図。
【図3】本発明の第1の実施の形態で使用する一次元変換結果データの3次元データへの写像を説明する図。
【図4】本発明の第1の実施の形態で使用する、プロセッサへデータを割り当てる第1の方法を示す図。
【図5】従来技術で使用する、プロセッサへデータを割り当てる他の方法を示す図。
【図6】本発明の第1の実施の形態で使用する、一次元変換対象データのプロセッサ間データ分割形式を説明する図。
【図7】従来技術による、一次元変換結果データのプロセッサ間データ分割形式を説明する図。
【図8】本発明の第1の実施の形態で使用する、プロセッサへデータを割り当てる第2の方法を示す図。
【図9】本発明に至る前に比較検討した、複数のフーリエ変換変換手順を示す図。
【図10】本発明の実施の形態1で使用するフーリエ変換ライブラリのフローチャート。
【図11】本発明の実施の形態1で使用するシミュレーションプログラムのフローチャート。
【図12】本発明の実施の形態3で使用するフーリエ変換ライブラリのフローチャート。
Claims (2)
- それぞれに専有のメモリを備えた複数のプロセッサを有する分散メモリ型並列計算機で実行するためのフーリエ変換方法であって、
一次元の変換対象データf0,f1,・・・,fN-1を、X軸、Y軸、Z軸を持つ3次元データ空間の直方体状の格子点上に、座標がZ方向、X方向、Y方向の順に変化するように順次に並べ、並べることで得られる3次元配列データについて同じZ座標をもつ全てのデータは同一のプロセッサに分配されるようにZ軸と垂直な複数平面で分割し、分割された3次元配列データを各々上記複数のプロセッサのいずれかに割り当て、
上記3次元配列データのY方向に関する第1のフーリエ変換処理、及びX方向に関する第2のフーリエ変換処理を、上記データ割り当てをされた各プロセッサで順次行い、
上記各プロセッサの前記第2のフーリエ変換の結果である3次元波数空間上の配列データ(c’’kx, ky, jz)を、同じky座標をもつ全てのデータは同一のプロセッサに分配されるようにky軸と垂直な複数平面で分割した分割状態に、上記複数のプロセッサ間で割り当て直すために、上記各プロセッサ間で上記配列データの転置を行い、
上記各プロセッサ間のデータの転置が行われた配列データ(c’’kx, ky, jz)のZ方向に関する第3のフーリエ変換処理を、上記転置に伴い割り当て直された各プロセッサで行い、
もって上記変換対象データf0,f1,・・・,fN-1のフーリエ変換結果C0,C1,・・・,C N-1を上記複数のプロセッサ間でサイクリック分割された状態で得ることを特徴とするフーリエ変換方法。 - それぞれに専有のメモリを備えた複数のプロセッサを有する分散メモリ型並列計算機によりフーリエ変換を実行するためのプログラムを記憶した、上記計算機により読み取り可能なプログラム記録媒体であって、
上記プログラムは、
一次元の変換対象データf0,f1,・・・,fN-1を、X軸、Y軸、Z軸を持つ3次元データ空間の直方体状の格子点上に、座標がZ方向、X方向、Y方向の順に変化するように順次に並べ、並べたことで得られる3次元配列データについて同じZ座標をもつ全てのデータは同一のプロセッサに分配されるようにZ軸と垂直な複数平面で分割し、分割された3次元配列データを各々上記複数のプロセッサのいずれかに割り当てるステップ、
上記3次元配列データのY方向に関する第1のフーリエ変換処理、及びX方向に関する第2のフーリエ変換処理を、上記データ割り当てをされた各プロセッサで順次行うステップ、
上記各プロセッサの前記第2のフーリエ変換の結果である3次元波数空間上の配列データ(c’’kx, ky, jz)を、同じky座標もつ全てのデータは同一のプロセッサに分配されるようにky軸と垂直な複数平面で分割した分割状態に、上記複数のプロセッサ間で割り当て直すために、上記各プロセッサ間で上記配列データの転置を行うステップ、及び
上記各プロセッサ間のデータの転置が行われた配列データ(c’’kx, ky, jz)のZ方向に関する第3のフーリエ変換処理を、上記転置に伴い割り当て直された各プロセッサで行い、もって上記変換対象データf0,f1,・・・,fN-1のフーリエ変換結果C0,C1,・・・,C N-1を上記複数のプロセッサ間でサイクリック分割された状態で得るステップを有することを特徴とするプログラム記録媒体。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP37768498A JP4057729B2 (ja) | 1998-12-29 | 1998-12-29 | フーリエ変換方法およびプログラム記録媒体 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP37768498A JP4057729B2 (ja) | 1998-12-29 | 1998-12-29 | フーリエ変換方法およびプログラム記録媒体 |
Publications (3)
| Publication Number | Publication Date |
|---|---|
| JP2000200261A JP2000200261A (ja) | 2000-07-18 |
| JP2000200261A5 JP2000200261A5 (ja) | 2005-09-08 |
| JP4057729B2 true JP4057729B2 (ja) | 2008-03-05 |
Family
ID=18509076
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP37768498A Expired - Fee Related JP4057729B2 (ja) | 1998-12-29 | 1998-12-29 | フーリエ変換方法およびプログラム記録媒体 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP4057729B2 (ja) |
Families Citing this family (9)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP1497750A4 (en) | 2001-02-24 | 2011-03-09 | Ibm | EFFICIENT IMPLEMENTATION OF A MULTI-DIMENSIONAL QUICK FOURIER TRANSFORMATION ON A PARALLEL MULTI-NODE COMPUTER WITH DISTRIBUTED MEMORY |
| JP4052181B2 (ja) | 2003-05-23 | 2008-02-27 | 株式会社日立製作所 | 通信隠蔽型の並列高速フーリエ変換方法 |
| GB2409064B (en) * | 2003-12-09 | 2006-09-13 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing in parallel a data processing operation on data elements |
| JP5519951B2 (ja) * | 2008-05-01 | 2014-06-11 | 公立大学法人会津大学 | アレイプロセッサ |
| CN103999039B (zh) * | 2011-10-27 | 2018-08-10 | 英特尔公司 | 具有带有复数指数非线性函数的指令集的数字处理器 |
| JP6511937B2 (ja) | 2015-04-24 | 2019-05-15 | 富士通株式会社 | 並列計算機システム、演算方法、演算プログラム、及び情報処理装置 |
| JP6666548B2 (ja) | 2016-03-14 | 2020-03-18 | 富士通株式会社 | 並列計算機、fft演算プログラムおよびfft演算方法 |
| CN116911146B (zh) * | 2023-09-14 | 2024-01-19 | 中南大学 | 三维重力场全息数值模拟及cpu-gpu加速方法 |
| KR102869624B1 (ko) * | 2023-11-20 | 2025-10-13 | 인하대학교 산학협력단 | 고속 푸리에 변환 하드웨어 가속기 설계 및 검증 방법 및 시스템 |
-
1998
- 1998-12-29 JP JP37768498A patent/JP4057729B2/ja not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| JP2000200261A (ja) | 2000-07-18 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US20240232281A1 (en) | Method, Apparatus, and Device for Performing FFT | |
| US7120658B2 (en) | Digital systolic array architecture and method for computing the discrete Fourier transform | |
| MacFarland et al. | A new parallel P3M code for very large-scale cosmological simulations | |
| JP4057729B2 (ja) | フーリエ変換方法およびプログラム記録媒体 | |
| CN117633418A (zh) | 基于矩阵运算的多维快速傅立叶变换加速方法 | |
| Pelz | The parallel Fourier pseudospectral method | |
| JPH09153029A (ja) | 高速フーリエ変換を行うメモリ分散型並列計算機およびその方法 | |
| US20180373677A1 (en) | Apparatus and Methods of Providing Efficient Data Parallelization for Multi-Dimensional FFTs | |
| Johnson et al. | The design of optimal DFT algorithms using dynamic programming | |
| US6230177B1 (en) | Method and apparatus for performing fast fourier transforms | |
| CN106933777B (zh) | 基于国产申威26010处理器的基2一维fft的高性能实现方法 | |
| Subhash et al. | A GPU parallel algorithm for computing Morse-Smale complexes | |
| US7555509B2 (en) | Parallel fast Fourier transformation method of concealed-communication type | |
| Kulkarni et al. | Massive scaling of massif: Algorithm development and analysis for simulation on gpus | |
| Chen et al. | Optimized computation for determinant of multivariate polynomial matrices on gpgpu | |
| Mozafari et al. | Hartley stochastic computing for convolutional neural networks | |
| Scheiber et al. | Reducing PEC Overhead by Pauli Error Propagation | |
| Mandal et al. | ReMCOO: An efficient representation of sparse matrix-vector multiplication | |
| Rouigueb et al. | Integration of polynomials over n-dimensional simplices | |
| Cao et al. | Towards a Higher Roofline for Matrix-Vector Multiplication in Matrix-Free HOSFEM | |
| Wei et al. | Optimized Multivariate Polynomial Determinant on GPU | |
| Gong et al. | Interval arithmetic-based FFT for large integer multiplication | |
| Mueller‐Roemer et al. | Analysis of schedule and layout tuning for sparse matrices with compound entries on GPUs | |
| Flach et al. | Cell placement on graphics processing units | |
| Chen et al. | A note on radial basis function computing |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050314 |
|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050314 |
|
| RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20050314 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070219 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070508 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070709 |
|
| RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20070709 |
|
| 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: 20071120 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071214 |
|
| R150 | Certificate of patent or registration of utility model |
Ref document number: 4057729 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: 20101221 Year of fee payment: 3 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070709 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101221 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111221 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111221 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121221 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131221 Year of fee payment: 6 |
|
| LAPS | Cancellation because of no payment of annual fees |