【问题标题】:Is it possible to use BLAS to speed up sparse matrix multiplication?是否可以使用 BLAS 来加速稀疏矩阵乘法?
【发布时间】:2014-08-02 19:32:14
【问题描述】:

我目前正在尝试加快我的大型稀疏(scipy)矩阵乘法。我已经成功地将我的 numpy 安装与 OpenBLAS 以及从今以后的 scipy 链接起来。我已经成功运行了这些tests

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

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

有谁知道我怎样才能让 BLAS 也与 scipy 的 dot 功能一起使用?

【问题讨论】:

  • 你确定这是 .dot 功能的问题,而不是 csr
  • 嗯,是csr自带的点函数

标签: python numpy matrix scipy sparse-matrix


【解决方案1】:

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

例如,matrix-matrix multiplication is implemented here,在csr_matmat_pass_1csr_matmat_pass_2

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

【讨论】:

  • 有道理,谢谢。你知道加速稀疏矩阵的矩阵乘法的任何其他方法吗?我也遇到了内存问题。
  • 可能有,具体取决于您的具体应用。你的矩阵是否有一些已知的稀疏结构,例如对角线、带状、块状?输出矩阵是否具有已知的稀疏结构?我建议您发布另一个问题,在其中提供尽可能多的信息,说明您的矩阵是什么样的,以及您打算如何处理输出。
猜你喜欢
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多