C++ 编译器修剪循环执行和时间开销?;
我目前正在尝试使用虚拟循环示例来处理openmp。我觉得奇怪的是,编译器可能会删减一些代码,而耗时的结果并不像预期的那样。这是真的,即使我不导入任何openmp东西 我的测试很简单。虚拟循环,看看花了多长时间C++ 编译器修剪循环执行和时间开销?;,c++,loops,C++,Loops,我目前正在尝试使用虚拟循环示例来处理openmp。我觉得奇怪的是,编译器可能会删减一些代码,而耗时的结果并不像预期的那样。这是真的,即使我不导入任何openmp东西 我的测试很简单。虚拟循环,看看花了多长时间 float duration; clock_t start=clock(); long lasting=9999999; long iter1; long sum=0; for(iter1=1;iter1<lasting;iter1++) { sum=iter1*1
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 );
浮动持续时间;
时钟启动=时钟();
持久=9999999;
长iter1;
长和=0;
对于(iter1=1;iter1当然可以!在运行测试时,确保实际使用循环中生成的数据是至关重要的。这被称为,最著名的编译器优化之一
另外,请注意,您的循环可以简单地并行化,因为它没有任何数据依赖关系。您的编译器还可以并行化循环(以及许多其他循环优化,如展开)如果你想衡量“纯”的话,你需要使用必要的编译器标志来控制自动优化性能。编译器似乎优化了该变量,因为它没有被使用,然后优化了循环,因为它不包含代码。请查看在项目设置中设置的优化标志。另外,长效的+1:+1:避免未定义的行为也是一个好主意,例如有符号整数溢出w、 因为如果编译器检测到这样的溢出是不可避免的,它可以随心所欲。非常感谢,在关闭这些优化之后,我认为我得到了“纯”性能。