Unroll和Jam对大循环的影响

时间:2015-08-12 16:50:44

标签: c++ c loops compiler-warnings loop-unrolling

当我编译我的应用程序时,性能比我预期的要差,我发现编译器正在报告如下警告。

备注#25461:不完整的循环展开 - 由2(预矢量)

干扰

这是我的短代码。

hLine

索引变量num是alwasy 1024.为什么循环unroll-jammmed不完美?此外,当我修改如下所示的代码时,不会发生展开卡纸!发生展开干扰的条件是什么?

for(i=0; i<num; i++){
    values[i] = func(a, b, c);
}

实际上,代码是大文件的一部分,所以我不能在这里编写整个代码。但下面的代码包括func()。

for(i=0; i<num; i++){
    value += func(a, b, c);
}

1 个答案:

答案 0 :(得分:0)

我创建了一个实际编译的代码版本:

数学上的溢出可能已经发生了,但我没有检查那个

然后跑了。

它眨眼间就跑了

以下是代码:

#include <stdio.h>

#define num (1024)

int values[num];
int value;
int a=2;
int b=3;
int c=4;

int func(int a, int b, int c)
{
    int i=0;
    int total=0;
    for(i=0; i<num; i++){
        total = a*b+c;
    }
    return total;
}

int main(void){
    int i=0;
    //int min=0;
    for(i=0; i<num; i++){
        values[i] = func(a, b, c);
    }

    for(i=0; i<num; i++){
        value = values[i];
    }
    printf("value: %d\n", value);
    return 0;
}