I read a few threads about the Apple FFT and the AMD FFT but no one solves my problem.
I currently use a modified Apple OpenCL FFT with double precision constants and double precision variables. This works great on Nvidia GPUs and CPUs with the Stream SDK 2.3, but like in older threads AMD GPUs seem to produce wrong results. At least my 2GB Radeon 5870 produce wrong results.
So the question is now: Does anyone have a double precision FFT working on AMD GPUs or maybe have an idea to solve the problem with the Apple FFT.
I can provide more details on the problem with the Apple FFT if desired and specified.
Perhaps you could try this:
This is an adaptation from Eric's FFT code. The examples are in C# but of course you can just download the sources from the repository and work in whichever language you choose.
EDIT: The example is shown using floatFFT but a double version is also implemented.
Thank you, but It seems a lot of work to convert this to C or C++.... I think I can just keep the kernel strings...
so, if anyone have an Idea to modify the Apple FFT to give right results not only on Nvidia GPUs and CPUs but also on AMD GPUs, I would prefer this way.
AMD is planning on implementing double precision FFT's (we've already created the typedef for it, but creating a plan will return a 'not implemented' code.)
To answer your specific question: There is no easy way to hack our kernels to support double precision.
In general, I can not comment on our feature list or our timelines, I'm sorry. You will see that we created enums for real buffer types, so we do plan on implementing these data types in the future.
In the meantime (if you have not already done so), you can implement a preprocessing step in which you pad the real numbers as complex numbers with 0 as the imaginary components. This is not optimal, but it is functional.