【问题标题】:Is clock-based timing reliable when CPU frequency is variable?当 CPU 频率可变时,基于时钟的时序是否可靠?
【发布时间】:2010-11-24 16:39:50
【问题描述】:

测量经过时间的常用方法是:

const clock_t START = clock();
// ...
const clock_t END = clock();
double T_ELAPSED = (double)(END - START) / CLOCKS_PER_SEC;

我知道这不是测量实时的最佳方法,但我想知道它是否适用于具有可变频率 CPU 的系统。是不是错了?

【问题讨论】:

  • 大概,CLOCKS_PER_SEC 在头文件中定义为常量值。如果该值表示的基础参数可以更改并且您没有相应地更改常量,那么,不,您的经过时间测量将不正确。
  • 如果您正在进行基准测试,那么最好将 CPU 频率调节器设置为“性能”,至少暂时如此,这样您就可以获得准确的测量结果,不受时钟速度变化的影响。

标签: c cpu clock frequency elapsed


【解决方案1】:

有些系统架构会改变 CPU 的频率,但有一个单独且恒定的频率来驱动系统时钟。有人会认为clock() 函数会返回一个与 CPU 频率无关的时间,但这必须在每个要运行代码的系统上进行验证。

【讨论】:

    【解决方案2】:

    在可变时钟速度 CPU 上使用并不好。

    http://support.ntp.org/bin/view/Support/KnownHardwareIssues

    Linux 上的 NTP(网络时间协议)守护进程存在问题。

    大多数操作系统都有一些 API 调用以获得更准确的值,例如在 Windows 上的 QueryPerformanceCounter

    http://msdn.microsoft.com/en-us/library/ms644904%28VS.85%29.aspx

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多