【问题标题】:CUFFT with double precision双精度 CUFFT
【发布时间】:2014-08-26 16:23:20
【问题描述】:

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

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

这可能吗?

特别是,我获得了以下信息:

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

在这一行:

cufftExecC2C(plan, data1, data2, CUFFT_FORWARD);

【问题讨论】:

  • 什么函数调用产生了编译错误? CUFFT 具有显式的cufftDoubleComplex 类型和CUFFT_D2ZCUFFT_Z2DCUFFT_Z2Z 操作,用于双复数、双复数到双和双复数到双复数调用。你根本没有说清楚问题出在哪里。
  • 当我尝试使用 nvcc 编译代码时,我得到错误error: no suitable user-defined conversion from "cuComplex" to "cuDoubleComplex" exists
  • 是的,但是您没有显示代码中的 where。什么操作或函数调用会产生错误?
  • 使用cufftExecZ2Z 而不是cufftExecC2C
  • @Pippo:如果您将与编译问题相关的内容编辑到您的问题中以供将来参考,然后接受 sgar91 的回答,这将对接下来的人有所帮助。

标签: cuda fft double-precision cufft


【解决方案1】:

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

CUFFT 中 fft 的双精度版本是:

cufftExecD2Z() //Real To Complex

cufftExecZ2D() //Complex To Real

cufftExecZ2Z() //Complex To Complex

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

对于cufftDoubleComplex 数据类型,您必须使用函数cufftExecZ2Z 代替,该函数用于双精度数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多