2013-07-04 44 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