虽然CPU仍然在不断发展,但是它的性能已经不再仅仅受限于单个处理器类型或制造工艺上了。和过去相比,CPU性能提升的步伐明显放缓了,接下来怎么办,成为横亘在整个行业面前的大问题。
自2010年开始,单个CPU内核的处理能力就逐渐停止了增长的脚步,发热和噪声等和功耗相关的问题迫使处理器公司另辟蹊径,不再汲汲于推高时钟频率,转而在CPU中集成更多内核。多核设计的引入,下一代制造工艺对功耗和性能的改进,推动着处理器性能继续跟随着工艺升级的步伐大幅提升。但是现在,制造工艺升级对性能的提升幅度也大不如前,再加上许多公司已经完全停止了在更先进工艺节点上的努力,CPU性能的提升再次遇到了瓶颈。
CPU性能提升乏力的严峻现实影响到了多个行业的发展。软件开发人员已经习惯了并理所当然地预计计算和内存资源将会不断增长,但是现在,CPU性能提升的速度大不如前了。正是在摩尔定律的加持下,软件可编程能力和丰富的功能集合才得以出现并发挥重要作用,也给硬件工程师和软件工程师提供了一种缓冲。
“由于摩尔定律,计算能力的增长和加速在部分程度上应该归功于英特尔等公司不断前进到下一代工艺节点上,从而使得计算引擎本身的优化不再那么重要了,”Microchip旗下美高森美战略营销高级总监Nilam Ruparelia说。“再加上软件技术本身的进步,使得软件生产力提高的速度大大超过了摩尔定律。如果能够让编程变得轻松容易,就会有更多的人从事编程。通过软件完成各种事务的能力也已经大大增强。”
工艺的升级越来越难了。Flex Logix***执行官Geoff Tate表示,“处理器已经不再是执行计算任务的唯一解决方案了。看看数据中心吧,之前,这里面唯一的处理器件只有x86,但是现在,各种配置的FPGA和GPU处理器的身影几乎无处不在。”
这种异构方案在人工智能/机器学习的设计中尤为普遍。“根据运算的性质,很有必要将矩阵运算或密集型的线性代数运算放到GPU上执行,”Arteris IP营销副总裁Kurt Shuler说。 “你可以设计自己专属的ASIC进一步优化计算性能,也可以把一些任务负荷分配到FPGA上。当然,你可能依然需要CPU来管理高级别的数据控制流。总之,处理器件的数量越来愈多,而且变得越来越复杂。如果你分析一下数据中心就会发现,它们变得越来越异构化了。”
之所以出现这种转变,是因为物理规律的限制。“我们在RISC和CISC架构上已经做到头了,”西门子旗下Mentor的Questa产品经理Gordon Allan警告说。“可编程性和传统逻辑都在演变。现在,各种定制逻辑器件实现通用功能,然后通过智能互联技术把所有这些功能融合在一起。而之前则是通过软件将一些微操作组合在一起形成算法。”
这当然不意味着CPU会消亡或者停止演进,只不过CPU架构师的工作变得更加困难了。“通用CPU架构和微架构依然会继续发展,而且足以高效地胜任大多数任务,并将设计、生态建设和复杂性维持在可持续的水平上。”Arm嵌入式和汽车业务线战略副总裁Tim Whitfield表示。
影响架构改变的***障碍之一是可编程能力。“可编程能力的大小,甚至没有可编程能力也不会对整体效率带来多大影响,”Mentor的HLS平台项目主管Russell Klein说。 “传统的CPU、DSP、多核CPU和FPGA都是可编程的,但具有截然不同的效率和不同的编程难度。可编程能力在一定程度上降低了效率,但是影响效率的主要因素却在于并行计算能力。DSP具有执行特定任务的能力,其效率高过CPU。GPU也有一些特定于专业领域的计算单元,而且引入了并行计算。FPGA和ASIC的并行计算能力更为出色。”
硬件器件的异化比较容易,摆脱旧有的软件范式却非常艰难。“业界将应用程序进行更改,以适应更广泛的芯片类型。”Allan说。“这导致了新的软件生态系统和新API的出现,但是它们都只不过是在原有软件上构建了更多的层而已。这样做,都是为了试图让一个触及性能极限和低功耗极限的处理器继续工作而已。现在我们需要一些新的方法。”
“在这种情况下,人们应该把注意力从在软件开发上进行修补转移到新型硬件上,只有适当的硬件才能实现真正的节能。”Menta业务开发总经理兼副总裁Yoan Dupret说。“这将最终催生具有高度灵活性的异构芯片。Tsugio Makimoto博士之前就曾经预测过,今天我们正在进入“高度灵活的超级整合”时代。”
CPU的改进
对于那些认为CPU已经走入死胡同的说法,我想引用马克吐温先生的话回怼一下:“说我已经死了的报道太夸张了。”
CPU还有若干进一步改进的路径。其中之一就是针对特定功能添加定制指令,不过这也有一定的风险。“如果器件可编程,增加了指令就意味着增加了硬件的复杂性,”GreenWaves Technologies业务开发副总裁Martin Croome警告说。“新的指令单元里的每一个晶体管都有静态泄露,如果器件有低功耗指标,情况就糟糕了,新指令单元不仅增加成本,也提高了功耗。你必须小心,看看增加新指令是否利大于弊。”
在CPU的发展历史中,新的指令单元不断被增加进来。“随着制造工艺的发展,处理器设计人员可以使用的晶体管越来越多,于是他们增加了越来越多的功能,以加速运行在其上的单线程程序。”Mentor的Klein说道。“他们添加了各种指令单元,比如预测执行、分支预测、寄存器别名等等,但是,添加新指令单元的得失对比使得这条路子越走越窄了。”
在大多数情况下,能力整合可以带来一定的好处。“在处理器件的发展历史中,我们多次看到通用CPU集成各种加速器的情形。”Arm的Whitfield解释道,“通常,我们会对架构和微体系架构进行调整,将加速度集成到通用CPU中,这方面的例子包括浮点和加密加速器。”
还有一条路径:做减法。“我们认为RISC-V这种新的方案更好,它可以帮助我们在一定程度上克服摩尔定律的放缓,”美高森美的Ruparelia说。“一种全新的、优化的架构给我们提供了更多的方法,以克服摩尔定律放缓带来的挑战。如果硅片工艺的进化停止了,就像发条被拧到了最紧一样,你必须优化所有的层面-CPU、特定域的架构、工具链,甚至编译器也要针对特定应用进行优化。”
必须根据最终产品的目标设计合适的处理器。“通过比较不同处理器的能效,算法可以在消耗最少能量的情况下在相对简单的处理器上执行,”Klein补充说。“更大的处理器可以更快地完成工作,但是它们的能效低得多。此外,在几个小型处理器中并行运行某个算法,其能效比在一个大型处理器上运行这个算法高得多。随着更多简单内核的引入,电压和时钟频率可以进一步降低,从而进一步提高能效。”
优化计算引擎
针对特定任务打造内核是一项成功的策略。“可编程DSP是分担CPU密集计算应用的理想选择,”Cadence的Tensilica IP产品管理、营销和业务开发高级主管Lazaar Louis说。“DSP灵活、可编程,而且支持Open VX和Open CL等开放式、跨平台的加速标准,可轻松将应用程序移植到DSP。对于某些常见应用,DSP还可以与专用硬件加速器配合使用,不仅可以发挥加速器的更高功效,还可以结合DSP的可编程能力,从而满足应用在产品生命周期中不断变化的需求。”
许多架构都因为没有提供强大的软件开发环境而失败了。“GPU是一个通过打造成本可持续的独立开发环境和软件生态系统而大获成功的典型例子。”Whitfield说。“有的机器学习算法看起来需要一些专业的加速器,它们将作为一种粗粒度的加速引擎和通用CPU一起使用。”
GPU的成功之路非常有意思。“GPU是一种针对特定域的架构,刚开始主要面向游戏,现在又被用到区块链和神经网络上,”Ruparelia指出。“GPU有一些传统CPU上很难实现的功能,针对特定域优化的体系结构能够实现更高的单元计算性能和软件生产力。神经网络是一个典型的例子,和一个专门针对它设计的可编程平台相比,如果你在CPU上运行它,将花费10倍之多的运行时间和功耗。”
但是GPU并没有针对神经网络进行专门优化。“在卷积神经网络中,80%的时间都消耗在卷积运算上,”GreenWaves的Croome说。 “卷积有各种形式,运算量也各有大小。涉及到的概念有填充、膨胀、步幅以及滤波器的大小等。卷积有许多参数,如果你试图构建一个可以在硬件中完成所有卷积运算的系统,这个系统将使用大量当前已知的硬件。你必须使用最常见的卷积参数,并构建一些能够保持足够灵活性的东西。”
那么,是不是有人可以为定制加速器提供完整的软件开发环境呢?
“我们正在编写优化的内核,并给一些矢量化的运算进行了手工编码,”Croome继续说道。“我们使用了标准的向量操作,但是即便如此,你写代码时,当涉及到寄存器加载操作时,也需要考虑如何优化编码,以便编译器能够以一种特定的方式定位到它。”
这就是加速器的编码开始变得困难的地方。Synopsys解决方案事业部产品营销经理Gordon Cooper说:“使用一组GPU或CPU训练神经网络,然后在GPU上运行该神经网络非常容易。人们可以通过Caffe或TensorFlow做到这一点。但是,当我们使用专用硬件满足嵌入式系统的要求,比如低功耗、小尺寸时,GPU只能保证性能,却无法保证能效。使用异构方案的缺点是,无论是加速器还是专用处理器,都有各自不同的工具链或者多个工具链,你需要学习并管理好它们,这可不像给GPU编程那么简单。”
这是一种微妙的平衡。“使用GPU的优势是很灵活,但是无法保证功耗和尺寸,另一方面,没有编程环境,或者很难使用,一样会让你举步维艰,”Cooper补充道。“在加速器上变成永远不会像为CPU编写代码那样简单。你可以参照DSP世界的编程进行优化,先用C语言编程,然后优化内部的循环体。这是一种平衡。”
改换硬件
长期以来,FPGA都自我标榜为可编程的硬件。“硬件RTL工程师可以将FPGA用作可编程平台,这没有任何问题,”Rupatelia说。“但是,当软件工程师把FPGA作为一种可编程平台时,麻烦就来了。这个挑战已经存在很长时间了。”
今天,FPGA也被嵌入到了ASIC中。“eFPGA IP是异构方案的一种元素,怎么个用法取决于架构定义和代码的划分,”Menta的Dupret说。 “HLS工具可以为此提供帮助,但最终的目标是为异构体系结构自动化地进行代码划分。我们现在还没有实现这个目标,但我们确信这是行业发展的方向。”
这也很可能成为物联网硬件开发的重要一环。“我们如何确保物联网设备的灵活性,并且可以现场升级?”Allan问道。“可以需要结合使用软件和智能FPGA技术,它们都是当今CPU解决方案里的技术。我们现在谈论的是,定义产品时更少依赖硬件/软件交互,更多依赖编译好的逻辑器件、内存和可编程器件,以实现产品的灵活性。”
这可能意味着改变对软件的传统看法。Ruparelia指出:“当今的FPGA工具链依然不支持软件工程师在不了解FPGA的情况下直接使用它,这方面的进展甚微。不过,现在可以更加容易地针对特定领域或特定应用进行编程了。我们正在研究神经网络上使用的非常具体的中间件,它们抽象出了FPGA的复杂性,并保留了足够的灵活性,可供上层软件调用。”
除了处理单元,内存架构也存在进一步改进的压力。“硬件加速器正在部署更多可用内存,”Shuler说。“芯片到DRAM或HBM2的通信越少,效率就越高。我们该怎样把所有数据都保存在处理单元中,并在处理单元之间交互?处理器单元有时会有自己的暂存存储器,有时会连接到网格里的存储器中,那样的话,存储器就被分割开来,在整个架构中散落地无处不在。”
“我们结合芯片和处理器开发了多级缓存架构,将内容可寻址内存作为控制优化的关键技术,”Allan解释道。“然后我们开始研究一致缓存架构,其中,多个处理器围绕在共享内存空间周围,互相协作。现在,我们在计算器件中引入了神经网络,内存也是一个关键因素。内存技术将继续演进,我们会发现新的方案不断出现。HLS将发展为允许定制内存架构,以帮助加速特定算法。在这个领域有许多创新,可以将算法输入到HLS流中,并使用智能内存技术优化解决方案。”
和通用CPU形态相差最远的是专用硬件解决方案。“这是一种单线程编程模型,存在实打实的限制,”Klein指出。“将一个算法从CPU上转移到没有引入任何并行性的定制硬件上固然也可以提高效率,但是达不到人们的预期。进一步提升效率的关键在于找出并利用算法里的并行性。”
最终,需要软件思想的革新,推动设计人员以并行的方式实现各种算法。