2013-01-02 100 views
1

我遇到了CUDA FFT库的一些问题。双精度CUFFT

我将输入声明为cuDoubleComplex,但编译器返回此类型与cufftComplex类型的参数不兼容的错误。在通过互联网搜索之后,我找到了文件cufft.h,其中有​​这一行。我的问题是,在库cuComplex.h显然,cuComplex有一个浮点精度(typedef cuFloatComplex cuComplex;),但我想双精度。

这可能吗?

特别是,我得到如下:

error: argument of type "cufftDoubleComplex *" is incompatible with parameter of type "cufftComplex *" 

在这一行:

cufftExecC2C(plan, data1, data2, CUFFT_FORWARD); 
+0

什么函数调用会产生编译错误? CUFFT具有明确的“cufftDoubleComplex”类型和“CUFFT_D2Z”,“CUFFT_Z2D”和“CUFFT_Z2Z”操作,用于双倍复合,双倍复合倍增和双倍复合倍数复合调用。你还没有完全清楚问题出在哪里。 – talonmies

+0

当我尝试使用nvcc编译代码时,我得到错误'错误:没有从“cuComplex”到“cuDoubleComplex”的合适的用户定义转换存在' – Pippo

+0

是的,但*其中*代码中没有显示。什么操作或函数调用会产生错误? – talonmies

回答

4

双精度复合数据类型被定义为CUFFT cufftDoubleComplex

在CUFFT FFT的双精度版本是:

cufftExecD2Z() //Real To Complex 

cufftExecZ2D() //Complex To Real 

cufftExecZ2Z() //Complex To Complex 

cufftExecC2C是FFT的单精度版本,并期望的输入和输出指针是cufftComplex类型,而要传递它的一个指针键入cufftDoubleComplex

对于cufftDoubleComplex数据类型,您必须使用函数cufftExecZ2Z,而不是用于双精度数据的函数cufftExecZ2Z