我有一百萬列x一百萬行的矩陣。用gpgpu做大量矢量計算的最佳方法是什麼?
我algoritm需要做的:
Matrix m = Matrix(rows,cols)
for (colB: cols){
vector currColA = m.getcolumn(colA)
for (colB: cols){
vector currColB = m.getcolumn(colB)
result = currColA.dotProduct(colB)
return result;
}}
或者你也可以說:
Vectors [] v = Vectors[]
for (i: v.length){
vector v1 = v[i]
for (i: v.length){
vector v2 = v[i]
result = v1.dotProduct(v2)
return result;
}}
我的問題:什麼是分配內存和初始化內存的正確方法這個問題:
- 我應該爲整個矩陣分配內存,用全矩陣初始化它, d然後運行算法?
- 或者我應該分配一個向量列表的內存,然後遍歷這個列表?
- 否則??
我擔心的是我想盡量減少傳輸時間到GPU。我試圖通過修改JCublas hello world example以在2個矢量上進行sgemm操作來嘗試這種計算,但是當在大量矢量上進行sgemm操作時,結果是傳輸時間刪除了gpu加速的好處。
Thx! PS:實現可以在任何Java庫中
這是一個稀疏或密集的矩陣?一個100萬×100萬的32位整數或浮點值的密集矩陣需要4000 Gb的內存。這不僅不適合任何GPU內存,也不適合任何不需要專用數據中心的主機系統的內存。你打算做什麼樣的機器? – talonmies
@talonmies我使用一個包含250,000個雙值稀疏向量的數組。任何矢量的長度是1,100,000。 (http://code.google.com/p/matrix-toolkits-java/source/browse/trunk/src/no/uib/cipr/matrix/sparse/SparseVector.java?r=46)。向量*非常稀疏(平均10個值被填充)。目前,我可以使用i7-2860,16Gb筆記本電腦上的多線程來運行它,但需要幾個小時。 – seinecle