Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ float2和cuComplex之间的区别是什么?_C++_Cuda_Complex Numbers - Fatal编程技术网

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
也是这样吗?非常感谢。