我正在Ubuntu上运行我的代码,并需要获取程序中一个函数的运行时间。我需要非常精确的时间,如纳秒或至少微秒。
我看了一下chrono.h
,但它使用系统时间,而我更喜欢使用CPU时间。
是否有一种方法可以做到这一点,并具有纳秒级别的精度?
我正在Ubuntu上运行我的代码,并需要获取程序中一个函数的运行时间。我需要非常精确的时间,如纳秒或至少微秒。
我看了一下chrono.h
,但它使用系统时间,而我更喜欢使用CPU时间。
是否有一种方法可以做到这一点,并具有纳秒级别的精度?
std::chrono
提供了 high_resolution_clock
,但要注意精度会受处理器限制。
如果你想直接使用libc中的函数,可以使用gettimeofday,但是无法保证其准确到纳秒级别。(只能精确到微秒)
#ifdef PLATFORM_ID...
),例如 clock_gettime()
,QPC
),并实现您可以获得的最精确的抽象。当然,您受到STL必须做出的相同选择的限制,但通过减少平台集,通常可以改善lcd要求。虽然有一个标准函数std::clock
应该返回 CPU 时间,但实际上没有一种可移植的方法来实现这一点。
在 POSIX 系统(Linux 就是试图成为这样的系统)上,std::clock
应该能够正常工作。但是,如果您希望使您的应用程序具有可移植性,则不要指望它在非 POSIX 平台上运行相同。
std::clock
返回的值也是近似值,并且精度和分辨率取决于系统。
std::chrono::I_am_sure_this_clock_runs_on_cpu_time
。 - Hatted Rooster