cancel
Showing results for 
Search instead for 
Did you mean: 

Archives Discussions

mapclyps
Journeyman III

Double Precision FFT

modified Apple FFT on GPU or ... ?

Hi there,

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.

cheers,

mapclyps

0 Likes
5 Replies
douglas125
Adept I

Perhaps you could try this:

http://www.cmsoft.com.br/index.php?option=com_content&view=category&layout=blog&id=123&Itemid=181

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.

 

0 Likes

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.

0 Likes

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.

0 Likes

kknox, any word on when single precision REAL ffts will be in the library?  Also, any chance you guys will make it so that we can use the kernels ourselves?

0 Likes

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.

0 Likes