我想弄清楚如何在我的主机和设备代码中使用复数。我遇到了 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 还是复数?此外,如果它是一个复数,您可能需要考虑使用 cuFloatComplex
或 cuDoubleComplex
只是为了完全明确。关于c++ - float2 和 cuComplex 有什么区别,用哪个?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4811722/