※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


プランナーフラグ Planner Flags

FFTWのすべてのプラン生成ルーチンは、整数のflags引数をとり、これは以下で定義される0個以上のビット毎定数フラグの、のOR('|')となります。これらのフラグは、プラン生成の計算の厳密性(および時間)に関係し、同時にまた、使われる変換アルゴリズムに制限を加えることも可能です。

重要 : プラン生成時に、入力配列は上書きされます 。したがって、 プラン生成の後に入力配列の初期化を行う 必要があります。これは、FFTW_ESTIMATEフラグを宣言することによってのみ、回避可能です。

プラン生成のの厳密さにかかわるフラグ Planning-rigor flags

FFTW_ESTMATE

FFTW_ESTIMATEは、異なるアルゴリズムを用いたときの計算時間を実測する代わりに、ヒューリスティックかつ高速にプランを決めます(このプラン選択は、おそらく準最適でしょう)。
このフラグを使えば、入出力配列はプラン生成時には上書きされません。

FFTW_MEASURE

FFTW_MEASUREは、実際にいくつかのFFTを計算し実行時間を計測することによって、最適なプランを探索します。ご使用の計算機によって、この操作にはしばし時間がかかるかもしれません(ほとんどの場合2,3秒)。FFTW_MEASUREは、標準のプラン生成オプションです。

FFTW_PATIENT

FFTW_PATIENTは、FFTW_MEASUREと似ていますが、より広範囲のアルゴリズムを考慮にいれるため、"より最適な"プランを生成します(特に大きいサイズの変換の場合)。しかし、プラン生成にかかる時間はいくらか長くなります(特に大きいサイズの変換の場合)。

FFTW_EXHAUSTIVE

FFTW_EXHAUSTIVEはFFTW_PATIENTと似ていますが、さらに広範囲のアルゴリズムを考慮に入れます。一番最適なプランを生成するために、さらにプラン生成に時間をかけて、我々が、速くなりそうにないと考えるようなアルゴリズムも含めてアルゴリズム選択を行います。

アルゴリズム制限フラグ Algorithm-restriction flags

FFTW_DESTROY_INPUT

FFTW_DESTROY_INPUTは、入出力が異なるout-of-place変換の際に、入力配列を上書きすることを許すことを指定します。これによって、時により効率のよいアルゴリズムが採用されます。

FFTW_PRESERVE_INPUT

FFTW_PRESERVE_INPUTは、入出力が異なるout-of-place変換の際に、入力配列の変更を許可しないことを指定します。これは通常デフォルトになっていて、c2rとhc2r(すなわち複素数から実数への変換)変換の時だけ、FFTW_DESTROY_INPUTがデフォルトとなっています。後者の場合、FFTW_PRESERVEを用いることで、入力配列を変更しないアルゴリズムを使うようになりますが、これはパフォーマンスを犠牲にします。しかしながら、 多次元のc2r変換では、入力配列を保存するアルゴリズムは実装されていないので、FFTW_PRESERVEが使われてもプランナーはNULLを返す でしょう。

FFTW_UNALIGNED

FFTW_UNALIGNEDは、入出力配列に特別なメモリ配列を求めない(つまりSIMDなどが使われない)アルゴリズムを指定します。このフラグは、通常プランナーが自動的にメモリ配置が正しくない配列を検知するため不要です。このフラグが唯一使われるのは、グルインターフェースを使って、あるプランを、元の配列とは違うメモリ配置の異なる配列に対して実行したい場合です(fftw_mallocを使っていればこのフラグは不要です)。

プラン生成時間の制限


extern void fftw_set_timelimit( double seconds );

この関数は、FFTWがプラン生成に使う時間の上限を(おおよそ)seconds秒に制限するものです。seconds == FFTW_NO_TIMELIMIT(デフォルトでこの値で、これは負)とすれば、プラン生成所要時間は一切制限されません。その他の場合は、FFTWは指定された時間および探索すべきアルゴリズムの範囲が探索し終わるまで、漸次広範囲のアルゴリズムを探し、最良のプランを返します。
例えば、FFTW_PATIENTが指定されたとすれば、まずFFTW_ESTIMATEモードで探索が行われ、FFTW_MEASUREモード、最後に(時間が許せば)FFTW_PATIEMNTモードと探索が行われます。

ここで、引数secondsは、おおよその制限値であるにすぎないことに注意してください。実際は、中断できない作業の途中で制限時間に達した場合など、指定値より多く時間がかかる可能性があります。最短の場合でも、プランナーはFFTW_ESTIMATEモードを完了するまで実行します(時間制限を0にした場合)。