计算机体系结构是关于计算机本身的系统体系结构,而软件指令集体系结构是计算机体系结构的核心,因为软件和硬件是通过软件指令集体系结构连接的(ISA)来谈谈。例如,在1960年代初期,IBM有四个不兼容的计算机系列,分别针对小型企业、大型企业、科学和实时处理市场,每个系列都有自己的ISA、软件堆栈和I/O系统。可以创建单个ISA以有效地统一吗?数据通路是处理器的“肌肉”,进行算术运算,相对容易扩展。最大的挑战是处理器的扩展。受软件编程的启发,MauriceWilkes提出了一种简化控制的方法。控制器被指定为称为“控制存储区”的二维数组。数组的每一列对应一条控制线,每一行对应一条微指令。编写微指令的过程称为微程序设计。控制内存是通过内存实现的,比逻辑门便宜很多。在微程序的帮助下,IBM的新ISA彻底改变了计算机行业并主导了其市场,以至于拥有数十年历史的大型机家族每年仍能带来超过100亿美元的收入。这是通常需要大量工程投资的架构创新的成功。从集成电路到8086当计算机开始使用集成电路时,摩尔定律意味着控制存储可以变得更大,这反过来又允许更复杂的ISA。70年代的微处理器还处于8位时代(如Intel8080),多采用汇编语言编程,竞争对手通过汇编语言的例子展示了自己的优势。Intel的8800ISA是一个雄心勃勃的计算机体系结构项目,具有32位寻址能力、面向对象的体系结构、可变位长度指令以及用当时的新编程语言Ada编写的操作系统。然而,英特尔在1979年争先恐后地更换了16位微处理器,新团队花了52周的时间开发了新的“8086”ISA,设计并制造了芯片。由于时间紧迫,设计ISA的只有10人/周,主要是将8080的8位寄存器和指令集扩展到16位。该团队按计划完成了8086。IBM正在开发个人计算机以与AppleII竞争,并且需要一个16位微处理器。IBM对摩托罗拉68000很感兴趣,但它落后于IBM的开发计划,转而使用8086。后来IBMPC大卖,给Intel的8086ISA带来了非常光明的前景。最初的8800项目在1986年停产,那年Intel在80386中将16位的8086ISA扩展到32位,其寄存器也从16位扩展到32位,x86的ISA成功了,因为市场很少有耐心。从复杂指令集到精简指令集20世纪80年代初期,许多研究都是针对具有大控制存储器的复杂指令集计算机(CISC)进行的。由于Unix操作系统是用高级语言编写的,关键问题变成了:“编译器将生成什么指令?”,硬件/软件接口的重大改进为架构创新创造了机会。如果编译器只使用简单的寄存器操作和加载/存储数据传输,避免使用更复杂的指令,那么使用简单指令子集的程序运行速度会快三倍。这样的实验和向高级语言的转移导致了从CISC转移到RISC的机会。首先,简化了RISC指令,因此不需要微代码解释器。RISC指令通常和微指令一样简单,可以直接由硬件执行。其次,最初用于CISCISA微代码解释器的内存被重新用作RISC指令的缓存。第三,基于图形着色方案的寄存器分配器使编译器更容易有效地使用寄存器。最后,一个完整的32位数据路径,连同指令和数据高速缓存,可以包含在单个芯片中。在类似的技术中,CISC每个指令周期执行5到6个时钟,而RISC大约快4倍。ISA的下一个创新是显式并行指令集,将多个独立操作捆绑在每条指令中。如果可以指定一条指令,则编译器技术可以有效地将操作分布在多个指令槽中,并且可以使硬件变得更简单。与RISC方法一样,工作从硬件卸载到编译器。但是基于这种思想的64位处理器,虽然在高度结构化的浮点程序中表现良好,但对于分支较少的整数程序就很难达到高性能。市场最终再次失去了耐心,导致出现了64位版本的x86。从PC时代到后PC时代,AMD和英特尔利用众多资源和卓越的半导体技术来缩小x86和RISC之间的性能差距。再次受到简单指令性能优势的启发,指令译码器在运行时将复杂的x86指令翻译成类RISC内部微指令,然后流水线执行RISC微指令。任何在RISC上用于执行/分离指令和数据缓存、片上二级缓存、深度管道、同时获取和执行多条指令的任何想法都可以纳入x86,2011年左右,PC时代几乎巅峰时期。PC软件已经成为一个巨大的市场。虽然Unix市场的软件供应商会为不同的商业ISA提供不同的软件版本,但PC市场只有一种ISA,所以软件开发商提供的软件只能二进制兼容x86ISA。巨大的软件规模、相似的性能和更低的价格让x86统治了台式机和小型服务器市场。2007年,苹果推出iPhone,开启了后PC时代。智能手机公司不购买微处理器,而是使用其他公司的设计(主要是ARM的RISC处理器)构建自己的片上系统(SoC)。移动设备设计人员认为芯片尺寸和能效与性能一样重要,这使CISC的ISA处于劣势。此外,物联网的出现显着增加了处理器的数量,并且需要在裸片尺寸、功耗、成本和性能方面进行权衡。这种趋势增加了设计时间和成本,进一步削弱了CISC处理器的优势。在今天的后PC时代,x86出货量自2011年以来每年下降近10%,而采用RISC处理器的芯片却飙升。今天,99%的32位和64位处理器都是RISC。回过头来看,RISC/CISC之争市场平息,PC时代后期CISC胜出,后PC时代RISC胜出。当从单核时代走向多核时代时“如果一个问题没有解决方案,那它可能就不是问题,而是一个不需要解决的事实,而是需要时间来解决的。”自20世纪70年代后期以来,选择的技术是基于金属氧化物半导体(MOS)的集成电路,首先是nMOS,然后是CMOS。MOS技术令人难以置信的改进速度一直是驱动因素,允许采用更积极的方法来实现给定ISA的性能。由于晶体管密度随速度呈二次方增长,因此需要使用更多晶体管来提高性能。虽然摩尔定律已经持续了几十年,但它在2000年左右开始放缓,到2018年,摩尔定律预测与当前能力之间的差距约为15倍,并且随着CMOS技术接近基本极限,差距将继续扩大。从1986年到2002年,并行指令层次结构的开发是获得性能的主要架构方法,随着晶体管速度的提高,每年的性能提升大约50%。为了保持管道满负荷运行,推测分支推测性地将代码放入管道中执行。这种预测的使用既是性能的来源,也是低效率的来源。当分支预测正确时,可以提高性能,需要很少的额外功率,甚至可以节省功率。但是当它“错误预测”了一个分支时,处理器必须丢弃错误预测的指令,从而浪费计算工作量和能量。处理器的内部状态也必须恢复到错误预测分支之前的状态,这会消耗额外的时间和能量。事实上,没有一个程序的分支可以如此精确地预测。这导致了多核时代的诞生。多核技术将确定并行性的责任转移给了程序员和操作系统,未能解决能效挑战。每个activecore都在消耗能量,无论是否有效提高计算效率,并行计算的加速受限于顺序部分。实际程序具有更复杂的结构,允许在任何时候使用不同数量的处理器。尽管如此,定期通信和同步的需要意味着大多数应用程序只能有效地使用处理器的一小部分。此外,多核处理器受到热功耗(TDP)或封装和冷却系统的限制。TDP限制的直接结果是处理器会降低时钟频率并关闭空闲内核以防止过热。从通用处理到伪装成无法解决的特定领域问题,摆在我们面前的是惊人的机会。通用处理器固有的低效率使得通用处理器无法保持显着的性能提升。鉴于提高性能以支持新软件功能的重要性,还有哪些其他方法可能有前途?一种更以硬件为中心的方法是设计针对特定问题域并为该域提供显着性能的计算机架构通常是图灵完备的,但为特定类别的应用程序定制。它们不同于专用集成电路(ASIC),后者通常用于代码很少更改的单一功能。DSA通常被称为加速器,数据应用系统可以实现更好的性能,包括图形处理单元(GPU)、用于深度学习的神经网络处理器和用于软件定义网络(SDN)的处理器。DSA为特定领域开发了一种更有效的并行形式,可以更有效地使用内存,其中内存访问比算术计算昂贵得多。通用CPU通常支持32位和64位整数和浮点数据。对于机器学习和图形中的许多应用程序,这比必要的更准确。例如,在DNN中,推理通常使用4位、8位或16位整数,这会增加数据和计算吞吐量。同样,对于DNN训练应用程序,FP很有用,但32位可能就足够了,通常16位就可以了。DSA需要对架构进行高级操作,但试图从通用语言(如Python、Java、C等)中提取这种结构和信息是非常困难的。领域特定语言(DSL)支持这个过程,并使高效编写DSA成为可能。例如,DSL可以显式地对向量、稠密矩阵和稀疏矩阵进行运算,从而允许DSL编译器有效地将运算映射到处理器。DSL的示例包括Matlab、TensorFlow、P4(一种用于编写SDN程序的语言)和Halide等。使用DSL时面临的挑战是如何保持足够的独立性,使使用DSL编写的软件可以移植到不同的体系结构,同时实现软件到底层DSA的有效映射。例如,使用NvidiaGPU或TPU将Tensorflow转换为异构处理器。平衡跨ISA的可移植性和效率对于语言设计者、编译器工作者和DSA架构师来说是一个巨大的挑战。如上图所示,TPU与通用处理器有很大不同。主要计算单元为矩阵单元,多种技术结合是通用单核CPU的100倍左右。与缓存不同的是,TPU使用了24兆字节的本地内存,大约是2015年通用CPU功耗的两倍。使用基于Google的六个常见推理问题的加权算术平均,TPU比通用CPU快29倍-用途CPU。对于此工作负载,TPU的能效是通用CPU的80多倍。从开放架构到敏捷硬件开发受开源软件成功的启发,为了创建“处理器的Linux”,需要一个行业标准的开放ISA,以便社区可以创建一个开源内核。如果许多组织使用相同的ISA设计处理器,那么更大的竞争可能会推动更快的创新。第一个例子是RISC-V,RISC-V社区在RISC-V基金会的管理下维护架构http://riscv.org/。OpenISA的发展是公开进行的,硬件和软件专家在做出最终决定之前进行协作。RISC-V是一个模块化指令集,一小部分指令在开源软件堆栈上运行,后面是可选的标准扩展,可以根据需要包含或省略。基准版本包括32位和64位版本。RISC-V只能通过可选的扩展来增长;即使不采用新的扩展,软件堆栈仍然运行良好。RISC-V的显着特点是ISA的简单性。与ARM开发的armv8相比,RISC-V的指令少,指令格式也少。RISC-V只有6种指令格式,而armv8至少有14种。由于RISC-V的目标范围从数据中心芯片到物联网设备,因此设计验证可能占开发成本的很大一部分。简单性减少了设计处理器和验证硬件正确性的工作量。RISC-V是一种简洁的设计,避免了已被编译器技术进步所取代的微体系结构或技术相关功能。RISC-V还通过为自定义加速器保留大量操作码空间来支持DSA。除了RISC-V,Nvidia还在2017年宣布了一种名为NVDLA的免费开放架构,这是一种用于机器学习推理的可扩展和可配置的DSA。配置选项包括数据类型(int8、int16或fp16)和二维乘法矩阵的大小,并且ISA、软件堆栈和实现是开放的。再次受到软件开发过程的启发,ECAD工具提高了抽象级别以支持敏捷开发。这种更高级别的抽象增加了设计之间的重用。上图概述了敏捷开发方法如何通过在适当级别更改原型来工作。最内层是软件模拟器。如果模拟器可以满足一次迭代,那么软件模拟器是最简单、最快的更改方式。地方。下一层是FPGA,它比详细的软件模拟器快数百倍。FPGA可以运行操作系统和完整的类似SPEC的基准测试,允许对原型进行更精确的评估。AWS在云端提供FPGA服务,可以直接使用,无需先购买硬件和搭建实验室。下一层使用ECAD工具生成芯片布局。即使在该工具运行之后,也需要一些手动步骤来改进结果,然后才能准备好生产新的处理器。如果目标是做一个大芯片,最外面的设计是昂贵的。总结软件创新可以激发计算机体系结构的创新,而完善硬件/软件接口的抽象层则为创新提供了机会。市场最终决定了关于计算机体系结构的争论。摩尔定律的终结不是必须解决的问题,而是特定领域的语言和架构将人们从专有指令集的链条中解放出来这一事实。借助开源生态系统,灵活开发的芯片将展示先进技术,加速商业应用。处理器的ISA很可能是RISC-V,过程也可能演变为敏捷的硬件开发。
