【发布时间】:2025-12-03 19:40:01
【问题描述】:
我正在遍历循环,发现在访问循环方面存在显着差异。 我不明白在这两种情况下导致这种差异的原因是什么?
第一个例子:
执行时间; 8 秒
for (int kk = 0; kk < 1000; kk++)
{
sum = 0;
for (int i = 0; i < 1024; i++)
for (int j = 0; j < 1024; j++)
{
sum += matrix[i][j];
}
}
第二个例子:
执行时间:23秒
for (int kk = 0; kk < 1000; kk++)
{
sum = 0;
for (int i = 0; i < 1024; i++)
for (int j = 0; j < 1024; j++)
{
sum += matrix[j][i];
}
}
是什么导致仅仅交换这么大的执行时间差异
matrix[i][j]
到
matrix[j][i]
?
【问题讨论】:
-
引用的局部性(在 C++ 中,原始多维数组以行主要格式存储。)另外,您是否优化了代码? 8 秒(更不用说 23 秒)对于 10 亿个元素来说似乎是一个非常长的执行时间。
-
@Etixpp 哎呀,不,当然是十亿。我仍然不确定有问题的代码是否已经优化。
-
@Massab 你通常应该在测量其性能之前优化代码,否则你可能会得到毫无意义的结果。
-
另外,要在基准测试中使用“显着”一词,请至少对多次运行的结果进行平均,并包括有关标准偏差的信息。
-
@Massab Lol,“几乎”和“有点高或低”在这里真的没有区别。 “显着”是一个强有力的词,尤其是在基准测试环境中。我不是说我怀疑你的结果,下次要准确:)
标签: c++ performance nested-loops