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