代码之家  ›  专栏  ›  技术社区  ›  avgn

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

  •  1
  • avgn  · 技术社区  · 6 年前
    1. 使用优化的稀疏例程(如cusparse、eigen或matlab)将CSR稀疏X密集矩阵或密集X CSR稀疏矩阵相乘需要多少浮点运算。

    2. 在稀疏矩阵完全密集的限制下,操作数为 N^2*(2*N-1) -那么,当稀疏矩阵不够稀疏时,为什么稀疏例程比密集例程慢呢?正在做什么额外的工作?

    1 回复  |  直到 6 年前
        1
  •  2
  •   ggael    6 年前
    1. 为了 R += S * D 失败次数为 2*nnz(S)*ncols(D) ,其中nnz表示非零的个数。

    2. 如果稀疏矩阵 S 变为稠密的情况下,触发器的数量与稠密的情况相同,但触发器的数量不是决定速度的唯一标准,内存访问通常更重要。首先,使用稀疏存储,每个访问元素 S 需要额外的间接操作,比如: value[p[k]] 而不是 value[i+j*N] 对于密集的情况。然后,在密集的世界中,出现了阻塞算法,以减少缓存未命中、矢量化(SIMD)和优化指令管道化,从而达到CPU的最大性能。一个有效的密集矩阵积实际上比简单的3个嵌套循环要复杂的多个数量级。 implementation . 很可怕,不是吗?