【问题标题】:Get time stamp via Boost.Chrono in resolution of nanoseconds通过 Boost.Chrono 以纳秒级的分辨率获取时间戳
【发布时间】:2012-10-18 14:27:20
【问题描述】:

boost chrono 是否提供具有纳秒分辨率的时间戳?如果是,如何获得时间戳?

【问题讨论】:

  • 如您所愿。自 Vista 以来,理论上您可以获得的最佳效果是使用 HPET(高精度事件计时器)。见这里en.wikipedia.org/wiki/High_Precision_Event_Timer。问题是如何通过 QueryPerformanceCounter() 获取它,该方法在可用时使用 HPET 并在 BIOS 中设置。
  • @SChepurin “理论上你可以得到最好的结果,因为 Vista 是使用 HPET”?为什么如果我的处理器以 3.33 GHz 工作,是因为它是操作系统中最快的时钟?

标签: c++ boost timestamp chrono


【解决方案1】:

纳秒级分辨率?你想在哪个硬件上运行你的程序? 在我的电脑上,我的性能计数器的频率约为。 4 Mhz,所以一个滴答持续 250 ns。

As answered here,boost chrono 可以为您提供纳秒级的分辨率,但您无法确定测量的准确性。

【讨论】:

  • 那么如何知道我的性能计数器频率呢?这是表明精度的唯一标准吗?
  • 如@SChepurin 所述,如果您在 Windows 上工作,QueryPerformanceFrequency() 会检索 HPET 的频率时钟(以 Hz 为单位)。对于Linux,应该有一个等效的功能,但我不知道它的名字。欲了解更多信息:mindcontrol.org/~hplus/pc-timers.html
  • 我的意思是,如果您的处理器是 3.33GHz,那么以纳秒为单位获得时间还不够吗?我们为什么要关注 HPET 的频率?
  • 你可以使用CPU时间(很多方法都贴here),但是记住我们不知道CPU时钟频率的准确性(是3.33Ghz还是3.00 Ghz?)也不知道CPU 的优化(墙上时间,负载平衡器,如果有几个核心,...)。我认为CPU时间测量给出的结果在微秒以下没有任何有效数字。
【解决方案2】:

为了通过 boost chrono 轻松获取不同测量的时间戳,您可以使用 boost CPU Timers。该网站还提供了有关计时器精度的表格。

要自己测量特定硬件上的分辨率,请使用 boost 的 cpu_timer_info.cpp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2011-01-25
    • 2019-06-21
    • 2010-10-30
    • 2015-01-17
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多