2010-05-31 248 views
7

我正在嘗試使用OpenCL加速一些計算,部分算法由反轉矩陣組成。是否有任何開源庫或免費代碼來計算在OpenCL或CUDA中編寫的矩陣或常規反演的lu分解(lapack dgetrf和dgetri)?矩陣是真實的和方形的,但除此之外沒有任何其他特殊屬性。到目前爲止,我已經設法在gpu上找到基本的blas矩陣向量操作實現。OpenCL中的矩陣求逆

該矩陣相當小,只有大約60-100行和列,所以它可以在CPU上更快地計算,但它在算法中間使用,所以我不得不將它轉移到主機,計算反過來,然後將結果傳回設備,然後將其用於更大的計算。

+0

您還應該注意,反轉矩陣可能是一項昂貴的操作,特別是對於大型矩陣,並且通常有其他解決手頭問題的方法。 LU分解是一個「構建塊」,可以用來避免做一個真正的逆轉。 – Tom 2010-06-01 11:53:39

回答

5

我在Open CL中沒有實現,但是"Numerical Recipes"和Gil Strang的"Into to Applied Math"都有很好的解釋,它們很容易編碼。 「NR」有你可以適應的C代碼。

計算逆

這是不正確。你沒有用LU分解來計算一個逆,你正在分解這個矩陣。如果你想要反過來,你必須用一系列的單位向量做前向替換。這是一個小而重要的區別。

11
+0

這就是我想要的。唯一的問題是LU分解的內核不使用pivoting,所以對於某些輸入來說,它們的性能可能相當差並且數值不穩定。 – buchtak 2010-07-14 08:27:53

1

我知道這是有點晚了,但如果你正在嘗試做一個矩陣那就是任何矩陣計算小的(60-100行),那麼在CPU上而不是在GPU上的計算速度會更快,因爲將信息從主存儲器複製到GPU的內存需要花費很多時間。如果您想要這樣做,那麼我會建議您考慮使用OpenMP或MPI等並行語言,因爲這樣可以讓您並行化代碼以加速CPU上的計算。