处理器的时钟周期与机器周期
制外单位 · 量:同步的间隔,也是计算工作的尺度
2004 年秋,英特尔取消了一款本应跑在十吉赫上的处理器,这并非技术上的失败,而是承认了一堵物理的墙:把芯片赶快一倍,功耗就要四倍,它索性熔了。持续三十年的频率竞赛在一天之内终结,随之终结的还有按盒子上的数字来评判机器的习惯。
周期本身就是时钟信号两个边沿之间的那段间隔,芯片上所有同步的部分正是踩着这一步同时翻转的。它的倒数是频率,所以五吉赫下的一个周期只有两成纳秒;在这点时间里光走六厘米,信号沿铜线走得还要少——比芯片本身还窄。
01 · 定义
周期是时钟信号的周期,也就是两个同向边沿之间的间隔,芯片上同步的元件在这两点一起改变状态。机器周期是处理器完成一个完整动作所用的整数个时钟周期;在流水线机器里,它被反过来的尺度取代——每条指令所用的周期数,而这个数的倒数又说明一个周期里有多少条指令走出流水线。
周期的长度不是自然定的,而是芯片上的布线定的:它不得短于两个触发器之间最慢的那条路,还要算上触发器自身的延迟和留给参数离散的余量。于是有了设计者惯用的一招——把一条长的逻辑路径切成两级流水线:周期减半,频率翻倍,而指令如今要走完整段楼梯。
然而限住频率的不是逻辑,而是功耗:动态功耗随频率增长,也随电压的平方增长,而电压又必须抬高,好让电路在更高的频率上赶得上。热量因此大致按频率的三次方走,正是在这条三次方的依赖上,吉赫的竞赛停在了四左右。
最后,周期是一种长度并不恒定的单位。电源管理每秒改动频率上百次,随负载和温度而变,所以从周期数上判断不出过去了多少时间,却能判断出做了多少工作:周期计数器数的不是秒,而是计算的步子,它真正的价值就在这里。
用滑块牵着频率走,留意两条朝相反方向分开的曲线。绿的是信号在一个周期里来得及走的距离:频率越高,这条路越短,到五吉赫时它比芯片本身还小。深红的是去一趟内存要花多少周期:它以纳秒计的延迟几乎不变,于是以周期计便只会增长。
把工作切成级之后,设计者缩短了周期,但一条指令如今要走完整段楼梯,它自身的延迟不减反增。只有当各级里填着不同的指令时,好处才显出来;而一旦分支预测失误,整条流水线都得清空——越深,代价越大。
02 · 换算
频率、周期、工作
输入一个频率或一个周期长度,此卡便会给出倒数、一个周期里信号走的路,以及以周期计的内存访问代价。第一族按定义就是精确的,第二族依据一个核心的平均值,第三族依据今日内存层级的典型延迟。
信号沿走线的速度取六成光速;在此卡的细项设置中可改为一半。
按频率作比较,只能比同样的核心,因为每条指令的周期数在不同架构之间相差数倍:一台机器一个周期取四条指令,另一台勉强一条。正因如此,以吉赫计的数字退出了广告,取而代之的是成套的测试,它们量的已不是周期,而是做成的工作。
| 数值 | 说明 | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · 数量级
对数标度:从一个周期到调度器的时间窗口04 · 测量仪器
什么定下周期,什么数着周期
周期的源头是一小片石英,通常在几十兆赫上振荡,精度约为千万分之一。芯片上的吉赫并非来自它,而是来自把这个基准频率倍频,于是整台机器的稳定性,继承自一粒米大小的矿石。
锁相环把振荡器分频后的频率与基准相比,一路微调到相位吻合;改动分频比,频率就能在运行中改变。正是它让电源管理在闲置时把周期降到几百兆赫,又在还有热余量的几秒钟里把它抬进睿频。
核心之内坐着一批寄存器,数着周期、完成的指令、缓存的落空和预测失误的分支,而且可以从运行中的程序里直接读出。由这些数得出每条指令的周期数——它是衡量代码在某一芯片上贴合得好不好的唯一诚实尺度。
要看见周期本身,需要一台能以几皮秒的分辨率抓住边沿的仪器;也正是它显示出那些让频率无法再往上抬的东西:相位抖动、信号到达芯片各个角落的偏斜,以及边沿在长线上的塌陷。
05 · 书写规则
周期与赫兹不是一回事
频率写成赫兹,兆和吉的词头要大写;周期数则写成整数,不带任何单位,因为周期不是 SI 单位。性能指标用大写、不加点,并注明属于哪个核心;把频率和性能混作一个量是不允许的。
第一种写法把两个不同的量混在一起:周期数无量纲,而赫兹量的是频率。第二种违反了词头的大小写,兆和吉是必须大写的。第三种按频率去比较那些每条指令周期数相差数倍的架构,这样的比较推不出任何结论。第四种把一个可变的量当成了固定的量。
07 · 历史部分
三十年的竞赛与取消的那一天
第一款单芯片处理器所用的频率,今天的芯片在一微秒的零头里就走过了,而它每条指令要花八个周期。那时的机器周期是个字面意义上的概念:读取指令、译码、取数、计算、写回——每一级各占一个周期,一个接一个严格排队。
各级一学会同时处理不同的指令,惯用的尺度就断了:一条指令仍走五个周期,但每个周期都有一条走出流水线。只好把数法倒过来,说每条指令多少个周期;在好机器上,这个数落到了一以下——也就是说,一个周期里完成的指令多于一条。
一款三十一级流水线的架构是为频率而造的,结果撞上了热:承诺的十吉赫所要的散热,在一台台式机箱里是不可想象的。项目关停,业界转向多核——不是因为多核更好,而是因为功耗的三次方增长没有留下别的路。
今天的核心没有单一的频率:闲置时降到几百兆赫,负载下爬向五吉赫,只要热余量还在就一直守着。说明书上的数字成了顺境下的一个许诺,厂商和评测者都不再照着它比较机器了。
一种在测量途中长度就在变的单位
周期对计量学家来说安排得很不趁手:它的长度不由基准定,而由芯片上的布线定,而且在同一颗处理器上每秒要变上百次,因为电源管理会把频率去迁就负载和温度。所以周期计数器不能拿来量时间,尽管它从外面看像一只钟;信赖它的程序,频率挪了多少,它就错多少。
可是对于周期本来为之而生的那件事,它比任何时间单位都更合用。数周期,量的不是时长,而是计算工作的分量;正因如此,每条指令的周期数在频率任何变动之下都保持可比——它说的是代码在芯片上贴合得好不好,而不是过去了多少秒。
目录 · 计量单位
每个量都有一份档案
七个 SI 基本单位,二十二个有专名的导出单位,以及若干制外量 — 少了它们,工程与历法都转不动。