【发布时间】:2020-11-24 07:03:44
【问题描述】:
我想非常准确地测量函数的执行时间,以皮秒为单位。在 C++ 中可以这么精确吗?我目前知道的测量时间的方法是:
- __rdtscp()
- std::chrono 时钟
- clock.h clock_t
有谁知道这三个函数的准确度如何?哪一种可以实现皮秒时间测量,如果都不能,有什么办法可以降低噪音,让时间测量更准确?
目标系统是 Linux 版本 4.15.0-122-generic (buildd@lcy01-amd64-010) (gcc 版本 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)) #124~16.04.1 -Ubuntu SMP
【问题讨论】:
-
在没有硬件的情况下,您认为 C++ 方法如何以皮秒为单位测量时间?精度是在 Widows/MSVC 上定义的实现,它以纳秒为单位进行测量,但最小步长可能是 100ns 或更多。如果您需要高精度,则需要购买能够提供该精度并使用其库的硬件。
-
即使您可以准确地测量时间,但测量仍然存在缺陷,因为您的电脑不仅仅执行单个功能。对于一个有用的度量,您需要运行该函数数千或数百万次并对结果进行平均。这样您甚至不需要精确测量。
-
你真的需要微微秒分辨率吗?在 4ghz cpu 上 1 纳秒只有 4 个时钟周期,操作系统调度变幻莫测会使你的代码的执行时间变化超过 4 个时钟周期
-
要超过微秒,您通常需要专门的硬件。
-
可能没有必要达到皮秒级,但目前哪种方法最准确?