4

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

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

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

4

3 回答 3

6

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

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

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

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

于 2011-01-27T06:12:07.160 回答
2

如果您尝试使用 cuBLAS 或 cuFFT,您应该使用 cuComplex。如果您要编写自己的函数,则性能应该没有区别,因为两者都只是两个浮点数的结构。

于 2011-01-27T02:58:30.767 回答
0

IIRC,float2 是 2 个数字的数组。cuComplex(仅从名称上)听起来像 CUDA 的复杂格式。

这篇文章似乎指出在哪里可以找到更多关于 cuComplex 的信息:http ://forums.nvidia.com/index.php?showtopic=81514

于 2011-01-27T00:29:11.277 回答