知の利用-プランの保存 Words of Wisdom - Saving Plans


 FFTWは、プランを保存したり、保存してあるプランを復元したりする方法を実装しています。実際のところは、FFTWがやっていることは、プランを保存して読み込むというだけでなく、もっと一般的なことをやっています。そのメカニズムは、”wisdom(知)”と呼ばれます。ここでは、この特徴を大雑把に説明します。詳細は、4章のFFTW Referenceの21ページを見てください。ここには、FFTWでwisdomをどう利用するかについて、より難しくなりますが、細かいところまで完全に議論が展開されています。

 FFTW_MEASURE,FFTW_PATIENT,FFTW_EXHAUSTIVEオプションで生成されたプランは、最適に近いFFTのパフォーマンスを実現しますが、FFTWは多数の考えうるプランの実行時間を計り、最適なものを選ばなければいけないので、長時間かかるかもしれません。この設定は、同サイズの多数の変換を計算しなくてはいけなくて、最初の計算の時間は無視できるような場合のためにあります。初期化時間を短くするためには、変換が遅くなりますが、FFTW_ESTIMATEというものを用意してあります。wisdomのメカニズムは、(初期化時間も短く、変換も速いという意味で)両者の良い所をとっていることになります。つまり、良いプランを一度計算し、それをに保存して、後で必要なだけ読み込みます。wisdomメカニズムは、実際には多くのプランを一度に保存したり、読み込んだりしますが、それだけではありません。

 プランを作るときにはいつも、FFTWプランナーはwisdomを蓄積します。このwisdomは、プランを再構成するのに十分な情報を持っています。プランを立て終わった後、この情報は以下の関数で保存できます。

void fftw_export_wisdom_to_file( FILE *output_file );

 次の機会に、プログラムを走らせるときには、wisdomをfftw_import_wisdom_from_fileで復元でき(成功すれば、ノンゼロの値が返ってきます)、以前と同じフラグをつかって、プランを再生成することができます。

int fftw_import_wisdom_from_file( FILE *input_file );

 wisdomは、自動的に利用可能なものに対して有効です。つまり、プランナーのフラグがwisdomが生成したプランより”patient”でなかった場合です。たとえば、FFTW_MEASUREで生成されたwisdomは、FFTW_ESTIMATEやFFTW_MEASUREに対し、保存されたものを再利用することができますが、FFTW_PATIENTに対しては使えません。

 このwisdomは、どんどん蓄積されていくもので、FFTWのグローバルで、プライベートな内部データ構造に格納されます。格納サイズは最小限で、wisdomが生成されるデータサイズの対数に比例します。もし、メモリの利用が心配であれば、wisdomとそれに関連するメモリは、次の関数で解放されます

void fftw_forget_wisdom( void );

 wisdomは、ファイルや、文字列や、他のものにも保存することができます。
詳細は37ページ,4.6章のWisdomを参照してください。
最終更新:2008年11月08日 04:03