编译器修剪循环的执行和时间开销?
compiler prune loop excution and time costing?
我目前正在尝试使用虚拟循环样本来玩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 secondsn", duration );
这需要0.0000秒,我认为循环内的代码没有执行。只要取消注释cout<<sum<<endl;
,它显示0.006秒。
编译器是否删除了不需要的/有用的代码而不执行输出?我用visual studio 2010和标准项目设置运行这个程序。
当然可以!在运行测试时,确保实际使用循环中生成的数据是至关重要的。这被称为死代码消除,是最著名的编译器优化之一。
另外,请注意,您的循环可以简单地并行化,因为它没有任何数据依赖关系。您的编译器还能够并行处理像这样的循环(以及许多其他循环优化,如展开),甚至更复杂的循环。如果你想测量"纯"性能,你需要使用必要的编译器标志来控制自动优化。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 实现无开销push_back的最佳方法是什么
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- C++在变量给定的指定时间内关闭电脑
- rcpp函数中的清理时间很长
- C++:floor unix时间戳到UTC月份
- 使用递归模板函数是否会引入函数调用开销,或者编译器是否大部分时间都内联它(下面的示例)?
- C++:contst static DEBUG 和 if 语句,实际的执行时间开销是多少
- getaddrinfo()的时间开销是多少?
- 编译器修剪循环的执行和时间开销?