[ English | Japanese ]
FFTW3インタフェース (C用)
概要
FFTW3インタフェースは、FFTW version 3.xとほぼ互換のインタフェースをもつライブラリです (一部の関数および定数は未対応)。 FFTWのヘッダファイルを差し替えるだけで、FFTWを使用しているユーザプログラムから、 Vector Engine向けに高度にチューニングされたASLのフーリエ変換関数を使用することができます。 オリジナルのFFTWは、FFTW公式サイト[1]で公開されているオープンソースのフーリエ変換ライブラリです。 詳細は、FFTWのドキュメント[2]を参照してください。
FFTW3インタフェースの使用方法
ヘッダファイル名の変更
FFTW3インタフェースのヘッダファイルは、オリジナルのFFTWで提供されているものとファイル名が異なります。 FFTW3インタフェースを使用する場合は、以下のようにヘッダファイル名を変更してください。
#include <fftw3.h> ⇒ #include <aslfftw3.h>
複素数型の選択
FFTW3インタフェースでは、複素数型が次のように定義されます。
倍精度複素数 | 単精度複素数 | |
---|---|---|
C++ | complex<double> |
complex<float> |
C99 | double _Complex |
float _Complex |
オリジナルFFTW | double[2] |
float[2] |
オリジナルのFFTWと同じ配列型で利用したい場合、
コンパイルオプションとして -DASLFFTW_COMPLEX_LEGACY
を追加してください。
コンパイルとリンク
コンパイルとリンクには、FFTW3のコンパイル方法およびリンク方法を記載しています。
スレッドセーフ性
ASL FFTW3インタフェースは内部でASL統合インタフェースを使用しており、スレッドセーフ性はASL統合インタフェースのそれに準じます。(ASL統合インタフェースのスレッドセーフ性についてはこちらを参照下さい。)
- 逐次版および分散メモリ並列版 (つまり MPI 版)のASLライブラリをリンクした場合、ASL FFW3インタフェースの関数はスレッドセーフでありません。特定のスレッドがプランを生成、破棄している間に、他のスレッドがライブラリ呼び出しを行わないようにしなければなりません。この要件を満たせば、各スレッドで異なるプランが用いられている場合に限り、複数スレッドから同時にライブラリ呼び出しを行えます。
並列リージョン内の各スレッドでその関数を呼び出したい場合は、1.と2.の両方を実施してください。- 各スレッドが使用するプランを並列リージョン外で生成および破棄するようにしてください。並列リージョン内ではomp_get_thread_num()が返すスレッド番号に応じて別々のプランを使い分けてください。
- 逐次版または分散メモリ並列版のASLライブラリをリンクしてください。(リンク方法についてはこちらを参照下さい。)
- 共有メモリ並列版およびハイブリッド並列版(共有メモリ並列+MPI版)のASLライブラリをリンクした場合、ASL FFW3インタフェースの関数は部分的にスレッドセーフであり、内部でスレッド並列化されています。プランを生成、破棄することが複数スレッドで同時にできます。
- NEC Numeric Library Collection バージョン 2.3.0以降
プランは複数のスレッド間で共用できます。ただし、FFT実行関数は内部で既にスレッド並列化されていますので、プランはプログラムのマルチスレッド化された部分(例えば並列リージョン)の外で使用することを強く推奨します。 - NEC Numeric Library Collection バージョン 2.2.0以前
プランは複数のスレッドで共用しないでください。FFT実行関数は内部で既にスレッド並列化されていますので、プランはプログラムのマルチスレッド化された部分(例えば並列リージョン)の外で使用することを強く推奨します。
- NEC Numeric Library Collection バージョン 2.3.0以降
FFTW3インタフェースのソースコード
FFTW3インタフェースのソースコードは、以下の圧縮ファイルに格納しています。
/opt/nec/ve/nlc/X.X.X/src/aslfftw3-Y.Y.tar.gz (X.X.XはNEC Numeric Library Collectionのバージョン番号) (Y.YはFFTW3インタフェースのバージョン番号)
BSDライセンスのもとに自由に使用することができます。
利用可能な関数
FFTW3インタフェースで利用可能な関数はFFTW3インタフェース関数一覧に記載しています。
注意事項 |
---|
|
FFTW3インタフェース関数一覧
プラン生成
逐次版 / 共有メモリ並列版 | 分散メモリ並列版 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
プラン実行
逐次版 / 共有メモリ並列版 | 分散メモリ並列版 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
プラン破棄
|
ユーティリティ関数 (共通)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ユーティリティ関数 (逐次版 / 共有メモリ並列版)
|
ユーティリティ関数 (分散メモリ並列版)
|
|
|
|
|
|
|
|
|
|
サンプルプログラム
外部リンク
バージョン情報
- 説明の対象とするAPIバージョン: 1.3
- このマニュアルページのバージョン: 2.2.0-201225