float2和cuComplex之间有什么区别?

Der*_*rek 3 c++ cuda complex-numbers

我试图弄清楚如何在我的主机和设备代码中使用复数.我遇到过cuComplex(但找不到任何文档!)float2,至少在CUDA编程指南中有提及.

我该怎么用?在头文件中cuComplex,看起来函数是声明的,__host__ __device__所以我假设这意味着可以在任何一个地方使用它们.

我的原始数据正在从一个文件读入到一个std::complex<float>所以我真的不想搞砸了.我想为了在GPU上使用复杂的值,我将不得不从原来复制complex<float>cuComplex

Jos*_*der 5

cuComplex定义在/usr/local/cuda/include/cuComplex.h(以你的安装目录为模).相关片段:

typedef float2 cuFloatComplex;
typedef cuFloatComplex cuComplex;
typedef double2 cuDoubleComplex;
Run Code Online (Sandbox Code Playgroud)

还有一些方便的功能可用于处理复杂的数字 - 将它们相乘,构建它们等.

至于是否使用float2cuComplex,你应该使用语义上适当的 - 它是矢量还是复数?此外,如果它是一个复数,您可能需要考虑使用cuFloatComplexcuDoubleComplex只是完全显式.