在c中优化数组循环

new*_*tus 3 c arrays optimization gcc

我已经在网上看了我的书,但我似乎无法得到这个.我被要求优化程序的一小部分.特别是在不使用内置优化器的情况下,使用vi和gcc在一小段时间内获取数组并添加其内容.我尝试过循环展开和其他一些针对产品的优化.你能帮忙吗?

int length = ARRAY_SIZE;
int limit = length-4;
for (j=0; j < limit; j+=5) {
    sum += array[j] + array[j+1] + array[j+2] + array[j+3] + array[j+4];
}
for(; j < length; j++){
    sum += array[j];    
}
Run Code Online (Sandbox Code Playgroud)

数组值是非常数ints,所有值都已初始化.

Dre*_*ins 9

创建子总和,然后加总和.

这是它的外观的基本版本

for (j=0; j < limit; j+=4) {
    sum1 += array[j];
    sum2 += array[j+1];
    sum3 += array[j+2];
    sum4 += array[j+3];
}
sum = sum1 + sum2 + sum3 + sum4;
Run Code Online (Sandbox Code Playgroud)

这避免了一些写后读依赖性 - 也就是说,每次循环迭代中sum2的计算不需要等待sum1的结果执行,并且处理器可以同时调度循环中的两条线.