我开发了一个简单的程序,想在真机上评估它的运行时性能,例如我的 MacBook。源代码如下:
#include <stdio.h>
#include <vector>
#include <ctime>
int main () {
auto beg = std::clock () ;
for (int i = 0; i < 1e8; ++ i) {
}
auto end = std::clock () ;
printf ("CPU time used: %lf ms\n", 1000.0*(end-beg)/CLOCKS_PER_SEC) ;
}
Run Code Online (Sandbox Code Playgroud)
它是用 gcc 编译的,优化标志设置为默认值。在 bash 脚本的帮助下,我运行了 1000 次,并通过我的 MacBook 记录了运行时间,如下所示:
[130.000000, 136.000000): 0
[136.000000, 142.000000): 1
[142.000000, 148.000000): 234
[148.000000, 154.000000): 116
[154.000000, 160.000000): 138
[160.000000, 166.000000): 318
[166.000000, 172.000000): 139
[172.000000, 178.000000): 40
[178.000000, 184.000000): 11
[184.000000, 190.000000): 3
Run Code Online (Sandbox Code Playgroud)
"[a, b): n" 表示同一程序的实际运行时间在 a ms 和 b ms 之间 n 次。
很明显,实际运行时间变化很大,似乎不是正态分布。有人可以告诉我是什么原因导致这种情况以及我如何正确评估运行时吗?
感谢您回答这个问题。
标杆很难!
简短回答:使用谷歌基准
长答案:有很多事情会干扰时间。
避免这些影响的唯一方法是禁用 CPU 缩放,执行“缓存刷新”功能(通常只是在启动前接触大量内存),以高优先级运行,并将自己锁定到单个 CPU。即便如此,你的时间安排仍然会很吵,所以最后一件事就是重复很多,并使用平均值。
这就是为什么像谷歌基准这样的工具可能是你最好的选择。
来自 CPPCon 的视频
也可在线直播
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |