双精度 CUFFT

CUFFT with double precision

提问人:Pippo 提问时间:1/2/2013 最后编辑:Robert CrovellaPippo 更新时间:8/26/2014 访问量:3160

问:

我在使用 CUDA FFT 库时遇到了一些问题。

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

这可能吗?

特别是,我获得了以下内容:

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

在这一行:

cufftExecC2C(plan, data1, data2, CUFFT_FORWARD);
CUDA FFT 双精度 CUFFT

评论

0赞 talonmies 1/2/2013
什么函数调用产生了编译错误?CUFFT 具有显式类型和 、 、 和操作,用于双复复复数、双复数到双复数和双复数到双复数调用。您根本没有明确问题发生在哪里。cufftDoubleComplexCUFFT_D2ZCUFFT_Z2DCUFFT_Z2Z
0赞 Pippo 1/2/2013
当我尝试使用 nvcc 编译代码时,出现错误error: no suitable user-defined conversion from "cuComplex" to "cuDoubleComplex" exists
0赞 talonmies 1/2/2013
是的,但是您没有在代码中显示的位置。什么操作或函数调用会产生错误?
2赞 sgarizvi 1/2/2013
使用代替 .cufftExecZ2ZcufftExecC2C
1赞 talonmies 1/2/2013
@Pippo:如果您将与编译问题相关的问题编辑到您的问题中以备将来参考,然后接受 sgar91 的回答,这将对下一个出现的人有所帮助。

答:

7赞 sgarizvi 1/2/2013 #1

双精度复数数据类型在 CUFFT 中定义。cufftDoubleComplex

CUFFT 中 fft 的双精度版本是:

cufftExecD2Z() //Real To Complex

cufftExecZ2D() //Complex To Real

cufftExecZ2Z() //Complex To Complex

cufftExecC2C是 FFT 的单精度版本,并期望输入和输出指针的类型为 ,而您传递给它的是指针类型为 。cufftComplexcufftDoubleComplex

对于数据类型,您必须改用该函数,该函数用于双精度数据。cufftDoubleComplexcufftExecZ2Z