Chris@10: Chris@10: Chris@10: Words of Wisdom-Saving Plans - FFTW 3.3.3 Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10: Chris@10:
Chris@10: Chris@10: Chris@10:

Chris@10: Next: , Chris@10: Previous: Multi-dimensional Array Format, Chris@10: Up: Other Important Topics Chris@10:


Chris@10:
Chris@10: Chris@10:

3.3 Words of Wisdom—Saving Plans

Chris@10: Chris@10:

Chris@10: FFTW implements a method for saving plans to disk and restoring them. Chris@10: In fact, what FFTW does is more general than just saving and loading Chris@10: plans. The mechanism is called wisdom. Here, we describe Chris@10: this feature at a high level. See FFTW Reference, for a less casual Chris@10: but more complete discussion of how to use wisdom in FFTW. Chris@10: Chris@10:

Plans created with the FFTW_MEASURE, FFTW_PATIENT, or Chris@10: FFTW_EXHAUSTIVE options produce near-optimal FFT performance, Chris@10: but may require a long time to compute because FFTW must measure the Chris@10: runtime of many possible plans and select the best one. This setup is Chris@10: designed for the situations where so many transforms of the same size Chris@10: must be computed that the start-up time is irrelevant. For short Chris@10: initialization times, but slower transforms, we have provided Chris@10: FFTW_ESTIMATE. The wisdom mechanism is a way to get the Chris@10: best of both worlds: you compute a good plan once, save it to Chris@10: disk, and later reload it as many times as necessary. The wisdom Chris@10: mechanism can actually save and reload many plans at once, not just Chris@10: one. Chris@10: Chris@10: Chris@10:

Whenever you create a plan, the FFTW planner accumulates wisdom, which Chris@10: is information sufficient to reconstruct the plan. After planning, Chris@10: you can save this information to disk by means of the function: Chris@10:

     int fftw_export_wisdom_to_filename(const char *filename);
Chris@10: 
Chris@10:

(This function returns non-zero on success.) Chris@10: Chris@10:

The next time you run the program, you can restore the wisdom with Chris@10: fftw_import_wisdom_from_filename (which also returns non-zero on success), Chris@10: and then recreate the plan using the same flags as before. Chris@10:

     int fftw_import_wisdom_from_filename(const char *filename);
Chris@10: 
Chris@10:

Chris@10: Wisdom is automatically used for any size to which it is applicable, as Chris@10: long as the planner flags are not more “patient” than those with which Chris@10: the wisdom was created. For example, wisdom created with Chris@10: FFTW_MEASURE can be used if you later plan with Chris@10: FFTW_ESTIMATE or FFTW_MEASURE, but not with Chris@10: FFTW_PATIENT. Chris@10: Chris@10:

The wisdom is cumulative, and is stored in a global, private Chris@10: data structure managed internally by FFTW. The storage space required Chris@10: is minimal, proportional to the logarithm of the sizes the wisdom was Chris@10: generated from. If memory usage is a concern, however, the wisdom can Chris@10: be forgotten and its associated memory freed by calling: Chris@10:

     void fftw_forget_wisdom(void);
Chris@10: 
Chris@10:

Chris@10: Wisdom can be exported to a file, a string, or any other medium. Chris@10: For details, see Wisdom. Chris@10: Chris@10: Chris@10: