软硬件融合技术内幕 基础篇 (12) —— 时间老人,你从哪里来?

2022-09-08 17:21:06 浏览数 (1)

在前几期,我们揭秘了如何从软件层面和硬件层面优化计算机缓存,来实现让程序跑得更快,链接如下:

软硬件融合技术内幕 基础篇 (9) ——大厂高P毕业背后的隐情 (上)

软硬件融合技术内幕 基础篇 (10) ——大厂高P毕业背后的隐情 (中)

软硬件融合技术内幕 基础篇 (11) ——大厂高P毕业背后的隐情 (下)

而实际上,决定系统运行性能最核心的一个因素,是系统的时钟。

对计算机硬件略有了解的读者都会注意到,CPU和内存等部件,都有一个关键的性能指标:工作频率。

如前文中提到的,小霸王学习机的CPU运行在1MHz,因此只能支撑魂斗罗等游戏的运行。而现在的手机的CPU工作频率往往达到1.5GHz以上,因此,可以运行王者荣耀、英雄联盟、绝地求生等画面精美,场景激烈的游戏。

那么,CPU运行频率究竟是怎么决定的呢?

我们从最简单的例子看起。

小霸王学习机有个好兄弟,叫单片机。

这个东西在一颗芯片里面集成了并行IO口和串口等电路,工作频率的上限为12MHz。实际上,为了方便生成9600Hz及其整倍数的串口通信波特率,一般采用11.0592MHz作为单片机的工作频率。

怎么样改变单片机的工作频率呢?

原来,单片机的工作频率来自这个家伙——

这个东西里面有一小片石英晶体,能够允许频率处于一个非常窄的范围的电信号通过——也就是石英晶体的固有频率,结合单片机内部的起振电路,就可以为单片机提供时钟信号。

类似地,在x86计算机中,也有一颗这样的时钟基准源——

它和单片机的晶振实际上是一样的东西,其固有频率最初为14.318MHz。

为什么是这个数字呢?

原来,早在1980年代,IBM的工程师们为了让计算机能够用电视机充当显示器,需要让计算机输出NTSC电视制式的模拟信号到电视机。NTSC彩色制式的色副载波频率为3.58MHz,因此在主板上设计了一个14.318MHz的晶振,经过2次对半分频以后,得到3.58MHz的NTSC基准频率。初代基于8086的4.77MHz工作频率则是14.318MHz的三分之一。

这个设计一直传承下来,直到现在的计算机中仍然能找到这个频率的痕迹。

一些喜欢思考的同学可能会注意到,现在计算机的CPU频率往往是100MHz的整倍数,如方老师使用的这台Microsoft Surface Pro 7的CPU基频是1.3GHz:

实际上,1.3GHz是100MHz的13倍频,而100MHz又是从哪里来的呢?

原来在主板的南桥上,内置了嵌入式时钟控制器(Integrated Clock Control)。它的逻辑框图如下:

(来自Intel Z370系列南桥的Data Sheet)

如图,目前主板上基准时钟晶振已经更新为24MHz,经过芯片内部的PLL电路,转换出100MHz的BCLK (Base Clock),输出到CPU/北桥/内存/PCI-E子系统,作为这些子系统工作的时钟基准。在前文中,内存工作频率为2400/2666/2933/3200等,PCIe工作在5GHz,这些子系统的工作频率实际上都是通过BCLK转换出来的。

子系统与BCLK之间的转换关系被称为Clock Tree。

以方老师手头这台计算机为例,其CPU运行在1300MHz,DRAM运行在1200MHz(2400的一半),而GPU运行在300MHz,其Clock Tree如下图:

图中可以看出,来自南桥的100MHz基准频率,送到CPU,DRAM和GPU以后,分别经过13倍,12倍和3倍的倍频转换,成为了这三个子系统的工作频率。

有些同学可能会联想到,在《虚拟化与云计算硬核技术内幕 (1) —— 睿频与精酿》中,我们提到过,CPU的频率是可以动态调整的,当系统负载较高的时候,CPU会短时间自动提升频率,在撞上了“温度墙”以前,可以以超过基准频率的速度工作,也就是提高倍频的倍数。实际上,GPU也可以支持这一功能。

那么,倍频和自动调整倍频这个功能,是如何实现的呢?

请看下期。

0 人点赞