识别矩阵乘法算法的减速

时间:2017-02-26 20:44:18

标签: c++ c algorithm performance matrix-multiplication

首先,我知道有很多用于矩阵乘法的算法。对于这个问题,我将考虑以下内容:

算法A:

for(i = 0; i < N; i++)
{
    for(j = 0; j < N; j++)
    {
        prod[i][j] = 0;
            for(k = 0; k < N; k++)
                prod[i][j] += mat1[i][k] * mat2[k][j]
    }
}

算法B:

for(i = 0; i < N; i++)
{
    for(j = 0; j < N; j++)
    {
        temp = 0;
            for(k = 0; k < N; k++)
                temp += mat1[i][k] * mat2[k][j]
        prod[i][j] = temp;
    }
}

同事和我都同意算法B优于(运行时间更快)算法A。但是,我们对B表现更好的原因有不同的推理。

第一个理论是因为我们在最内层循环中替换C[i][j],所以我们执行N 3 较少的指针算术运算,从而导致我们的改进。

第二个理论是因为我们在最内层循环中替换C[i][j],所以我们执行N 3 更少的内存访问,从而导致我们的改进。

问题是:

如何设置实验以隔离这些因素中的每一个,以根据经验确定哪一个(如果有的话)对运行时间有更大的影响?

0 个答案:

没有答案