核心周期与参考周期

大多数CPU都使用时钟信号来控制它们的顺序操作。时钟信号由外部发生器产生,每秒提供一致数量的脉冲。时钟脉冲的频率决定了CPU执行指令的速率。因此,时钟越快,CPU每秒执行的指令就越多。

= \text{频率} = \frac{\text{时钟周期数}}{\text{时间}}

大多数现代CPU,包括英特尔和AMD的CPU,没有固定的运行频率。相反,它们实现了动态频率缩放,在英特尔的CPU中称为Turbo Boost,在AMD处理器中称为Turbo Core。它使CPU能够动态增加和减少频率。降低频率可以减少功耗,但会牺牲性能,增加频率可以提高性能,但会牺牲节能。

核心时钟周期计数器计算的是CPU核心实际运行的频率下的时钟周期数,而不是外部时钟(参考周期)。让我们看一下在Skylake i7-6000处理器上运行单线程应用程序的实验,它的基础频率为3.4 GHz:

$ perf stat -e cycles,ref-cycles ./a.exe
  43340884632  cycles        # 3.97 GHz
  37028245322  ref-cycles    # 3.39 GHz
      10.899462364 seconds time elapsed

指标ref-cycles统计的周期数是如果没有频率缩放的情况下。设置的外部时钟频率为100 MHz,如果我们乘以时钟倍频,我们将得到处理器的基础频率。Skylake i7-6000处理器的时钟倍频为34:这意味着对于每个外部脉冲,当CPU运行在基础频率上时,它执行34个内部周期。

指标cycles统计的是真实的CPU周期数,即考虑了频率缩放。使用上述公式,我们可以确认平均运行频率为43340884632个周期 / 10.899秒 = 3.97 GHz。当您比较两个版本的小段代码的性能时,以时钟周期计时比以纳秒计时更好,因为您避免了时钟频率上下波动的问题。

results matching ""

    No results matching ""