Index of /staff/pdc/C
Name Last modified Size Description
Parent Directory 06-Mar-2000 11:06 -
Makefile 26-Oct-1999 18:29 1k
fft235mpp.f 26-Oct-1999 21:57 19k
testfft.f 26-Oct-1999 21:57 4k
(c) 2・3・5基底一次元並列高速複素数フーリエ変換ルーチン
本ルーチンは、ユーザが入力仕様通りに処理データを分散させたことを前提と
して、2・3・5基底一次元並列高速複素数フーリエ変換を並列に計算する。
●[入力データ仕様]
入力データは、フーリエ変換すべきN個の一次元の複素数データX(1)〜X(N)
をサイクリック分割し、各PEに分散配置する。
一次元配列データをサイクリック分割する場合の全体配列と部分配列の成分間
のインデックス変換式は次のようになる。
PE(Processing Element)台数をNPUとし、自PE番号をME(0〜NPU-1)とした場
合の全体配列 X のインデックス(グローバルインデックス)Jgrobalと、各PE
のインデックス(ローカルインデックス)Jlocal を示す。
JlocalからJgrobalへの変換式
Jgrobal = Jlocal * NPU + ME
●[出力データ仕様]
出力データは、フーリエ変換されたデータが、入力データ仕様と同様に、サ
イクリック分割で出力される。
● [本サブルーチンの入出力仕様]
本サブルーチンは、ユーザが通信に関する処理を初期化した上で、
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
以下に示すように FORTRAN77のサブーチンコールで呼ぶことを前提とする。
CALL FFT(A,B,WW,WWW,N,IP,ME,NPU,IOPT,IERR)
ここで 各引数の説明を以下に示す。
________________________________________________________________
________________________________________________________________
| |
引数名 | 入出力方向 | 説明
----------------------------------------------------------------
A | 入力 | COMPLEX*16型。入力仕様に伴う処理データを
| | 格納する。
| |
----------------------------------------------------------------
B | 出力 | COMPLEX*16型。出力仕様に伴う処理データを
| | 格納する。
| |
-----------------------------------------------------------------
WW | 出力 | COMPLEX*16型。三角関数のテーブルの値が格納
| | される。
-----------------------------------------------------------------
WWW | 出力 | COMPLEX*16型。三角関数のテーブルの値が格納
| | される。
-----------------------------------------------------------------
N | 入力 | INTEGER*4型。問題サイズ。
-----------------------------------------------------------------
IP | 入力 | INTEGER*4型。問題サイズ。
| | N=(2**IP1(1))*(3**IP(2))*(5**IP(3))
-----------------------------------------------------------------
ME | 入力 | INTEGER*4型。自PEのPE番号(0〜NPU-1)。
-----------------------------------------------------------------
NPU | 入力 | INTEGER*4型。全PE数。
-----------------------------------------------------------------
IOPT | 入力 | INTEGER*4型。フーリエ変換の種類を設定する。
| | 1:フーリエ変換 2:逆フーリエ変換
-----------------------------------------------------------------
IERR | 出力 | INTEGER*4型。エラーコード格納用。
-----------------------------------------------------------------
●[テストプログラムについて]
本サブルーチンの利用例として、テストプログラム testfft.f
が提供されている。以降にその利用法を述べる。
○ コンパイル方法
コマンドライン上で
|> make testfft
と入力する。
○ 実行方法
4プロセッサを用いて、パーテイション名 ALL にて実行する場合:
コマンドライン上で
|> mpirun -n 4 -part ALL a.out
と入力する。
○ データ入力方法
テストプログラムの起動に成功すると、以下のような表示がなされる。
|> ?
ここで、 2^16*3^2*5^1(=2949120)点FFTを解く場合、以下の様に入力する。
|> ?
|16,2,1
計算が正常になされたならば、以下のような結果が出力される。
| TIME= 1.60908997058868408
| (0.999999999917215776,2949120.00000000000)
| (2949119.99999999395,1.00000000985132331)
======
1998年 1月31日