商业微处理器:历史、理论和趋势(四)从1980 年到1995 年:计算机体系结构理论的热潮

从1980 年到1995 年:计算机体系结构理论的热潮

怎样才能制造出性能更好的计算机?在此之前计算机的发展大多依靠架构师的经验和直觉,一旦架构师直觉失误或者技术无法支撑架构师的想法,很可能一代计算机的研究就荒废掉,一家公司也可能因此倒闭。但从1980 年开始,计算机开始走上一条理论指导实践的道路,如何平稳的提升计算机的性能,成了学术界的研究热点。这方面的技术主要分为三大类,指令级并行、数据级并行和线程级并行。首当其冲的,是对指令集的调整。

精简指令集计算机

1980 年Patterson 提出了要设计精简指令集计算机RISC[29]。当时的微处理器设计面临许多困难,包括CISC 芯片设计复杂度增加,复杂指令导致编译器选择指令困难。而从实际指令使用情况来看,IBM 360 上10 条指令就可以满足程序80% 的需要,要覆盖99% 的需要也不过需要30 条指令。RISC 具有许多优点,例如方便VLIW 设计、降低设计成本、更好的利用芯片面积和更高的指令速度。Patterson 还举例了在IBM、贝尔实验室和UCB 的相关研究工作,推动RISC 的发展。
尽管遇到了一些反对的声音[30],但后来的历史表明RISC 的道路是正确的。后来的计算机要么是基于精简指令集的,例如MIPS、ARM、RISC-V,要么前端仍然是复杂指令,但是通过译码转换成精简指令集再执行,例如Intel、AMD 和IBM。指令集是计算机硬件和软件的接口,新的指令集得到认可,接下来的任务就是如何高效的利用流水线。为此人们开始深入挖掘微处理器指令级并行的能力。

超长指令字与超标量

超长指令字VLIW 技术和超标量Superscalar 技术在思想上非常类似,都试图在一个周期里发射多条指令,提升微处理器的并行度。差别在于,超长指令字需要编译器分析指令间的依赖关系,并进行打包,以提示微处理器并行发射;而超标量则完全是硬件执行的动作,由硬件完成依赖分析和发射。目前大多数的微处理器都采用超标量的技术以减轻编译器的负担,而且可以在更大的指令窗口中进行调度,超长指令字的概念提的比较少了。在接下来要介绍微处理器中,大多数都采用了超标量技术,每周期可以发射多条指令,典型的例子包括MIPS R10000[31]。IBM 的Power 系列有些特别,采用对指令打包处理的方法提供并行性[32]。

分支预测器

分支预测器是至今仍是微处理器研究的重要部分,性能预测器每提升一个百分点都能明显提高微处理器的性能,绝大多数商用微处理器的分支预测器设计都是不公开的。1993 年的一篇研究报告[33] 曾经将分支预测器的性能在当时的负载条件下提高到98%,因此被许多微处理器借鉴[32, 34, 35]。我们来看他是怎么做的。

联合分支预测器使用一个局部预测器和一个全局预测器同时预测分支方向,并使用第三个预测器预测使用哪一个结果。局部预测器使用部分PC 索引,每个表项对应一个两位的计数器,计数器的高位作为预测方向,并根据预测的正确与否做出相应的调整。全局预测器使用PC 和到达该分支的程序路径上其他分支的跳转方向作为索引,可以使用拼接或者异或的方式整合信息。每个条目的结构和局部预测器类似。选择预测器同样使用PC 索引,每个表项也是一个两位计数器,其结果表示选用全局预测器的结果还是局部预测器的结果。
分支预测器相关工作近年来仍有学者研究,在新的工作负载和新的技术手段之下继续提升分支预测的效率。同时,也有人研究如何预测分支跳转的地址,以及和程序调用有关的分支预测。除了分支预测正确率之外,分支预测失败时的惩罚也是很重要的参数。

指令级并行的极限

就在人们兴致勃勃的想尽各种方法挖掘指令级并行的时候,一篇文章的出现打破了人们的美梦:指令级并行是有极限的[36]。假设在完美的寄存器重命名、完美的分支预测器、完美的别名分析、超大的指令窗口、运算部件全流水的情况下,程序本身的并行度有多少?模拟的结果表明并行度(按照文中的定义)大概在20到60 左右,一些轻微的不完美就会使得该值将至10 左右。这样的结果大致指明了指令级并行,或者叫循环级并行的极限。大概十年之后,随着集成晶体管的数量进一步增加,微处理器的设计者们终于撞到了指令级并行的极限上,不得不转而寻找其他方法。

Vector、SIMD 与GPU

想要突破指令级并行的极限,一种方法就是通过数据级并行。早期的超级计算机,例如CDC 6600、Cary-1、Illiac IV,都有向量执行的功能,摩尔定律的发展使得在微处理器中添加向量部件成为可能。另一方面,多媒体应用的兴起也迫切需要SIMD 的支持,这类负载中最常见的操作就是对一组数据采取同样的操作行为。Intel 在其后续微处理器[37–39] 当中逐步增加了向量指令的支持,增加了诸如MMX、SSE、AVX 指令集供程序员使用。同时运算部件增加向量运算单元,支持SIMD 功能,并逐步提升向量宽度。将数据级并行做到极致的当属NVIDA 公司的GPU,通过专用硬件为图形工作者、游戏爱好者、机器学习研究者提供向量加速和强大的浮点计算能力。

多线程技术

还有没有其他方法提高并行度呢?有的,答案是多线程技术。一直以来,一个微处理器上同一时间只能运行一个线程,通过操作系统的帮助完成线程间切换达到多线程同时运行的假象。如果每个微处理器上可以运行多个线程,那么当某个线程因为流水线阻塞而等待的时候,执行另一个线程的指令是不是就能填补原本被浪费的时钟周期了呢?本着这样的想法,主流的微处理器厂商纷纷推出了超线程技术[32, 38, 40]。尤其是在服务器这样需要同时对多个链接进行服务的场景,对多线程技术需求更大,因此Power 系列每个核心可以支持4 个线程同时运行[41]。

你可能感兴趣的:(商业微处理器:历史、理论和趋势(四)从1980 年到1995 年:计算机体系结构理论的热潮)