2013-07-04 45 views
5

如果我想处理复数并在内核中对这些复数双数进行简单的数学运算(加法和乘法),应该在程序中包含哪些CUDA头文件?CUDA - 如何处理复杂的数字?

在C++中,我可以乘以一个复杂的双恒定数量>只要它们都加倍。然而,在CUDA中,当我尝试执行简单的数学运算来复杂double> s时,我会遇到很多错误,只要它不与另一个复合double>。我错过了什么?

谢谢!

回答

10

头包括为:

#include <cuComplex.h> 

在一个标准的Linux CUDA安装,它位于:

/usr/local/cuda/include 

您需要检查该头文件,并使用规定的职责它操纵设备上的复数。

要按实数乘以(双)复数,我想:

#include <cuComplex.h> 
... 
double cr = 1; 
double ci = 2; 
double r = 3; 
cuDoubleComplex c = make_cuDoubleComplex(cr, ci); 
cuDoubleComplex result = cuCmul(c, make_cuDoubleComplex(r, 0)); 

编辑:随着CUDA 7 RC刚刚发布的推力V1.8,可以使用推力::复合推力码 CUDA设备代码。这样可以编写更自然的操作,例如:

#include <thrust/complex.h> 
... 
thrust::complex<float> c = thrust::complex<float>(2.0f, 5.0f); 
thrust::complex<float> c2 = c*c; 
float r = c2.real(); 
+0

感谢您的快速响应。我仍然试图解决这个问题..这可能是一个非常愚蠢的问题,但我可以在哪里找到有关不同头文件功能的更多信息?例如,如果你没有提到cuCmul,我就不能通过阅读http://graphics.im.ntu.edu.tw/~bossliaw中的cuComplex.h文件参考找出它的作用。 /nvCuda_doxygen/html/cu_complex_8h.html#ace9e79c66b2bfc9a8adeb1d641b12df4 – user2550888

+0

我不知道有该头或其他可能标题任何其他文件。无论如何,我还没有意识到这一点。 'cuCmul'函数实际上非常简单,并且像[数学基本原理中定义的](http://en.wikipedia.org/wiki/Complex_numbers#Multiplication_and_division)复制了复数乘法。如果你不能像'cuCmul'那样将这个公式转换成C代码,那么我建议学习更多关于包括C语言在内的基本计算机编程。 –

+0

现在我明白了cuCmul函数,但我的意思是说,如果您没有告诉我cuCmul是基本复数乘法的函数,我不会仅仅通过查看头文件引用就知道它,因为它提供了没有迹象表明它做了什么..或者,也许我没有正确使用它,因为我无法弄清楚调用图显示的是什么? 未来,如何知道我可能需要的某个操作是否已具有某个功能? – user2550888