【发布时间】:2014-09-26 00:18:55
【问题描述】:
在 Linux 上运行(uname 说:)
Linux 2.6.32-431.29.2.el6.x86_64 #1 SMP Sun Jul 27 15:55:46 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
我的测试表明,时钟 ID 为 CLOCK_MONOTONIC_COARSE 的 clock_gettime 调用比使用时钟 ID CLOCK_MONOTONIC 的调用快一个数量级。
这是一个测试运行的示例输出,它在紧密循环中调用了一百万次clock_gettime,并以毫秒为单位测量了经过的时间:
CLOCK_MONOTONIC lapse 795
CLOCK_MONOTONIC_COARSE lapse 27
这让我很高兴,并使分析器结果看起来更好,但是我希望我可以使用 std::chrono 或 boost::chrono 来实现可移植性和标准一致性,而不会牺牲这个速度。不幸的是,我还没有找到任何方法来说服 chrono(任何一个)在可用时使用 CLOCK_MONOTONIC_COARSE。我尝试了 chrono::steady_clock,但结果与 CLOCK_MONOTONIC 值相当。
有没有办法指定 chrono 你愿意牺牲精度来换取速度?
【问题讨论】:
-
您使用了
std::chrono::中的哪一个? -
@5gon12eder:我刚刚编辑了问题以表明我尝试了 std::chrono::steady_clock
-
如果您了解
CLOCK_MONOTONIC_COARSE的特点,您可以轻松地围绕它构建自己的自定义计时风格时钟。你只需要几个typedefs 和一个now()函数。 -
我刚刚检查了 GNU 实现中的
chrono.cc,它只处理CLOCK_REALTIME和CLOCK_MONOTONIC。甚至没有提供用于选择粗略时钟的宏。
标签: c++ c++11 boost time chrono