2011-01-27 23 views
3

我想弄清楚如何在我的主機和設備代碼中使用複數。我遇到了cuComplex(但找不到任何文檔!)和float2,至少在CUDA編程指南中有所提及。float2和cuComplex之間的區別是什麼?

我應該用什麼?在爲cuComplex頭文件,它看起來像功能與__host__ __device__所以我假定這意味着,這將是確定在任何地方使用這些聲明。

我的原始數據被從文件中讀取到一個std::complex<float>所以我真的不希望弄亂。我猜想爲了在GPU上使用複雜的值,我將不得不從原始的complex<float>複製到cuComplex

回答

5

cuComplex/usr/local/cuda/include/cuComplex.h定義(模的安裝目錄)。有關片段:

typedef float2 cuFloatComplex; 
typedef cuFloatComplex cuComplex; 
typedef double2 cuDoubleComplex; 

也有在那裏方便的功能與複數的工作 - 將它們相乘,建立他們等

至於是否使用float2cuComplex,你應該使用哪個在語義上是否合適 - 是矢量還是複數?此外,如果它是一個複雜的數字,你可能要考慮使用cuFloatComplexcuDoubleComplex只是完全明確。

2

如果你想與你應該使用cuComplex CUBLAS或CUFFT工作。如果你打算編寫你自己的函數,那麼性能應該沒有什麼區別,因爲兩者都只是兩個浮點數的結構。

+0

是啊,我的工作wtih我自己的功能,這需要複雜的值。第二個問題呢 - 我想沒有辦法將我的原始數據(來自第三方lib作爲std :: complex)複製到cuComplex類型中嗎? – Derek 2011-01-27 05:57:53

+0

對於std :: complex 是否應該受到限制,可能會將`reinterpret_cast`重新設置爲`float [2]`。這在實踐中已經是可移植的。 – MSalters 2011-01-27 11:04:08

相關問題