当我编译我的应用程序时,性能比我预期的要差,我发现编译器正在报告如下所示的警告。
备注 #25461: 不完美的循环展开 - 被 2 卡住(前向量)
这是我的短代码。
for(i=0; i<num; i++){
values[i] = func(a, b, c);
}
索引变量 num 始终为 1024。为什么循环展开卡住不完美?另外,当我像下面这样修改代码时,不会发生 unroll-jamming!发生展开卡纸的条件是什么?
for(i=0; i<num; i++){
value += func(a, b, c);
}
实际上,代码是大文件的一部分,所以我不能在这里写完整的代码。但下面是包含 func() 的代码。
int values[num];
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;
}