稀疏*密集矩阵乘法的运算次数

时间:2018-07-15 06:37:02

标签: matlab matrix sparse-matrix eigen blas

  1. 使用优化的稀疏例程(例如cuSparse或Eigen或Matlab)将CSR稀疏x密集矩阵或稠密x CSR稀疏矩阵相乘需要多少个浮点运算。

  2. 在稀疏矩阵完全密集的极限下,操作数为N^2*(2*N-1)-那么当稀疏矩阵不够稀疏时,为什么稀疏例程比密集例程慢?还有哪些其他工作要做?

1 个答案:

答案 0 :(得分:2)

  1. 对于R += S * D,翻牌次数为2*nnz(S)*ncols(D),其中nnz表示非零数。

  2. 如果稀疏矩阵S变得密集,则触发器数量与密集情况下相同,但是触发器数量不是确定速度的唯一标准,因此内存访问通常更为重要。首先,由于存储稀疏,对S元素的每次访问都将花费额外的间接费用,例如:value[p[k]]而不是value[i+j*N]。然后在密集世界中出现了阻塞算法,以减少缓存丢失,向量化(SIMD)和指令的最佳流水线处理,以达到CPU的最佳性能。实际上,高效的密集矩阵乘积确实比朴素的3个嵌套循环复杂了几个数量级,您可以自己看看Eigen的implementation。是不是很吓人?