FFTSS ライブラリ 1.0(2005/09/20) [はじめに] 本ソフトウェアは科学技術振興機構戦略的創造研究推進事業(CREST) 研究領域「シミュレーション技術の革新と実用化基盤の構築」研究課題 「大規模シミュレーション向け基盤ソフトウェアの開発」(SSIプロジェクト)の 成果の一部として開発を進めています. FFTSS は高速フーリエ変換(Fast Fourier Transform)の計算を行うオープンソース ライブラリソフトウェアです. 本ライブラリの関数インターフェイス等は FFTW3 の インターフェイスと互換性があり, FFTW3 用のアプリケーションを容易に移植する ことができます. 多様な FFT カーネルルーチンを搭載しており, 各計算実行環境に於いて 最適なカーネルのセットを選択して実行プランを構築します. オープンソースの ライブラリではコンパイラで最適化を行い実行バイナリに変換され各環境で 実行されますが, どのようなソースコードが最も高速な演算を実現するかに 関しては実際に試行するまで分からないことが多いため, こうしたプラン構築と いう方法を採用しています. [制限] FFTW3 とインターフェイスに互換性がありますが, その全ての機能を実装している わけではありません. 現段階では「複素数-複素数,長さが2の巾乗の1次元FFT」のみ サポートしています. [ライブラリ関数一覧] fftss_plan fftss_plan_dft_1d(long n, double *in, double *out, int sign, ing flags); 1次元FFTの実行プランの構築. 長さnは2の巾乗でなければならない. fftss_destroy_plan(fftss_plan plan); 実行プランの破棄, 及び確保されたテーブル/作業領域等の解放. int fftss_test_dft_1d(long n, double *in, double *out, int sign, int flags); 利用可能な全FFTカーネルのテスト(デバッグ用途). void *fftss_malloc(long size); メモリ領域の確保. 可能であれば16byte境界で確保される. int fftss_free(void *); fftss_malloc()で確保された領域を解放する. FFTSS独自の関数: void fftss_set(fftss_plan plan, double *in, double *out); 入出力データの場所をプラン構築時に指定したものから変更する. [ヘッダファイル一覧] fftss.h: FFTSS ライブラリを利用するときにインクルードしてください. fftw3compat.h: FFTW3 用に作成されたアプリケーションから FFTSS ライブラリを利用する場合に インクルードしてください. FFTW->FFTSSの置き換え用のマクロ定義等を含み, 内部で fftss.h もインクルードしています. [プラン構築時に指定可能な flags 一覧] * FFTW3 と互換なもの. FFTSS_ESTIMATE: 試行は行わずにプリプロセッサ情報からカーネルを選択する. FFTSS_MEASURE: 試行によって最適なカーネルを選択する. FFTSS_PATIENT: 現状ではFFTSS_MEASUREと同じ. FFTSS_EXHAUSTIVE: 現状ではFFTSS_MEASUREと同じ. FFTSS_PRESERVE_INPUT: 入力データを破壊せずに保存する必要がある場合に指定. このフラグが 指定されていない場合には入力データは破壊される. * FFTSS 独自のもの. FFTSS_VERBOSE 様々なデバッグ情報を標準出力に出力する. FFTSS_INOUT 計算結果を入力データが格納されていた領域に格納する. [リファレンス] SSIプロジェクト http://ssi.is.s.u-tokyo.ac.jp/ FFTW http://www.fftw.org/ FFTSS http://ssi.is.s.u-tokyo.ac.jp/fftss/