稀疏矩阵的矩阵乘法速度是否比密集矩阵快?

Is matrix multiplication speed faster for sparse matrixes than dense matrixes?

稀疏矩阵的矩阵乘法速度是否比稠密矩阵快? 举个简单的例子, 做 “[[0,0],[0,0]] 乘以 [[1,1],[1,1]]” 比...快 “[[256,256],[256,256]] 乘以 [[1,1],[1,1]]” ?

执行乘法的机器码算法是这样的:

int mul(int a,int b)
 {
    int result = 0;
    bit sign = sign(a) ^ sign(b);
    a = abs(a); b = abs(b);

    while (b != 0)
     {
        b = b>>1; // shift b right, bit0 into carry
        if (carrySet()) result += a;
        a = a<<1; // shift a left
        // note: checks for overflow being left out
     }
    return (sign==0 ? sum : -sum);
 }

您会很容易地看到,在右操作数中设置的位数越多,对左操作数求和所需的计算就越多。 因此,如果您的矩阵乘法归结为像这样的机器代码乘法,稀疏矩阵的乘法将比密集矩阵快得多。

我在这里无法回答的问题是 FPU 是否会以更有效的方式执行此操作。你会想在这里阅读一些规格。但即使 FPU(或 GPU)正在做某种调整,我怀疑基本的乘法研磨循环看起来有很大不同(对此评论感兴趣。)