gpt4 book ai didi

c++ - 展开和堵塞对大循环的影响

转载 作者:行者123 更新时间:2023-11-30 17:11:48 25 4
gpt4 key购买 nike

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

备注 #25461:不完美的循环展开 - 被 2 个卡住( vector 前)

这是我的简短代码。

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

索引变量num始终是1024。为什么循环展开卡住不完美?另外,当我修改如下代码时,不会发生展开干扰!出现展开卡纸的情况是什么?

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;
}

最佳答案

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

数学可能发生溢出,但我没有检查

然后运行它。

它在“眨眼间”运行

这是代码:

#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;
}

关于c++ - 展开和堵塞对大循环的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31971130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com