我看到了一个循环的例子,它应该比之后的循环慢:
for (i = 0; i < 1000; i++)
column_sum[i] = 0.0;
for (j = 0; j < 1000; j++)
column_sum[i] += b[j][i];
与此相比:
for (i = 0; i < 1000; i++)
column_sum[i] = 0.0;
for (j = 0; j < 1000; j++)
for (i = 0; i < 1000; i++)
column_sum[i] += b[j][i];
现在,我编写了一个工具来测试不同索引号的数量,但是在我尝试这个概念后,我没有看到很多性能优势,我担心我的代码与它有关...
应该是在我的代码中运行的较慢的循环:
for (i = 0; i < val; i++){
column_sum[i] = 0.0;
for (j = 0; j < val; j++){
int index = i * (int)val + j;
column_sum[i] += p[index];
}
}
应该是“显着”更快的代码:
for (i = 0; i < val; i++) {
column_sum[i] = 0.0;
}
for (j = 0; j < val; j++) {
for (i = 0; i < val; i++) {
int index = j * (int)val + i;
column_sum[i] += p[index];
}
}
数据比较:
答案 0 :(得分:0)
我对循环中的索引值感到困惑:int index = j * (int)val + i;
较慢的循环:
for (i = 0; i < val; i++) {
column_sum[i] = 0.0;
for (j = 0; j < val; j++){
int index = j * (int)val + i;
column_sum[i] += p[index];
}
}
更快的循环:
for (i = 0; i < val; i++) {
column_sum[i] = 0.0;
}
for (j = 0; j < val; j++) {
for (i = 0; i < val; i++) {
int index = j * (int)val + i;
column_sum[i] += p[index];
}
}