软件工程师们一直非常依赖摩尔定律来提高半导体的处理能力,但不断增加的MIPS现在已经接近尾声。半导体工业面临什么问题,软件工程师为什么不能依赖于减少指令周期,软件应该如何适应计算机体系结构的变化?
为什么摩尔定律会结束?
自从第一个晶体管问世以来,每两年在一个芯片上增加一倍晶体管数量的能力基本上决定了电子技术的能力。这种效应被称为摩尔定律,它极大地成就了CPU行业,每次CPU迭代都包含更多的晶体管,从而提高了CPU的性能。同时,还观察到另一个影响:随着半导体技术的改进,CPU时钟频率也提高了。时钟速率的提高对于每秒提供指令是必不可少的,正是这种影响使软件得到了重大改进。
然而,缩小晶体管尺寸正变得越来越困难,而且很快就几乎不可能了。当这种情况发生时,期望晶体管密度增加以提供更高性能的设计人员将面临困难,并将不得不寻找提高性能的替代方法。但是,当前的半导体技术面临的第二个问题是,它已经以最快的速度运行。当CPU的频率从100MHz增加到200MHz时,每秒可执行的指令数加倍。每秒执行两倍指令的能力允许CPU同时运行两个相同的任务,或者一个任务的速度提高一倍,从而提高性能。然而,在过去的十年里,消费者的CPU速度一直未能突破5GHz的界限,只有使用先进的液氮冷却系统才能实现8GHz。因此,计算机性能的提高来自于其他方法,如集成多核、加速内存传输、将软件例程转移到专门的硬件加速器中。
随着时间的推移,软件是如何改进的?
随着时间的推移,软件在提供更好的特性和功能(如图形渲染)方面有了很大的改进,但软件主要依赖于对硬件的改进。例如,求解复杂矩阵计算的能力一直是众所周知的,而且从第一台计算机开始,用软件编写这种计算方法是可行的。然而,硬件(如硬件乘法器和矩阵求解器)的改进使现代应用程序能够快速解决这些问题,而不是更好的编写软件的方法。
当考虑操作系统时,令人惊讶的是,尽管一台现代计算机的内核数量是20年前的8倍,RAM是16倍,但启动Windows7的时间却比WindowsXP长。诚然,这可能与现代操作系统加载大量进程和后台服务有关。更多的内核允许更多的进程同时运行,但是更多的内核不能更快地执行单个指令。
因此,要说软件已经改进是一种延伸,因为虽然现在可以使用功能丰富的应用程序,但这些功能中的大多数都是由性能更好的硬件造成的。
半导体硬件如何适应这种变化?
由于减小晶体管的尺寸越来越少,半导体有多种途径可供选择。一种方法是制造3D芯片,允许晶体管的多层结构增加晶体管的数量,从而增加核心的数量。然而,如前所述,仅仅增加更多的核心并不能改善每个周期的指令。
例如,软件乘法涉及到重复地将两个数字相加在一起,每次加法都要消耗一个指令周期。相反,硬件乘法器可以在一个时钟周期内将两个数字相乘,从而提高性能。硬件加速器的另一个例子是加密加速器,它可以比软件例程更快地执行加密任务,如AES和密钥生成。
软件需要做什么?
为了提高软件性能,首要任务是充分利用硬件加速。在处理通用编译器时,这可能是一个问题,因为它们可能使用软件例程而不是部署硬件例程。然而,即使软件工程师使用硬件加速器,当试图瞄准尽可能多的平台时,也会导致问题;并非所有的cpu都支持相同的硬件加速功能。智能的软件系统(如操作系统)可以检测到支持的硬件,从而根据机器调整其性能,但是用户应用程序很难将这些功能集成到其中。为微控制器编写高效的代码要容易得多,而且这样的系统很少有特权机制。即使是这样,程序员也很有可能访问特权区域,从而最大限度地利用硬件加速器。
总的来说,为了让软件有助于对抗摩尔定律,软件工程师和操作系统开发人员都需要重新思考软件是如何运行的。操作系统设计者首先需要明白,运行100个后台服务可能不是最好的,创建一个向后兼容DOS应用程序的操作系统意味着底层架构必须是古老的。软件工程师可能需要开始考虑他们所用的语言,该语言是如何执行/解释的,以及他们是否可以使用硬件加速器。