【发布时间】:2014-07-03 18:31:23
【问题描述】:
我正在尝试对一段代码进行基准测试。它基于此代码here,有趣的部分基本上如下所示:
auto t0 = std::chrono::high_resolution_clock::now();
...
auto t1 = std::chrono::high_resolution_clock::now();
std::cout << secs(t1-t0).count() << " s\n";
问题是我在共享机器上,这给了我时间,所以我的结果没有给我任何一致的东西。我真正需要的是某种秒表工具,它可以让我得到我的代码运行的时间,而不是墙上的时间。有哪些选择?如果涉及到系统特定的调用,我在 Linux 机器上,但如果可能的话,我宁愿保持这段代码可移植。
【问题讨论】:
-
您是否考虑过隔离
main中的代码,并通过time进行编译和运行? (不是测量小段代码的最佳选择,但由于您使用的是秒数,我认为这应该足够好了) -
我可以在万不得已的情况下这样做,但是我正在使用大量配置运行大量测试,如果我必须继续复制到 main 中,则此测试将花费更长的时间并且会不那么愉快
-
当你说“时间”时,你是指CPU时间吗?如果您要排除所有其他进程对 CPU 的使用,您是否希望时间包括 i/o?
-
在这种特殊情况下没有 I/O 时间。它只是一小段代码,用于测试具有不同算法和不同输入的无序地图的行为。
-
我期待看到一些提及 gprof 和 gcc 标志以使其工作。为什么不为此使用分析器?请参阅stackoverflow.com/questions/21072058/… 之类的问题。
标签: c++ linux benchmarking execution-time