10毫秒的C++执行时间
10 milli-second C++ excution time
我试图通过2e6迭代来找出"for循环"的确切执行时间。以下代码在从g++编译用于c++文件后的10ms内运行。人们告诉我,这是C++编译器自动完成的优化代码,所以你获得无意义的执行时间。换句话说,由于没有任何输出调用例如printf或cout<lt;对于变量a、b、c,因此优化后的代码对"for循环"就是为什么我的程序执行时间非常短,只有10ms。正确的为什么他们说时间结果对于"for循环"来说毫无意义。
请告知
int main(){
int max = 2e6;
int a,b,c;
// CODE YOU WANT TO TIME
int start = getMilliCount();
for (int i = 0; i < max; i++) {
a = 1234 + 5678 + i;
b = 1234 * 5678 + i;
c=1234/2+i;
}
int milliSecondsElapsed = getMilliSpan(start);
printf("nnElapsed time = %u milliseconds %dn", milliSecondsElapsed,max);
return 0;
}
运行时绝对是而不是没有意义。它证明了至少一个重要的观点:优化器比给定的信用更聪明,并且它能够推断出循环没有副作用,所以它将其删除。
因此,即使概要文件的结果只证明了这一点,它也有意义。
要解决您想要的问题:
我试图通过2e8迭代来找出"for循环"的确切执行时间。
如果没有可观察到的影响,则具有2e8
的for
循环的执行时间可以是0
。或者非常大(如果有的话)。这就是为什么您通常使用专用工具来评测实际的代码。
编译器可以以任何不改变任何可观察到的东西的方式更改程序,即所有输出等必须与未优化代码的输出完全相同。在您的示例中,编译器可能会注意到,循环后的a
、b
和c
的值从未使用过,并且该循环不做任何其他事情,因此它可能会从程序中删除该循环。
它还可以观察到,变量的值直接取决于max
,并且只跳过除最后一次迭代之外的所有迭代。
在这两种情况下,结果都不取决于max
。它仍然不是毫无意义的,它只是意味着你低估了你的编译器。
编辑:
我用g++ -O2
测试了这个场景,循环被完全删除,根本不运行。
相关文章:
- 简单C++"Hello World"程序的执行时间长
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 为什么切换 for 循环的顺序会显著改变执行时间?
- cmd.exe与Powershell中C++程序的不同执行时间
- pthread执行时间比顺序执行时间差
- OpenCV 函数 cv::remap() 的执行时间更长,当程序在两者之间进入睡眠状态时
- 为什么 std::chrono 在测量循环和编译器优化的并行 OpenMP 的执行时间时不起作用?
- 我需要帮助来缩短检索 SSL 证书的执行时间
- 如何测量cudaMalloc执行时间
- c++中的执行时间和检查流状态
- 为什么for循环中的异步不能提高执行时间
- 为什么 C++ openMP 程序执行时间更长
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 需要减少我的C++代码的执行时间
- 如何在 ubuntu 上的 php 脚本中获取程序(c,c++,java,python,php)的执行时间和内存使用量?
- 在Qt中设置pixmap时的执行时间很奇怪
- 异步控制线程执行时间
- 如何对 g++ 设置执行时间限制?
- 测量 std::系统的实际执行时间(以 C++ 为单位)
- 视觉在C 中获取每行代码的执行时间