CPU时钟节拍是否严格定期?


51

CPU的频率是大约每秒多少个时钟滴答的平均值,还是具有更强的物理稳定性?

我认为,它必须既不稳定又不稳定。那么,有没有关于CPU方差的可用信息?

CPU的周期持续时间是否与晶体振动严格同步?还是仅需确保CPU在下一个滴答之前完成一个周期?


7
有许多不同类型的CPU。大多数使用晶体以特定频率振动以自行计时。这意味着大多数手表都与数字手表(使用相同类型的晶体来节省时间)差不多。en.wikipedia.org/wiki/Crystal_oscillator
krowe

5
@Gael有些指令需要数百滴答声或时钟周期才能完成。
misha256

1
@Gael:而且,CPU减慢速度或加快速度很普遍,而且他们经常这样做。虽然我不知道这与tick虫到底有什么关系。
Mooing Duck 2015年

18
投票以寻求产品,服务或学习材料建议的方式来关闭它?真的吗
CVn

30
这是一个合理的问题,旨在阐明硬件的工作原理。
studiohack

Answers:


49

像任何复杂的事情一样,您可以描述CPU在各个级别上的运行方式。

从最基本的层面来说,CPU是由精确的时钟驱动的。时钟的频率可以改变;想想英特尔的SpeedStep。但是在任何时候,CPU绝对都是100%锁定在时钟信号上。

CPU指令以更高的级别运行。一条指令是一件复杂的事情,可能需要不到一个周期到数千个周期才能完成,如Wikipedia上所述

因此,一条指令基本上会消耗一些时钟周期。在现代CPU中,由于采用了多核,超线程,流水线,缓存,乱序和推测性执行等技术,因此无法保证单个指令的确切时钟周期数,并且每次发出此类指令时都会有所不同。 !

编辑

是否有关于特定CPU方差的任何信息?

是的,没有。99.99%的最终用户对整体性能感兴趣,可以通过运行各种基准进行量化。

您需要的是高度技术性的信息。英特尔不会发布有关CPU指令延迟/吞吐量的完整或准确信息。

有研究人员亲自尝试解决这个问题。以下是两个可能有趣的PDF:

不幸的是,很难获得方差数据。引用第一个PDF:

所列数字为最小值。高速缓存未命中,未对齐和异常可能会大大增加时钟计数。

尽管如此,有趣的阅读!


1
评论不作进一步讨论;此对话已转移至聊天
Sathyajith Bhat

4
非常好。当然,But at all times the CPU is absolutely 100% locked to the clock signal仅适用于同步CPU。谈论异步(无时钟)CPU中的滴答是很愚蠢的,但对我来说却似乎是个遗漏:)
Luaan 2015年

1
@Luaan-是的。我认为真正的异步CPU仍然很少,但是它们确实存在(或过去存在)。不过,这仅与研究人员和硬件极客相关。
Daniel R Hicks

@DanielRHicks对于嵌入式设备(周围有一些旧的MIPS和ARM异步CPU),它们引起了一定的兴趣,但是,是的,在消费者市场上并不是真正的大事。毕竟,当旁边有电量不足的显示器时,为什么还要关心智能手机的CPU功耗。但是,对于某些其他应用程序,省电(和其他功能)可能会非常酷-IBM SyNAPSE看起来像是一个很酷的科研项目。
罗安2015年

@Luaan-有趣的一点是,它们最初被发明时,就是计算机的运行速度与执行计算所需的速度一样快。但是更多精心设计的时钟方案基本上可以完成相同的事情,即sorta。
Daniel R Hicks

29

本质上,CPU时钟节拍是否严格周期性?

当然不是。即使是非常非常好的时钟也不是严格定期的。热力学定律则相反:

  • 零律:宇宙对你有一个讨厌的小游戏。
  • 第一定律:你赢不了。
  • 第二定律:但是在非常寒冷的一天,您可能会收支平衡。
  • 第三定律:永远不会那么冷。

最好的时钟的开发者们非常非常努力地克服热力学定律。他们赢不了,但他们确实非常非常接近收支平衡。CPU上的时钟?与那些最好的原子钟相比,这是垃圾。这就是存在网络时间协议的原因。


预测:当世界上最好的原子钟从2015年6月30日23:59:59 UTC到2015年6月30日世界UTC到2015年7月1日00:00:00时,我们将再次看到混乱世界标准时间。太多的系统无法识别leap秒,并将其安全级别设置为2(这可以防止时间变化超过一秒钟)。这些系统中的时钟抖动意味着网络时间协议leap秒将被拒绝。就像2012年一样,许多计算机将崩溃。


9
+1,有趣而翔实。而且《跃进第二题》也是一本好书。
jimm-cl 2015年

