CUFFT parameters for planning Changing the type of planning for CUFFT


I’m going to use CUDA and CUFFT for some image processing functions. Before actually implementing this, I’m interested in the performance gain that will be possible with the use of my 8800GTX. For this purpose I’ve developed some simple benchmark tests, to compare CUFFT and FFTW. This produced a lot of hopeful results, CUFFT is faster in roughly 75% of the cases I tested.

One thing that I ran into however, was that CUFFT has a relatively large overhead in planning the FFT. In most of the cases where CUFFT is slower than FFTW this is because of the planning. In FFTW I used FFTW_ESTIMATE for planning, since it turned out to be the most efficient for me. Since the CUFFT library is based on FFTW, I’d expect that the type of planning would also be a parameter to the CUFFT function calls.

Are there any (undocumented) solutions or work-arounds to change the type of planning for CUFFT, or are there plans to support other types of FFT planning in the near future?
If yes, will there also be options like saving ‘wisdom’ for CUFFT?

Thanks in advance for all replies.

Hey, I’m actually just getting started on a similar project and was wondering if you could share the results of your benchmarks. I’m trying to decide which library to use - this or GPUFFTW…

Thanks a lot!

if you know all fft sizes you may use a array of plan pointer and initialize it on app startup for example. then when needed you use the correct pre-generated plan …
this method i use in seti code …

We can’t use CUFFT until this is resolved. Our modelling software has to depend on a given FFT complex input signal (values and length) being computed on the output exactly the same every time on entirely different runs (not just FFTs within a particular run of the software). I can make the output FFTs from a particular input vector consistent within a single run by saving off the CUFFT plan and reusing it for a given size but I can’t do this

for future runs. The only way to do this is either the FFTW “wisdom” style way where I could precompute the wisdom for all the FFT sizes

we need and load that at the start of the model runs or if the CUFFT plan creation function had a argument to force it to use a particular

FFT algorithm. FFTW doesn’t do the latter but it does the wisdom option. CUFFT doesn’ t seem to have either option.

Without the FFTs being computed in a deterministic way we can’t regression test properly (no way to tell if the difference in a result was a

bug in development or due to the CUFFT plan ‘black box’ picking a different algorithm for Run 2 than it did in Run 1).

It would be really nice if CUFFT exposed a wisdom style interface.


If all variables are the same, the planner will always come up with the same sequence.
You will require size, real/complex, batch, etc. to all be the same.