【问题标题】:Measuring CPU Time with clocks()用clocks()测量CPU时间
【发布时间】:2015-04-07 12:41:12
【问题描述】:

Libc provides the clock function 用于测量 Linux 进程的 CPU 时间。我想知道这种方法在现代计算机中是否仍然可靠/有意义?为什么“CLOCKS_PER_SEC”是一个常数?为什么假设每台机器每秒有 1e6 条指令?此外,现代处理器甚至可以扩展时钟频率。

【问题讨论】:

    标签: c linux time linux-kernel libc


    【解决方案1】:

    不,它不再相关;它在添加时设计不佳,不再适合其预期的用例。许多细节被冻结以保持向后兼容性。

    请改用 POSIX.1-2001 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts)。理论上你可以使用它达到纳秒级精度。

    【讨论】:

      【解决方案2】:

      让我分享一下我的理解。

      CLOCKS_PER_SEC 与 CPU 时钟没有直接关系。想象一下,您有一个抽象计时器,其频率配置为每秒 1000000 滴答。实际上,这个频率非常低,可以通过划分 MAIN_CLK 在任何地方实现。 如果你的操作系统想要支持 POSIX 系统调用时钟,那么它必须实现这个 clock() 系统调用,它返回这个低频率计时器滴答的数量。 这就是为什么您只能使用 clock() 以 1 毫秒的粒度进行测量。

      【讨论】:

      • 您能分享一些相关的文档吗?
      • 这只是我的建议,可能有人会纠正我。
      • Linux 手册页项目中的 man 3 clock 手册页有一些历史。 CLOCKS_PER_SEC == 1000000 在 POSIX.1(最初是 SuSv4/XSI)中指定。至于粒度,1/1000000 = 1µs(微秒),而不是 1 ms(毫秒)。当前的 glibc 版本似乎在内部为此使用 clock_gettime() 系统调用,只是返回以微秒为单位的值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 2013-12-08
      • 2019-10-20
      • 2013-12-25
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多