计算机微体系结构,指的是计算机的核心部件*处理器CPU的架构。目前市面上CPU的型号令人眼花缭乱,计算机的类型也千变万化,但其中也有相对不变的因素,例如CPU的架构。本文细数从1964年开始的计算机发展史,看56年来计算机公司的繁荣衰败,架构师的利弊权衡,学术研究的潮流动向。
1964 年前的计算机大多数是为*的军事部门或者大公司定制的,几乎没有兼容性可言。而在1964年IBM发布了System 360系列计算机,该系列有多达14 个Model,并且相互之间全部兼容。用户可以根据实际需要从小型机逐步升级,同时不需要重新编写软件,这给市场带来了强烈的震撼。在我们现在看来,计算机的兼容性是一个几乎默认的事情。世面上种类繁多的计算机使用着种类繁多的芯片,但是都能运行Windows或Linux操作系统,安装软件只需要指定操作系统而不用指定计算机的型号。但是在当时,哪怕是同一家公司生产的计算机也不能做到相互兼容。IBM 360系列首次提出了指令集的概念,计算机的设计者和使用者约定好指令集,然后架构师想尽一切办法提高指令集的性能,而使用者使用这些指令编写代码。当计算机升级换代的时候,只要仍然支持原本的指令集,之前写好的软件就能顺利执行而不需要任何改动,这就是指令集兼容带来的好处。指令集的提出统一了当时计算机设计山头林立、各为其政的局面,在数据存储格式、IO设备接口、定点和浮点数字表示、ASCII和BCD编码、内存对齐、通用寄存器和累加器等方面制定了标准,有些后来被IEEE采纳,成为国际通用的标准。当年秦始皇统一天下之后重要的事情之一就是统一货币、文字、度量衡,IBM 360系列计算机担任的也正是这样的角色。计算机的通用性使得其使用更加方便,整个市场水涨船高,IBM也赚的盆满钵满,一举奠定了“蓝色巨人”的地位,统治计算机领域几十年。IBM 360系列计算机是计算机领域的里程碑,计算机有了发展的主线,即指令集。计算机快速发展的56年就这样开始了。
从1964年的IBM 360到1976 的Cray-1,计算机领域几乎一直是大型机和巨型机的天下。这一时期的计算机的体型、性能和价格都居高不下,是*机关、企业部门的专用设备,但其中的技术在今天仍然值得学习和借鉴。同处这一时期的DEC 公司则是小型机领域的领头羊,从8 位的PDP-8 到16 位的PDP-11 再到32 位的VAX-11,DEC 公司的小型机饱受市场赞誉。但不幸的是,长江后浪推前浪,小型机市场逐渐被后起之秀微型机侵占,最终惨淡收场。1971 年Intel 公司推出了其第一款微处理器4004,当时还仅仅用于便携式计算器的计算单元。经过几代产品的打磨,1978 年的8086 最终架构稳定,成为Intel 后续几乎所有微处理器芯片的源头,今天Intel 最先进的微处理器仍然支持8086 指令。
1980 年到1995 年的这段时期,是微处理器性能飞速发展的时期。随着集成电路技术的发展,许多大型机中使用的技术逐渐可以在微处理器上实现,聚焦提升微处理器的种种技术和讨论就此拉开帷幕。科学家和工程师全力提升微处理器的性能,极尽可能的挖掘并利用程序的局部性和并行性。指令集作为硬件和软件的接口,首当其冲面临变革,RISC 从此成为微处理器设计的基本技术。随后,有关深入挖掘指令级并行的技术[1] 如雨后春笋一般被广泛的提升和讨论,伴随着摩尔定律的加持,技术也有了充分发挥的空间。然而好景不长,1990 年的一篇技术报告给当时的人们当头棒喝:理论上存在这样一个极限,足够多的晶体管彻底挖掘了程序中所有的指令级并行性。十年之后果然如此。这期间,新的负载出现使得人们开始转向研究挖掘数据级并行和线程级并行的技术。经过十几年的技术沉淀,出现了很多教科书级的微处理器设计。我们考察了1996 年到2003 年间主流的微处理器架构,包括MIPS R10000,DEC Alpha 21264,Intel Pentium 4,AMD Opteron 和IBM Power4。这些微处理器具有较为全面的指令级并行的技术,值得被体系结构的科研人员仔细研究。相关文献大多发表在体系结构的顶会MICRO 上,含金量很高。另外,对比同一时期同一技术思想在不同指令集架构的微处理器上实现也是一件非常有意思的事情。
最近二十年体系结构的研究出现了一些新的趋势。
首先,功耗逐渐成了一个大问题。晶体管的尺寸太小导致Dennard Scaling 定律失效,电压问题不再是一个仅依靠工艺进步就能解决的问题了。一方面移动设备的激增,例如笔记本电脑、平板电脑和智能手机,续航能力成了评价产品的重要指标。另一方面对于高计算密度的数据中心而言,电费支出逐渐占据了成本的大头。这对微处理器的功耗控制提出了更高的要求。
其次,安全问题日渐突出。出现了许多针对体系结构的安全漏洞,例如“熔断”和“幽灵”,以及近期发现的由于DVFS 功耗控制所引发的漏洞。这些安全问题无法从软件层面避免,本质上来说是体系结构设计时就埋下的隐患。因此有关体系结构安全方面的研究也越发热门。
如同多媒体应用的出现促进了微处理器在向量指令方面的增强一样,新兴负载也在持续推动着计算机体系结构的发展。新的应用例如网络分析、人工智能、游戏、图形图像设计和虚拟货币,对算力提出了更高的要求。通用处理器在解决这些问题上并不能达到令人满意的结果,专用芯片再次被提升日程。针对具体的应用如何优化性能和功耗成为芯片设计们新的考验,由此诞生了各类加速芯片,例如GPU、TPU、FPGA、ASIC等。更进一步地,如果能够降低传统芯片设计的高门槛和巨大的前期投入,那么在面对新兴负载时就能快速反应,芯片便捷开发的概念逐渐散播开来。
单核微处理器的性能发展逐渐缓慢,人们开始寻求新的提升性能的方法。一个基本的想法就是使用多个微处理器核心,片上多处理器的就此诞生。片上网络的重要性也日渐凸显,同样要从性能和功耗两方面考虑。同样的,既然可以互连多个微处理器核,那么互连多个微处理器的想法也是顺理成章,这就是并行计算机。一般而言,为了简化系统的编程复杂度、提高通信的效率,在小规模的并行机上大多采用共享内存空间的方法。但由于各个微处理器都有自己的Cache,修改其中的数据如果不能尽可能的传播给其他微处理器就会引发数据不一致的问题,继而引发了有关Cache 一致性方面的研究。
最近二十年是互联网企业大发展的时期,为了更好的提供企业级的数据存储和计算的能力,Google、Amazon、Facebook、腾讯、阿里、百度都各自建立起自己的数据中心,云存储、云计算的概念被广泛的讨论。对数据中心而言,又有了许多新的问题,例如如何进一步提高计算效率和计算密度、更好的散热、管理设备故障、整合异构资源、协调分布式系统等问题等待着人们去解决。
从1964年到2020年,希望梳理的历史能够成为一面明镜。
[1] John L. Hennessy and David A. Patterson. Computer Architecture, Sixth Edition: A Quantitative Approach. Morgan Kaufmann Publishers Inc., 2017.