我刚刚开始在Linux中编写C ++编程,任何人都可以推荐一种测量代码运行时间的好方法,理想情况下是纳秒精度,但毫秒也可以。
还有一种快速打印方法,我现在正在使用std :: cout,但我觉得它有点慢。
感谢。
答案 0 :(得分:3)
您可以使用gettimeofday
或clock_gettime
。
答案 1 :(得分:1)
要获得以纳秒为单位的时间,请使用clock_gettime()
。要测量代码所用的时间,必须使用CLOCK_MONOTONIC_RAW
时钟类型。使用其他时钟类型并不是真正的解决方案,因为它们需要进行NTP调整。
至于打印部分 - 定义慢。将内置数据类型转换为ASCII字符串的“通用”代码总是很慢。还有缓冲(在大多数情况下都很好)。如果您可以对数据做出一些很好的假设,那么您可以随时将自己的转换为ASCII,这将超越通用解决方案,并使其更快。
修改强>
另请参阅此处使用clock_gettime()
函数和OS X特定mach_absolute_time()
函数的示例:
答案 2 :(得分:1)
对于计时,您可以使用<chrono>
标准库:
#include <chrono>
#include <iostream>
int main() {
using Clock = std::chrono::high_resolution_clock;
using std::chrono::milliseconds;
using std::chrono::nanoseconds;
using std::chrono::duration_cast;
auto start = Clock::now();
// code to time
std::this_thread::sleep_for(milliseconds(500));
auto end = Clock::now();
std::cout << duration_cast<nanoseconds>(end-start).count() << " ns\n";
}
实际时钟分辨率取决于实现,但这将始终输出正确的单位。
std::cout
的表现也取决于实施情况。 IME,只要你不在任何地方使用std::endl
,它的性能与Linux或OS X上的printf相当。微软在VC ++中的实现似乎要慢得多。
答案 3 :(得分:0)
打印东西通常很慢,因为你正在看它的终端,而不是因为你首先打印的东西。您可以将输出重定向到文件,如果您将 lot 打印到控制台,则可能会看到显着的加速。
答案 4 :(得分:0)
我想您可能还想查看time [0]命令,该命令报告特定程序完成执行所花费的时间。
答案 5 :(得分:0)
时间测量:
Boost.Chrono:http://www.boost.org/doc/libs/release/doc/html/chrono.html //请注意,如果你有一个现代的C ++ 11(曾经是C ++ 0x)编译器,你已经开箱即用,因为“Boost.Chrono的目标是在C ++ 0x中实现新的时间设施,正如在N2661中建议的那样 - 睡眠的基础。“
Boost.Timer:http://www.boost.org/doc/libs/release/libs/timer/
来自Boost.Date_Time的Posix时间:http://www.boost.org/doc/libs/release/doc/html/date_time/posix_time.html
快速打印:
FastFormat:http://www.fastformat.org/
基准:http://www.fastformat.org/performance.html
关于C ++流的性能 - 请记住关于std :: ios_base :: sync_with_stdio,请参阅:
http://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio
http://www.cplusplus.com/reference/iostream/ios_base/sync_with_stdio/