gpt4 book ai didi

c++ - 编译器修剪循环执行和时间成本?

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:16 26 4
gpt4 key购买 nike

我目前正在尝试使用虚拟循环样本来玩弄 openmp。我觉得很奇怪,编译器可能会修剪一些代码,而时间成本结果并不像预期的那样。即使我不导入任何 openmp 东西也是如此。

我的测试很简单。虚拟循环,看看花了多长时间。

    float duration;
clock_t start=clock();

long lasting=9999999;
long iter1;
long sum=0;
for(iter1=1;iter1<lasting;iter1++)
{
sum=iter1*10;
}

clock_t finish=clock();

//cout<<sum<<endl;

duration = (float)(finish - start) / CLOCKS_PER_SEC;
printf( "%f seconds\n", duration );

这需要 0.0000 秒,我认为循环内的代码没有执行。只要我取消注释 cout<<sum<<endl; , 显示 0.006 秒。

编译器是否修剪了代码和不需要/有用的东西,因为输出没有被执行?我使用具有标准项目设置的 visual studio 2010 运行此程序。

最佳答案

当然可以!在运行测试时,确保实际使用在循环中生成的数据至关重要。这叫做 dead code elimination ,最著名的编译器优化之一。

另外,请注意您的循环可以简单地并行化,因为它没有任何数据依赖性。您的编译器还能够像这样并行化循环(以及许多其他循环优化,如展开),甚至更复杂的循环。如果您想测量“纯”性能,则需要使用必要的编译器标志来控制自动优化。

关于c++ - 编译器修剪循环执行和时间成本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22395610/

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