2014-03-27 22 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