I’ve modified my CUDA code so that I have my existing single precision float FFT functions for forward and inverse FFTs and some new functions exactly like the single float ones but modified to use the double precision FFTs.
Doing that just required changing the plan type to CUFFT_Z2Z and the exec function to cufftExecZ2Z() and
using the data as cufftDoubleComplex*
But before I even get to the cufftExecZ2Z() the cufftPlan1d() comes back with an CUFFT_INVALID_VALUE error.
I’ve read this means there’s a bad pointer and the only pointer I see in the function arguments is the
cufftHandle, which I have as shown:
int batch = 1;
int pointsperfft = 16384;
cufftResult err = cufftPlan1d(&plan, pointsperfft, CUFFT_Z2Z, batch);
(note the batch and pointsperfft are actually passed as function arguments but I did the above to show the
values and I verified those via printf’ing the values).
My best guess now is that my 8800GTX can’t do double precision for CUDA 2.3 and so trying to use the
cufftPlan1d for CUFFT_Z2Z is failing? I can get my code on a Tesla C1060, maybe that would support this?
UPDATE: Solved, I think, the Programming guide (Appendix A.1.4) suggests I have to have a capability 1.3 card to have double precision support, and the 8800GTX is only 1.0. So to test my CUFFT_Z2Z and use it, I have to go to the Tesla C1060.
UPDATE2: I think I need -arch sm_13 also as a argument to the nvcc compiler