2014-03-27 39 views
1

使用cusparse,我首先嚐試了疏密乘法與以下尺寸:cusparse疏密乘法X4較大成本比×100更多的時間

C1 [8692 x 8692] = A1 [8692 x 7000 sparse] x B1 [7000 x 8692] 

它需要僅爲0.3秒。然後我做了一個又一個具有以下尺寸:

C2 [8820 x 8820] = A2 [8820 x 32000 sparse] x B2 [32000 x 8820] 

需要取決於什麼是稀疏矩陣變化的時間,但它在30秒至90秒。我能做些什麼來加速它嗎?如果可以減少運行時間,我可以用不同的方法切割矩陣,但我不確定這裏的性能問題。

稀疏矩陣A1和A2存儲在CSR格式中,它們確實具有不好的稀疏模式,但它們同樣不好。下面的兩張圖分別顯示了非零元素在A1和A2中的位置。每列中的非零元素在兩種情況下被控制爲固定在127

Non-zero elements in A1

Non-zero elements in A2

回答

3

從矩陣的稀疏圖案,應該分割矩陣A1在2份與包含大約前8000行的矩陣A11和其餘行中的A12,並使用csrmv兩次。這樣,cusparse將爲每行的線程數選擇更好的啓發式。

您還應該考慮在CUSPARSE 6.0 csrmv2中使用轉換大小寫的新版本。您需要先轉B(使用cublasgeam),並做到:

C = A1 *(B「)」

轉置的情況下要好得多,因爲獲得B都合併。

另一種選擇是使A1密集化(使用cusparsecsr2dense)並使用cublas

+0

非常感謝!我會嘗試。你的意思是csrmm2在cusparse 6中嗎?矩陣B轉置總是更好嗎? – shaoyl85