【发布时间】:2017-05-21 04:13:45
【问题描述】:
哪个版本更高效,为什么?
似乎两者都进行相同的计算。我唯一能想到的是,如果编译器认识到 (a) j 不会改变值并且不必一遍又一遍地计算它。
任何输入都会很棒!
#define M /* some mildly large number */
double a[M*M], x[M], c[M];
int i, j;
(a) First version
for (j = 0; j < M; j++)
for (i = 0; i < M; i++)
c[j] += a[i+j*M]*x[i];
(b) Second version
for (i = 0; i < M; i++)
for (j = 0; j < M; j++)
c[j] += a[i+j*M]*x[i];
【问题讨论】:
-
通过在目标计算机上测量找出来。
-
@PaulR:好的 - 我建议测量它是有道理的 :)
-
@Samu:如果你不知道为什么,那么你就不知道这是真的。
-
@PaulR:来一场精彩的国际象棋比赛怎么样?
标签: c++