我想弄清楚如何在我的主机和设备代码中使用复数。我遇到了 cuComplex(但找不到任何文档!)和 float2,它们至少在 CUDA 编程指南中得到了提及。

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

我的原始数据正在从文件中读入 std::complex<float>,所以我真的不想弄乱它。我想为了在 GPU 上使用复数值,我必须从原始 complex<float> 复制到 cuComplex

最佳答案

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

typedef float2 cuFloatComplex;
typedef cuFloatComplex cuComplex;
typedef double2 cuDoubleComplex;

那里还有一些方便的函数来处理复数——将它们相乘、构建它们等。

至于是使用 float2 还是 cuComplex ,您应该使用语义上合适的那个——它是 vector 还是复数?此外,如果它是一个复数,您可能需要考虑使用 cuFloatComplexcuDoubleComplex 只是为了完全明确。

关于c++ - float2 和 cuComplex 有什么区别,用哪个?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4811722/

10-11 18:01