在后摩尔时代,驱动计算机性能发展的是顶部空间
版权声明:
除非注明,本博文章均为原创,转载请以链接形式标明本文地址。
在后摩尔时代,驱动计算机性能发展的是顶部空间
对于Science文章《There’s plenty of room at the Top-What will drive computer performance after Moore’s law》的总结
作者:
Charles E. Leiserson :计算机科学家,专门研究并行计算和分布式计算理论,开发了Cilk多线程语言,发明了胖树互连网络,一种在许多超级计算机中使用的硬件通用互连网络,并且为《算法导论》作者之一。
Neil C. Thompson :麻省理工学院计算机科学与人工智能实验室研究员,曾在劳伦斯·利弗莫尔国家实验室工作。
Joel Emer :计算机性能分析技术的先驱,也是微处理器架构师。目前是Nvidia的研究员和麻省理工学院的实践教授。
Bradley C. Kuszmaul :麻省理工学院计算机科学实验室超级计算技术小组研究员,研究方向为高性能计算中求解系统问题的算法设计,于2020年加入Google。
Butler W. Lampson :计算机科学家,1992年获得图灵奖,1995年加盟微软,任软件总工程师至今。
Daniel Sanchez :麻省理工电气工程与计算机科学系副教授,研究方向为大规模,可扩展且高效的内存多级结构。
Tao B. Schardl :麻省理工计算机科学与人工智能实验室研究员,研究方向为编程模型,性能诊断和编译器技术。
过去的50年间,半导体技术的微型化,不断推动着计算机处理器性能的提高,所以,在1959年物理学家费曼就提出,在计算机底层还有很大的研究空间,而Intel创始人之一摩尔,也提出了著名的摩尔定律:每隔18个月,计算机处理器的性能会翻一倍。随着处理器制造工艺的不断提高,从2014年Intel推出的14nm芯片,到2019年Intel的10nm制程,虽然手机芯片现在减少到了5nm制程,但由于成本问题,制程工艺最终大约减少到5nm左右,那么摩尔定律的时代终将走向结束。
那么在后摩尔时代如何继续提高计算机的性能?作者认为对于计算机的研究应该从底层转向顶层,所以提出:在计算机顶层有很多问题待研究。作者将计算机顶层分为三个方面:硬件、算法、软件,具体提高性能的方法为:软件的性能工程,新的快速算法和硬件的简化。但不同于计算机底层的研究,能提出摩尔定律,顶层的研究中,能提出有效提高性能的方法,是很少的,并且随着研究的不断深入,性能的提升也会很小。而且顶层三个方面对性能的提高是相互依赖的,所以作者认为要更好的提升性能,要将软件构建成一个大的系统组件,即软件各个部分,预留充分多的接口。
软件
通常软件开发要求的是最短时间完成,而不关注运行时间,因为根据摩尔定律,软件运行时间肯定在减少,这种现象被称为软件膨胀。但在后摩尔时代,摩尔定律不再适用,处理器的时钟频率不再增加,使得越高级的语言,可能开发时间短,但运行时间很长。比如两个4096*4096的矩阵相乘,Python和C的运行时间就相差了40多倍,而在C基础上加上并行,局部性优化,利用AVX指令集,运行时间相差6万多倍。
那么,为什么会有软件膨胀?首先,软件开发者没有权衡运行效率,比如采用Python还是C编程,这需要权衡软件运行效率和开发时间;第二,软件开发者没有使用计算机处理器的加速功能,例如使用AVX指令集,因为使用这些特性会使得代码更加复杂;最重要的一点是,通常软件开发者采用规约的方式开发软件:假如求解A问题,但是有B问题的求解程序,而且A问题只是B问题的子问题,即求解了B,那么A也会求解出来,但也包含了A问题不需要的结果,由于引入冗余计算,B问题的运行效率肯定不高,但开发者不会去编写代码求解A问题,而是调用B问题的求解程序,因为编写求解A的程序需要对A问题足够了解,还要有性能优化的知识,所以这将会使得,在后摩尔时代,软件运行效率低。
为了更好的开发软件,作者提出一个软件性能工程的简单流程,(i)测试程序A的性能;(ii)优化程序A的代码,尝试得到运行更快的程序A’;(iii)测试A’的性能;(iv)如果A’的性能更好,使用程序A’的代码;(v)如果依旧没达到所要求的性能,返回步骤(ii)。
算法
算法一直在提高程序性能有很大作用,作者以最大流问题为例,求解最大流一般采用线性规划,但38年间随着求解线性规划问题的低复杂度算法提出,对于程序性能的提升超过了摩尔定律。而且从求解线性规划问题的性能数据看出,算法的提升有几点特性:1.好的算法很少 。2.新算法的提出也能随着摩尔定律而提升性能。 3.随着问题被深入研究,算法对性能的提升越来越少。
那么,怎么通过算法去提升性能呢?1.发现新的问题领域,提出更好的算法,比如人工智能领域的机器学习算法,搜索引擎方面的谷歌PageRank算法,DNA比对的动态规划算法。 2.提出扩展性好的算法,让算法能适配更大规模的问题。 3.算法的设计要充分利用计算机架构,比如并行性和Cache的局部性。
但是,计算机复杂的硬件功能,实际上使得为硬件定制算法更加困难,因为简单的理论模型无法推测算法是否真的有效。作者提出一种解决方法,自动调优,在可能的参数空间,运用机器学习的方法,找到运行最快的参数。当然不管是机器学习的训练和算法设计都需要大量的前期投入,而在后摩尔时代,算法设计者和硬件架构师应该加强合作,使得算法设计者理解底层,架构设计师能有效的设计相应的硬件。
硬件
为了提高计算机的性能,硬件架构师应该简化硬件,使晶体管的数量和硅的面积更少。通过这样的简化方式,让多余的面积上有更多的电路能并行运行。而目前的许多应用,比如机器学习、图计算、图像处理等等方面都需要并行。由历史SPECint性能数据可得出,2005年后,时钟频率增加幅度不大,但依靠并行,软件的性能也能按比例增长。
除了并行性,还有就是局部性,利用局部性能大大减少数据从内存传输到芯片所耗费的时间。许多重要的应用都充分利用并行性和局部性,而且利用好并行性和局部性,能在更少的功耗下达到相同的性能。
如何在处理器设计时,提高并行性?1.简化处理器,比如复杂指令集是为了加速串行运行的,那么采取精简指令集并且将多余空间加入更多的核,这样能带来更好的并行性。2.领域专用处理器(比简化处理器更重要),比如GPU主频不高,但核数多,早期用于图形计算,但耗时的计算都有很多重复计算,这样的重复计算都有并行性和局部性,所以GPU也被用来计算非图像计算,比如。采用GPU计算矩阵乘法能比使用AVX指令集和CPU并行,快5.4倍。在人工智能领域,除了使用GPU加速外,谷歌提出了新的专用处理器TPU,相信未来在自动驾驶、云计算等领域都有专用的处理器。
形成组件
在后摩尔时代,性能工程,算法开发和硬件简化的结合将形成最有效的大型系统组件。一个好的组件是一个可重复调用的软件,并且代码量很大,能适配相当复杂的硬件。形成一个组件对性能提高是非常有效的:1.使软件的开发更快和健壮性更好,模块化使得不同的领域的开发者能专注于自己的领域,只要各自约定好相应的接口即可。2.单个模块会使得代码层层嵌套,并不简单直接,而且许多提高性能的机会将不会在单个模块内产生,而是来自许多模块之间相互影响。3.有的组件能持续带来效益,比如Intel的ISA指令集,从1978年8086芯片发布以来,一直沿用到2016年的E5-2699处理器,晶体管的数量是8086的248000倍,但ISA的代码量增长不到起初的四分之一,并且以前的程序依旧能使用新ISA指令集的接口。
其它新生技术
为了提高计算机的性能,除了在顶层有潜力可挖以外,还有许多有潜力的新生技术:三维堆叠,量子计算,光子,超导材料,神经形态计算,石墨烯芯片。但目前,这些技术尚处于起步阶段,还不成熟,短期内无法与当今基于硅的半导体技术竞争。
个人总结
在后摩尔时代,想要继续提升性能,就必须从软件、硬件和算法形成的计算机顶层入手,软件方面需要优化其运行性能,充分利用底层特性;算法方面需要有更好的算法提出,并且面向底层架构设计;硬件方面需要简化硬件,更好的提升其并行性和局部性。当然三者不是独立的,可以说对于性能的提升是相互依赖的,所以一个好的软件,需要模块化的设计,设计出的模块要尽可能的能够被复用,而且以后只需改进模块内的代码,而无需修改其余的模块。虽然目前对于性能提升还有其它的新生技术,但还处于起步阶段,尚不成熟。