5
如果我想处理复数并在内核中对这些复数双数进行简单的数学运算(加法和乘法),应该在程序中包含哪些CUDA头文件?CUDA - 如何处理复杂的数字?
在C++中,我可以乘以一个复杂的双恒定数量>只要它们都加倍。然而,在CUDA中,当我尝试执行简单的数学运算来复杂double> s时,我会遇到很多错误,只要它不与另一个复合double>。我错过了什么?
谢谢!
如果我想处理复数并在内核中对这些复数双数进行简单的数学运算(加法和乘法),应该在程序中包含哪些CUDA头文件?CUDA - 如何处理复杂的数字?
在C++中,我可以乘以一个复杂的双恒定数量>只要它们都加倍。然而,在CUDA中,当我尝试执行简单的数学运算来复杂double> s时,我会遇到很多错误,只要它不与另一个复合double>。我错过了什么?
谢谢!
头包括为:
#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();
感谢您的快速响应。我仍然试图解决这个问题..这可能是一个非常愚蠢的问题,但我可以在哪里找到有关不同头文件功能的更多信息?例如,如果你没有提到cuCmul,我就不能通过阅读http://graphics.im.ntu.edu.tw/~bossliaw中的cuComplex.h文件参考找出它的作用。 /nvCuda_doxygen/html/cu_complex_8h.html#ace9e79c66b2bfc9a8adeb1d641b12df4 – user2550888
我不知道有该头或其他可能标题任何其他文件。无论如何,我还没有意识到这一点。 'cuCmul'函数实际上非常简单,并且像[数学基本原理中定义的](http://en.wikipedia.org/wiki/Complex_numbers#Multiplication_and_division)复制了复数乘法。如果你不能像'cuCmul'那样将这个公式转换成C代码,那么我建议学习更多关于包括C语言在内的基本计算机编程。 –
现在我明白了cuCmul函数,但我的意思是说,如果您没有告诉我cuCmul是基本复数乘法的函数,我不会仅仅通过查看头文件引用就知道它,因为它提供了没有迹象表明它做了什么..或者,也许我没有正确使用它,因为我无法弄清楚调用图显示的是什么? 未来,如何知道我可能需要的某个操作是否已具有某个功能? – user2550888