2011-09-05 71 views
6

我想將一個物理模擬算法移植到使用OpenCL進行性能的GPU上;我沒有使用OpenCL的經驗,我正在環顧四周。計算大多是小型密集矩陣(3x3)和矢量產品,交叉產品等。opencl矩陣庫

  1. 是否有這樣的基本操作的「標準」/推薦庫?我當然不想碼矩陣乘法和反演自己(而不是時間,這將是inefficent)

  2. 隨着OpenCL的沒有類,操作符重載等,我必須寫mmul(a,mtrans(b))而不是a*b.transpose()例如?

  3. 是否有OpenCL(或預處理器)的某些(計劃的)擴展/演變,以使符號更像數學?我有回到長年的印象。 (我知道有CUDA,但它是供應商綁定)

回答

4

如果您知道您僅限於三維對象,那麼您可以考慮使用double3類型(如果您的gpu不支持雙精度,則使用float3)。

到目前爲止,只有向量被支持,所以你必須自己做一些關於矩陣乘法或者反轉的編碼。但是,您可能對以下內置geometric functions感興趣。特別定義了dot產品和cross產品。

您可能也有興趣知道,有reserved data types爲矩陣期貨implentations:見例如雙ň X。在你的情況下,如果將來可用,你將能夠爲你的矩陣使用double3x3類型。

5

回答您的問題:

  1. 這並不是說我知道
  2. 是,OpenCL是嚴格限制在C99語法,所以沒有類,沒有操作符重載,並且嚴格地程序化調用你想要進行的各種操作。 OpenCL支持對其原生矢量類型進行元素明智的操作,但沒有比這更復雜的操作。矩陣乘法,行列式,轉置等等都必須自己實現。
  3. 不是我所知道的。 [順便說一下,在這種情況下,我不會嘲笑Fortran,F90和更高版本具有內在的矩陣和向量操作,這些操作使得您所要求的操作比C99或C++更容易編寫]。
+0

對不起,我在思考lin-pack的前幾天(當時並不是我正在編程),也就是在有人做了一個很好的實現之前,而不是每個人都爲自己編寫它。通過類比,我認爲Python是一種流行語言的原因之一:「包含電池」。 – eudoxos