半导体工艺和架构是提升CPU性能的双驾马车,CPU的发展史,其实就是处理器架构和半导体工艺交互升级,协同演进的发展史。半导体工艺采用更先进的制程,晶体管尺寸变小了,芯片面积降低了,CPU的主频就可以做得更高,在相同的工艺制程下,通过不断优化CPU架构,从Cache,流水线,乱序执行,SIMD,多发射,指令预测等方面不断更新迭代,就可以设计出比别家公司性能更高,功耗更低的处理器。
2.6.1 单核处理器的瓶颈
在相同的半导体工艺制程下,芯片的面积越大,芯片的良品率就越低,芯片的成本就会越高,功耗也会越大。
而在相同的工艺下,提升芯片性能和减少功耗之间往往又是冲突的,以cache为例,增加l1,l2,l3 cache大小来提高命中率,但是芯片的面积和功耗也会随之增加,流水线同样如此,可以通过增加流水线级数,减少每一级流水时间的延迟,来提高处理器的主频,芯片设计也会更复杂。
单核时代的玩法差不多了,就需要多核了。
2.6.2 片上多核互连技术
多核处理器可以让多个任务真正同时执行,在单核处理器通过指令级并行性能提升空间有限的情况下,通过多核在任务级做到真正的并行,进一步提升CPU性能。
单核处理器芯片内部除了集成CPU的各个基本电路单元,还集成了各级Cache。当在一个芯片内部集成多个核时,各个Core之间怎么链接呢?Cache是每个Core独享,还是共享,不同架构的处理器,甚至相同架构不同版本的处理器,链接方式不同。
早期计算机比较简单,CPU和内存,IO模块直接相连,星型连接,浪费资源,扩展性差。
总线型连接也有缺陷,在某一个时刻只允许一对设备进行通信,当多个Core同时想占用总线与外部设备通信时,就会产生竞争,进而影响通信效率。
一个解决方法是使用线性阵列,分段使用总线,就像高速公路上的不同收费点一样,多个处理器可以分段使用总线资源进行通信,如IBM的Cell处理器,另一个解决方法是使用交叉开关,交叉开关像路由器一样有多个端口,多个Core可以通过交叉开关的端口的互连,并行通信。相互通信的各对节点都是独立的,互不干扰,交叉开关可以提高通信效率,但其自身也会占用芯片面积,功耗很大,尤其当链接设备很多,交叉开关端口很多的时候,芯片面积和功耗急剧上升,为了解决这个问题,可以使用层次化交叉开关。
交叉开关两两通信。4核以上使用RingBus结构,将总线和交叉开关结合起来,连成一个环状,相邻的两个Core通信效率最高,远离的两个Core之间可以通过开关路由通信,Intel的八核处理器一般都是采用这种结构的。
RingBus结构结合了总线型和开关型链接两者的优点,在成本功耗和通信效率之间达到一个平衡,但是也有局限性,链接很多core时,通信延迟又会带来效率下降。服务器一般16core以上,这种众核结构如果再使用以上连接方式则都会有局限性,影响多核整体性能的发挥,面向众核处理器领域,目前比较流行的一种片上互联技术叫做片上网络 net, on chip Noc。现在比较常用的二维Mesh网络如图2-48所示。
|
|
|
|
|
|
|
|
|
|
|
|
还有二维Mesh结构。
当处理器的Core很多的时候,不再使用总线型连接,使用网络节点的方式连接,每个节点包括计算单元,通信单元以及附属电路,极端和通信实现了分离,每一个节点中的处理单元可以是一个Core,也可以是一个小规模的Soc,Core与Core之间的通信基于通信协议进行,数据包在网络中按照设定的路由算法传输,通过网络通信的分布化来避免总线的竞争。
当2D Mesh网络连接的Core很多的时候,距离较远的两个Core,因为经过太多的路由,通信延迟也会对处理器整体性能产生一定影响。将网络路径中每一条线的首尾路由节点相连,变成了二维的RingBus结构,
Noc根据连接的节点类型,可以氛围同构和异构两种类型,同构类型网络上连接的节点处理器类型都是一样的,都是CPU的Core,而异构则指网络上可以连接不同类型的处理单元,如GPU, DSP, NPU, TPU等。