我目前正在尝试加速我的大型稀疏(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的点功能?
答案 0 :(得分:3)
BLAS仅用于密集浮点矩阵。 scipy.sparse.csr_matrix
的矩阵乘法是使用纯C ++函数完成的,这些函数不会对外部BLAS库进行任何调用。
例如,csr_matmat_pass_1
,csr_matmat_pass_2
和{{1}}。
优化的BLAS库经过高度调整,可以通过将密集输入矩阵分解为更小的块矩阵来有效利用CPU缓存,从而实现更好的matrix-matrix multiplication is implemented here。我的理解是这种策略不能轻易应用于稀疏矩阵,其中非零元素可以在矩阵内任意分布。