C++ float2和cuComplex之间的区别是什么?
我正在尝试找出如何在主机和设备代码中使用复数。我遇到了C++ float2和cuComplex之间的区别是什么?,c++,cuda,complex-numbers,C++,Cuda,Complex Numbers,我正在尝试找出如何在主机和设备代码中使用复数。我遇到了cuComplex(但找不到任何文档!)和float2,这至少在CUDA编程指南中得到了提及 我应该用什么?在cuComplex的头文件中,函数似乎是用\uuuuuu主机\uuuuuuuuu设备\uuuuuuuuuu声明的,因此我假设这意味着可以在任何位置使用它们 我的原始数据正在从一个文件读入一个std::complex,所以我真的不想弄乱它。不过,我想为了在GPU上使用复数值,我必须将原始的complex复制到cuComplex?IIRC
cuComplex
(但找不到任何文档!)和float2
,这至少在CUDA编程指南中得到了提及
我应该用什么?在cuComplex
的头文件中,函数似乎是用\uuuuuu主机\uuuuuuuuu设备\uuuuuuuuuu
声明的,因此我假设这意味着可以在任何位置使用它们
我的原始数据正在从一个文件读入一个
std::complex
,所以我真的不想弄乱它。不过,我想为了在GPU上使用复数值,我必须将原始的complex
复制到cuComplex
?IIRC,float2是一个由2个数字组成的数组。cuComplex(仅从名称来看)听起来像CUDA的复杂格式
这篇文章似乎指出了在哪里可以找到更多关于cuComplex的信息:如果你想使用cuBLAS或cuFFT,你应该使用cuComplex。如果您要编写自己的函数,那么性能上应该没有差别,因为两者都只是两个浮点数的结构。
cuComplex
在/usr/local/cuda/include/cuComplex.h
中定义(按安装目录进行模块化)。相关片段:
typedef float2 cuFloatComplex;
typedef cuFloatComplex cuComplex;
typedef double2 cuDoubleComplex;
这里还有一些处理复数的方便函数——乘法、生成等
至于是使用
float2
还是cuComplex
,你应该使用语义上合适的——是向量还是复数?此外,如果它是一个复数,您可能需要考虑使用<代码> CuFualApple复合体或<代码> CUUDUBLICOMPLEX <代码>,以便完全明确。是的,我正在使用我自己的函数,这些函数需要复杂的值。第二个问题呢?我想没有办法复制我的原始数据(作为std::complex来自第三方库)必须复制到cuComplex类型中,对吗?有一些讨论是否应该约束std::complex
,使其可以重新解释为浮点[2]
。这在实践中已经是可移植的。我还有一些其他问题,我希望你能提供一个答案。1)float2
在哪里定义?2)从你的答案来看,float2
和cuComplex
是彼此的typedef
s,所以我想说它们是相同的类型。从帖子上看,似乎cuBLAS
>函数只需要cuComplex
,不接受float2
s。是这样吗?3)在您提到的include
文件中,sum、mul等操作没有定义为运算符
重载。对float2
也是这样吗?非常感谢。