【发布时间】:2014-07-30 18:02:56
【问题描述】:
我的任务是优化 C 中的特定 for 循环。这是循环:
#define ARRAY_SIZE 10000
#define N_TIMES 600000
for (i = 0; i < N_TIMES; i++)
{
int j;
for (j = 0; j < ARRAY_SIZE; j++)
{
sum += array[j];
}
}
我应该使用循环展开、循环拆分和指针来加快速度,但每次我尝试实现某些东西时,程序都不会返回。到目前为止,这是我尝试过的:
for (i = 0; i < N_TIMES; i++)
{
int j,k;
for (j = 0; j < ARRAY_SIZE; j++)
{
for (k = 0; k < 100; k += 2)
{
sum += array[k];
sum += array[k + 1];
}
}
}
我不明白为什么程序现在甚至没有返回。任何帮助将不胜感激。
【问题讨论】:
-
使用调试器。我会让编译器做优化。我想这是一些家庭作业!第二个程序与第一个程序不同,在第二种情况下,您将
array加起来最多为 101。 -
你的新程序的运行时间大约是原来的 100 倍。
-
@Sky 我会说大约是
sum +=两次的 100 倍...... -
不是你问的,但你可以完全消除外循环。并且在内部循环中只有 sum += array[j] * N_TIMES;现在您可以通过 sum += *array++ * N_TIMES; 使用指针算法来获得更高的性能;
-
TBH 最好的答案可能是采用现代编译器,将其置于最大优化级别,然后查看它生成的程序集
标签: c loops optimization