Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译器修剪循环执行和时间开销?;_C++_Loops - Fatal编程技术网

C++ 编译器修剪循环执行和时间开销?;

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

我目前正在尝试使用虚拟循环示例来处理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 );
浮动持续时间;
时钟启动=时钟();
持久=9999999;
长iter1;
长和=0;

对于(iter1=1;iter1当然可以!在运行测试时,确保实际使用循环中生成的数据是至关重要的。这被称为,最著名的编译器优化之一


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

编译器似乎优化了该变量,因为它没有被使用,然后优化了循环,因为它不包含代码。请查看在项目设置中设置的优化标志。另外,
长效的+1:
+1:避免未定义的行为也是一个好主意,例如有符号整数溢出w、 因为如果编译器检测到这样的溢出是不可避免的,它可以随心所欲。非常感谢,在关闭这些优化之后,我认为我得到了“纯”性能。