Index of /staff/pdc/C

      Name                    Last modified       Size  Description

[DIR] Parent Directory 06-Mar-2000 11:06 - [TXT] Makefile 26-Oct-1999 18:29 1k [TXT] fft235mpp.f 26-Oct-1999 21:57 19k [TXT] 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日