float2和cuComplex之间有什么区别?

时间:2011-01-27 00:19:23

标签: c++ cuda complex-numbers

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

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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

至于是否使用float2cuComplex,您应该使用语义上合适的任何一个 - 是矢量还是复数?此外,如果它是一个复数,您可能需要考虑使用cuFloatComplexcuDoubleComplex才能完全明确。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

这篇文章似乎指出了在cuComplex上找到更多信息的地方:http://forums.nvidia.com/index.php?showtopic=81514