c++ - 使用 for 循环的矩阵乘法会降低性能吗?

标签 c++ performance loops matrix

目前我正在开发一个使用矩阵的程序。我想出了这个嵌套循环来将两个矩阵相乘:

// The matrices are 1-dimensional arrays
for (int i = 0; i < 4; i++)
    for (int j = 0; j < 4; j++)
        for (int k = 0; k < 4; k++)
            result[i * 4 + j] += M1[i * 4 + k] * M2[k * 4 + j];

循环有效。我的问题是:与像这样手动全部写出来相比,这个循环会更慢吗:

result[0] = M1[0]*M2[0] + M1[1]*M2[4] + M1[2]*M2[8] + M1[3]*M2[12];
result[1] = M1[0]*M2[1] + M1[1]*M2[5] + M1[2]*M2[9] + M1[4]*M2[13];
result[2] = ... etc.

因为在嵌套循环中,计算了数组位置,而在第二种方法中,它们没有计算。

谢谢。

最佳答案

与很多事情一样,“视情况而定”,但在这种情况下,我倾向于第二种扩展形式,其表现几乎相同。任何现代编译器都会为您展开适当的循环并处理它。

有两点可能值得提出:

  1. 第二种方法比较丑陋,更容易出错并且编写/维护起来很乏味。

  2. 这是 'premature optimization' 的一个很好的例子(又名万恶之源)。你知道这部分是否是瓶颈吗?这真的是代码中最密集的部分吗?如果我们没有对我们的代码进行基准测试,那么通过这么早的优化,我们会产生第 1 点中的一切,这相当于一种预感。

关于c++ - 使用 for 循环的矩阵乘法会降低性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25514110/

相关文章:

c++注册表没有获得第二个值

c++ - 需要代码帮助,以便它返回并显示 "Menu"

python - 函数内部的函数 - 每次?

python - 函数闭包与可调用类

Java:使用for循环返回列表

c++ - 程序编译失败

c++ - 字符串 vector 的初始化 vector 的编译时间

c++ - header 实现和用于优化的内联关键字

database - Cakephp 循环遍历数据库保存,出于某种原因它只保存在循环的最后一个实例上?

javascript - 无论如何,我可以通过使用循环来减少我的 jQuery 代码吗?