是否可以使用BLAS加速稀疏矩阵乘法?

时间:2014-08-02 19:32:14

标签: python numpy matrix scipy sparse-matrix

我目前正在尝试加速我的大型稀疏(scipy)矩阵乘法。我已经成功地将我的numpy安装与OpenBLAS相连,从此也是scipy。我已成功运行这些tests

当我使用numpy.dot(X,Y)时,我可以清楚地看到性能提升以及同时使用多个核心。但是,当我使用scipy的点功能时,没有看到这样的性能提升,仍然使用一个核心。例如:

x = scipy.sparse.csr_matrix(numpy.random.random((1000,1000)))
x.dot(x.T)

有谁知道我怎么能让BLAS也能使用scipy的点功能?

1 个答案:

答案 0 :(得分:3)

BLAS仅用于密集浮点矩阵。 scipy.sparse.csr_matrix的矩阵乘法是使用纯C ++函数完成的,这些函数不会对外部BLAS库进行任何调用。

例如,csr_matmat_pass_1csr_matmat_pass_2和{{1}}。

优化的BLAS库经过高度调整,可以通过将密集输入矩阵分解为更小的块矩阵来有效利用CPU缓存,从而实现更好的matrix-matrix multiplication is implemented here。我的理解是这种策略不能轻易应用于稀疏矩阵,其中非零元素可以在矩阵内任意分布。