9
好吧,IIRC,这是由于内核时钟例程意识到 of秒的可能性而引起的,但是将调整实现为对时钟调整例程的调用,而该时钟调整例程已经不允许在已经存在时钟的情况下调用正在调整...当然,系统时钟与CPU时钟无关。
哈根·冯·埃岑

1
哈哈,真棒。我必须在“与原子时钟相比,CPU时钟比较垃圾”观察中添加一些内容:确实!但这都是非常主观的,更不用说亲戚了。我们可能会惊叹于我们最好的原子钟的卓越准确性,但在某些地方(舒适的现实之外),可能会有技术使原子钟看起来像“垃圾” :-p
misha256

2
@ misha256现实是没有准确的时钟。时间是相对的。
Keltari'2

CPU时钟可能是垃圾,但是没有什么比让8位寄存器溢出只是给在未知状态下的7段显示驱动器更多的时间在发出下一条指令之前加倍处理了。我们不需要任何晶体。甚至更重要的是,没有什么比等待一纳秒的时间来让ALU完成其计算,然后再将其结果存储到寄存器(或存储在通往另一个ALU的总线中)了。
约翰·德沃夏克

22

在2000年左右,当CPU的时钟速度开始进入手机也可以使用的范围时,增加实际时钟速度的变化已成为普遍现象。原因很简单:如果CPU时钟恰好是900 Mhz,则所有电子干扰都是在该频率下产生的。在895至905 Mhz之间改变时钟频率,干扰也会分布在该范围内。

这是可能的,因为现代CPU受热量限制。它们可以在短时间内稍快地运行,因为稍后时钟变慢时它们可以冷却,因此没有问题。


13
在BIOS中,您经常会看到此选项被描述为“扩频”
Mark Sowul,2015年

1
我已经读到,在多核CPU中,内核还使用偏移时钟,因为它有助于避免无线电噪声,帮助进行功率分配并避免内核产生谐波。
Zan Lynx 2015年

3
@MarkSowul谢谢,最后有人告诉这个“扩频”的实际用法。

22

这里是数字逻辑设计师。逻辑网络响应于输入信号而发生变化的实际时间是传播延迟。将系统视为:

registers A,B,C... ---> logic cloud ---> registers A',B',C'

“启动时钟”是第一组寄存器发生变化的时钟沿。“捕获时钟”是一个周期之后的下一个时钟沿。为了使系统工作,逻辑云的输出必须在捕获时钟到达之前是稳定的。

确保这项工作有效的过程是时序分析。使用基于物理学的系统模拟,计算出任何输入到任何输出的最坏情况到达时间。系统中这些数字中的最大数字设置最小时钟周期。

注意最坏的情况。实际的传播时间会更短,但这取决于制造工艺的变化,当前温度和芯片电压(PVT)。实际上,这意味着您可以应用更快的时钟(超频),并且可能会起作用。它还可能开始产生错误,例如确定0x1fffffff + 1 = 0x1f000000进位位是否未及时到达。

芯片上可能还具有一个以上的时钟(通常FSB比内核慢),并且实际的时钟可能出于热控制目的而上升或下降或改变(MSalter关于使用扩展频谱通过EMC测试的答案)。


在某些情况下,捕获时钟可能是第二个或更晚的周期,而不是下一个。一些设计假设数据将始终花费至少最少的时间(例如,如果已知传播延迟在2.1到2.9个周期之间,则可以输出数据并在每个周期采样结果;每个采样结果都将反映3个数据周期之前);其他更保守的设计则更缓慢地更改输出数据,并忽略结果,直到保证稳定为止。
超级猫

2

CPU的指令持续时间是否与晶体振动严格同步?还是只需要确保CPU在下一个周期之前就完成一条指令?

都不行 指令持续时间将是一定数量的时钟滴答,但该数量可能会根据指令要求而有所不同。例如,如果一条指令只有在L1高速缓存中有特定的存储位置后才能前进,那么该指令将在下一个时钟滴答之前完成。在该指令发生之前,不会在该指令上取得任何进展。

但是当CPU决定做某事时,它执行的基本方法是设置其内部开关,以使特定信息进入CPU的特定部分。它等待输入到达该部分,并等待输出到达下一部分。该等待部分是时钟的目的。

想象一下一个物理电路需要两个二进制输入并将它们求和,然后在第三组导线上输出总和。要进行加法运算,CPU必须安排将两个数字相加才能到达该加法器,而输出则要进入一个CPU寄存器锁存器。在输入到达加法器,加法器产生输出且输出到达锁存器之前,CPU不能告诉锁存器存储输出。这是时钟的目的-设置将输入安排到某处与期望输出准备就绪之间的等待时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.