2.7 后摩尔时代:异构计算的崛起
随着物联网、大数据、人工智能时代的到来,海量的数据分析、大量复杂的运算对CPU的算力要求越来越高。CPU内部的大部分资源用于缓存和逻辑控制,适合运行具有分支跳转、逻辑复杂、数据结构不规则、递归等特点的串行程序。在集成电路工艺制程将要达到极限,摩尔定律快要失效的背景下,无论是单核CPU,还是多核CPU,处理器性能的提升空间都已经快达到极限了。适用于大数据分析、海量计算的计算机新型架构——异构计算,逐渐成为目前的研究热点。
2.7.1 什么是异构计算
简单点理解,异构计算就是在SoC芯片内部集成不同架构的Core,如DSP、GPU、NPU、TPU等不同架构的处理单元,各个核心协同运算,让整个SoC性能得到充分发挥。在异构计算机系统中,CPU像一个大脑,适合处理分支、跳转等复杂逻辑的程序;GPU头脑简单,但四肢发达,擅长处理图片、视频数据;而在人工智能领域,则是NPU和FPGA的战场。大家在一个SoC系统芯片内发挥各自专长,多兵种协同作战,让处理器的整体性能得到更大地提升。
2.7.2 GPU
GPU(Graphic Process Unit,图形处理单元)主要用来处理图像数据。玩过吃鸡或3D游戏的朋友可能都知道,个人计算机上不配置一块大容量的显卡,这些游戏根本玩不了。显卡是显式接口卡的简称,计算机联网需要网卡,计算机显示则需要显卡。显卡将数字图像信号转换为模拟信号,并输出到屏幕上。早期的计算机比较简单,都是简单的文本显示,显卡都是直接集成到主板上,只充当适配器的角色,即只具备图形信号转换和输出的功能,对于一些简单的图像处理,CPU就能轻松应付,不需要显卡的参与。随着大型3D游戏、制图、视频渲染等软件的流行,计算机对图像数据的计算量成倍增加,CPU已经越来越力不从心,独立显卡开始承担图像处理和视频渲染的工作。
GPU是显卡电路板上的芯片,主要用来进行图像处理、视频渲染。GPU虽然是为图像处理设计的,但如果你认为它只能进行图像处理就大错特错了。GPU在浮点运算、大数据处理、密码破解、人工智能等领域都是一把好手,比CPU更适合做大规模并行的数据运算。“没有金刚钻,不揽瓷器活,打铁还需自身硬”,如图2-54所示,GPU比CPU强悍的地方在于其自身架构。
图2-54 CPU与GPU的架构对比
CPU有强大的ALU、复杂的控制单元,再配上分支预测、流水线、Cache、多发射,单核的功能可以做得很强大,特别擅长处理各种复杂的逻辑程序,如跳转分支、循环结构等。但CPU的局限是,由于软件本身不可能无限拆分为并行执行,导致CPU的核数也不可能无限增加,而且在一个单核中Cache和控制单元电路就占了很大一部分芯片面积,也不可能集成太多的ALU。后续的处理器虽然扩充了SIMD指令集,通过数据并行来提高处理器的性能,但面对日益复杂的图形处理和海量数据也是越来越力不从心。GPU也是一种SIMD结构,但和CPU不同的是,它没有复杂的控制单元和Cache,却集成了几千个,甚至上万个计算核心。正可谓“双拳难敌四手,恶虎也怕群狼”,GPU天然多线程,特别适合大数据并行处理,在现在的计算机中被广泛使用。在个人计算机上,GPU一般以独立显卡的形式插到主板上,跟CPU一起协同工作;在手机处理器里,GPU一般以IP的形式集成到SoC芯片内部。
2.7.3 DSP
DSP(Digital Signal Processing,数字信号处理器),主要用在音频信号处理和通信领域。相比CPU,DSP有三个优势:一是DSP采用哈弗架构,指令和数据独立存储,并行存取,执行效率更高。二是DSP对指令的优化,提高了对信号的处理效率,DSP有专门的硬件乘法器,可以在一个时钟周期内完成乘法运算。为了提高对信号的实时处理,DSP增加了很多单周期指令,如单周期乘加指令、逆序加减指令、块重复指令等。第三个优势是,DSP是专门针对信号处理、乘法、FFT运算做了优化的ASIC电路,相比CPU、GPU这些通用处理器,没有冗余的逻辑电路,功耗可以做得更小。
DSP主要应用在音频信号处理和通信领域,如手机的基带信号处理,就是使用DSP处理的。DSP的缺陷是只适合做大量重复运算,无法像CPU那样提供一个通用的平台,DSP处理器虽然有自己的指令集和C语言编译器,但对操作系统的支持一般。目前DSP市场被严重蚕食,在高速信号采集处理领域被FPGA抢去一部分市场,目前大多数以协处理器的形式与ARM协同工作。
2.7.4 FPGA
FPGA(Field Programmable Gate Array,现场可编程门阵列)在专用集成电路(Application Specific Integrated Circuit,ASIC)领域中是以一种半定制电路的形式出现的。FPGA既解决了定制电路的不足,又克服了原有可编程逻辑器件(Programmable Logic Device,PLD)门电路有限的局限。FPGA芯片内部集成了大量的逻辑门电路和存储器,用户可以通过VHDL、Verilog甚至高级语言编写代码来描述它们之间的连线,将这些连线配置文件写入芯片内部,就可以构成具有特定功能的电路。
FPGA不依赖冯·诺依曼体系结构,也不要编译器编译指令,它直接将硬件描述语言翻译为晶体管门电路的组合,实现特定的算法和功能。FPGA剔除了CPU、GPU等通用处理器的冗余逻辑电路,电路结构更加简单直接,处理速度更快,在数据并行处理方面最具优势。可编程逻辑器件通过配套的集成开发工具,可以随时修改代码,下载到芯片内部,重新连线生成新的功能。正是因为这种特性,FPGA在数字芯片验证、ASIC设计的前期验证、人工智能领域广受欢迎。
FPGA一般和CPU结合使用、协同工作。以高速信号采集和处理为例,如图2-55所示,CPU负责采集模拟信号,通过A/D转换,将模拟信号转换成数字信号;然后将数字信号送到FPGA进行处理;FPGA依靠自身硬件电路的性能优势,对数字信号进行快速处理;最后将处理结果发送回CPU处理器,以便CPU做进一步的后续处理。
图2-55 ARM处理器与FPGA协同工作
在嵌入式开发中,为了更方便地控制FPGA工作,可以将ARM核和FPGA集成到一块。一种集成方式是在FPGA芯片内部集成一个ARM核,在上面运行操作系统和应用程序,这种FPGA芯片也被称为FPGA SoC。另一种集成方式是将FPGA以一个IP的形式集成到ARM SoC芯片内,实现异构计算。这种嵌入式SoC芯片上的FPGA,一般也称为eFPGA,可以根据系统的需求配置成不同的模块,使用更加灵活。
FPGA与DSP相比,开发更具有灵活性,但成本也随之上升,上手也比较难,因此主要用在一些军事设备、高端电子设备、高速信号采集和图像处理领域。
2.7.5 TPU
TPU(Tensor Processing Unit,张量处理器)是Google公司为提高深层网络的运算能力而专门研发的一款ASIC芯片。为了满足人工智能的算力需求,如图2-56所示,TPU的设计架构和CPU、GPU相比更加激进:TPU砍去了分支预测、Cache、多线程等逻辑器件,在省下的芯片面积里集成了6万多个矩阵乘法单元(Matrix Multiply Unit)和24MB的片上内存SRAM作为缓存。
图2-56 TPU内部各模块占用芯片面积比例
核数越多,运算单元越多,内存的数据存取就越容易成为瓶颈。TPU使用双通道内存将内存带宽提升至2倍,内部集成了24MB大小的片上内存SRAM作为统一缓冲区,来减少内存读写次数。4096个累加器虽然是寄存器,但本质上也是一种缓存,用来缓存计算产生的中间结果,不需要每次都将计算结果写回内存再读回来,进一步减少了内存带宽瓶颈,从而让TPU的计算能力彻底释放,并行计算能力相比CPU可以提升至少30倍。TPU如果使用GPU的GDDR5内存提升内存带宽,算力会进一步提升到GPU的70倍、CPU的200倍。
在同构处理器时代,我们一般使用主频来衡量一个处理器的性能。而到了异构处理器时代,随着人工智能、大数据、多媒体编解码对海量数据的计算需求,我们一般使用浮点运算能力来衡量一个处理器的性能。
每秒浮点运算次数(Floating Point Operations Per Second,FLOPS),又称为每秒峰值速度。浮点运算在科研领域大量使用,现在的CPU除了支持整数运算,一般还支持浮点运算,有专门的浮点运算单元,FLOPS测量的就是处理器的浮点运算能力。FLOPS的计算公式如下:
浮点运算能力=处理器核数×每周期浮点运算次数×处理器主频
除了FLOPS,还有MFLOPS、GFLOPS、TFLOPS、PFLOPS、EFLOPS等单位,它们之间的换算关系如下。
1946年,世界上第一台通用计算机诞生于美国宾夕法尼亚大学,运算速度为300FLOPS。早期树莓派使用的博通CM2708 ARM11处理器,主频为1GHz,运算速度为316.56MFLOPS。2011年发射的“好奇号”火星探测器,使用的是IBM的PowerPC架构的处理器,主频为200MHz,运算速度相当于Intel 80386处理器的水平,差不多在0.4GFLOPS。
Intel的Core-i5-4210U处理器运算速度为36GFLOPS,Microsoft Xbox 360运算速度为240GFLOS,ARM Mali-T760 GPU主频600MHz,运算速度为326GFLOPS,NVIDIA GeForce 840M运算速度为700GFLOPS,相当于0.7TFLOPS。
当前流行的《绝地求生》游戏,运行这款游戏需要的标配显卡NVIDIA Geforce GTX 1060运算速度为3.85TFLOPS,GTX 1080 Ti运算速度为11.5TFLOPS。最新的NVIDIA Tesla V100显卡,目前市场价为几万元,运算速度为125TFLOPS,是世界上第一个使用量突破100万亿次的深度学习GPU。Google公司在2017年发布的TPU V2处理器的运算能力达到了180 TFLOPS;华为公司2018年发布的昇腾910 AI芯片,算力达到256TFLOPS;Google公司2019年发布的TPU V3版本,峰值算力更是飙到了420 TFLOPS。在2.6.1节我们提到的号称史上最强的AI芯片Wafer Scale Engine,在一个iPad大小的芯片上集成了40万个核心,18GB的片上内存SRAM,内存带宽达到9PBytes/s,算力性能是Google TPU V3的三倍以上。
2008年,中国第一台闯入世界前10的超级计算机——中国“曙光”5000A超级计算机,计算速度为230TFLOPS,相当于0.23PFLOPS。我国首台千万亿次的“天河一号”超级计算机运算速度为2.566PFLOPS,美国橡树岭国家实验室的“泰坦”超级计算机算力为17.59PFLOPS,“天河二号”超级计算机的运算速度为33.86PFLOPS,连续多年登顶的无锡“神威·太湖之光”超级计算机的运算速度为93.01PFLOPS,IBM设计的Summit超级计算机,运算速度为154.5PFLOPS,目前(2020年6月发布)排在第一的是日本的富岳超级计算机,采用ARM架构,算力达到了415.53PFLOPS,相当于0.415EFLOPS。
2013年,比特币的全网算力为1EFLOPS;2018年5月,比特币的全网算力为35EFLOPS。2020年5月,比特币的全网算力峰值高达70EFLOPS,随着比特币价格的上下波动,比特币的全网挖矿算力也随之上下起伏。
因为功耗问题,TPU和显卡、AI芯片主要应用在各种服务器、云端、超级计算机上。接下来要介绍的NPU,则以较高的性价比、性能功耗比优势在目前的手机处理器中得到了广泛应用。
2.7.6 NPU
NPU(Neural Network Processing Unit,神经网络处理器)是面向人工智能领域,基于神经网络算法,进行硬件加速的处理器统称。NPU使用电路来模拟人类的神经元和突触结构,用自己指令集中的专有指令直接处理大规模的神经元和突触。
人类的大脑褶皱皮层大约有300亿个神经元,如图2-57所示,每一个神经元都可以通过突触与其他神经元进行连接,不同的连接方式构成了每个人不同的记忆、情感、技能和主观经验。人与人之间的根本差别在于大脑皮层中不同神经元的连接方式,连接越多越强,人的记忆和技能就越好。
图2-57 典型的神经元结构
刚出生的婴儿除了哭和吸奶头,什么都不会,大脑还处于待开发状态,神经元之间的连接较少。如果我们想让婴儿识别什么是苹果、什么是橘子,就要反复不停地去教他、去训练他。当婴儿看到苹果,并被告知这是一个苹果时,大脑皮层中对红色敏感的神经元就会和对“苹果”这个声音敏感的神经元建立配对、连接和关联。通过反复不断地训练,这种连接就会加强;当这种连接加强到一定程度,婴儿再看到苹果时,通过这种突触关联,就会想到“苹果”的发音,然后通过其他连接,就可以控制嘴巴发音了:“苹果”。恭喜,你家的宝宝会认苹果了!这种连接在大脑中会不断加强、稳定,最终和其他神经元连接在一起。大脑在婴儿2~3岁的发育过程中会逐渐网络化,这个年龄也是婴儿学习的黄金期。
神经元就像26个英文字母一样,通过不同的组合和连接就构成了心理图像的物体和行为,就好像字母可以组成一个满是单词的词典一样。什么是心理图像呢,黑暗中你盯着手机屏幕,然后闭上眼,手机屏幕在视网膜上的短暂停留就类似心理图像。能力越强、记忆越好的人对于某一个事物构建的心理图像就越细腻。心理图像可以通过更多的神经突触串联在一起,组成任意数量的关联顺序(特别是做梦时),进而形成世界观、情绪、性格及行为习惯。这就好像单词可以组成各种无限可能的句子、段落和章节一样。人的学习和记忆过程,其实就是大脑皮层的神经元之间不断建立连接和关联的过程。随着连接不断加强,你对某项技能的掌握也就越来越熟练、越来越精通。如图2-58所示,不同的神经元之间、心理图像之间互相关联,构成了一个巨大的神经网络。
图2-58 由神经元构成的神经网络
ANN(Artificial Neural Network,人工神经网络),顾名思义,就是使用计算机程序来模拟大脑的神经网络。ANN的本质是数据结构,对于特定的AI算法、AI模型而言,它的厉害之处在于:它是一个通用的模型,像婴儿的大脑一样,可以学习任何东西,如说话、唱歌、作曲、聊天、下棋、绘画、图形识别。如图2-59所示,典型的ANN由数千个互连的人工神经元组成,它们按顺序堆叠在一起,构成一个层,然后以层的形式形成数百万个连接。ANN与大脑的不同之处在于,在很多情况下,每一层仅通过输入和输出接口,与它们之前和之后的神经元层互连,而大脑的互连是全方位的,神经元之间可以任意连接。
图2-59 ANN
我们教婴儿认识苹果,可以通过各种各样的苹果(大的、小的、各种颜色的)来训练婴儿。同样的道理,我们训练ANN,也是通过向其输入大量的标签数据,帮助它学习如何分析和解读数据、找出规律、输出分析结果。2012年,人工智能科学家吴恩达教授通过对人工智能进行训练,成功地让神经网络识别了猫。在吴教授的实验里,输入数据是一千万张YouTube视频中的图像。吴教授的突破在于:将这些神经网络的层数扩展了很多,而不是简单的4层,神经元也非常多。吴教授把这次实验定义为深度学习(Deep Learning),这里的深度指神经网络变得更加复杂,有了更多的层。经过深度学习训练的神经网络,在图像识别方面甚至比人类做得更好,识别正确率达到99%。
使用ANN的两个重要工作是训练和推理。训练需要巨大的计算量,一般会放到云上服务器进行,训练完毕后,再去结合具体问题做应用——推理。在云上训练神经网络也有弊端:一是贵,二是对网络的依赖性高。例如汽车自动驾驶,当汽车钻入山洞、隧道等无线网络信号不太好的地方,就可能断网、有延迟,这就给汽车自动驾驶带来了安全隐患。现在我们可以把一些训练工作放到汽车本地进行,这就是边缘计算的概念。边缘计算指在靠近物或数据源头的一侧,采用网络、计算、存储、应用为一体的开发平台,就近提供最近端服务。其应用程序在边缘侧发起,可以产生更快的网络服务响应,以满足实时、安全与隐私保护方面的业务需求。
处理器通过集成支持AI运算的NPU,就可以更加方便地支持本地的边缘计算。深度学习的基本操作是神经元和突触的处理,传统的CPU(无论是X86还是ARM)只会基本的算术操作(加、减、乘)和逻辑操作(与、或、非),完成一个神经元的处理往往需要上千条的指令,效率很低。而NPU一条指令就可以完成一组神经元的处理,并对神经元和突触数据在芯片上的传输提供一系列专门的优化和支持,从而在算力性能上比CPU提高成百上千倍。
图2-60 SoC处理器中的NPU
NPU可以单独设计为一款ASIC芯片,也可以以IP的形式集成到ARM的SoC芯片中。目前市场上有很多这方面的公司,如寒武纪、IBM、华为等。ARM公司也发布了自己的微神经网络内核,可以和自己的ARM处理器结合使用。
如图2-60所示,Ethos-U55是ARM公司最新发布的一种小型NPU,可以与Cortex-M系列处理器搭配使用。从官方公开的资料上可以看到,Ethos-U55具有可配置的矩阵乘法单元,支持CNN和RNN,NPU内部的SRAM可以配置的大小范围为18~50KB,而SoC芯片上SRAM可以扩充到MB级别。新的处理器估计要到2021年发布,哪家芯片厂商会先“吃这个瓜”,我们就拭目以待吧。
NPU和CPU协同工作流程如图2-61所示,Cortex-M55通过APB接口的寄存器配置启动Ethos-U55开始工作,Ethos-U55接着就会从NVM Flash存储器上读取神经元指令,并进行处理。处理结束后,Ethos-U55再通过IRQ中断的形式向CPU报告,CPU根据处理结果做出相应的操作即可。
图2-61 NPU与CPU协同工作
2.7.7 后摩尔时代的XPU们
在摩尔定律快要失效的大背景下,各大芯片厂商通过异构计算,集成不同的处理单元来提升处理器的整体性能。XPU们层出不穷,甚至有人预言:在后摩尔时代,每隔18周,集成电路领域就会多一个XPU,直到26个字母被用完。如果你不信,就先看看目前市面上已经出现的XPU家族吧。
● APU:Accelerated Processing Unit,加速处理器,AMD推出的加速图像处理芯片。
● BPU:Brain Processing Unit,地平线公司给自家AI芯片的命名。
● CPU:Central Processing Unit,中央处理器,目前PC上的主流处理器芯片。
● DPU:Deep learning Processing Unit,深鉴科技设计的深度学习处理器。
● EPU:Emotion Processing Unit,情绪处理单元,通过情绪合成引擎让机器人具有情绪。
● FPU:Floating Processing Unit,浮点计算单元,通用处理器中的浮点运算模块。
● GPU:Graphics Processing Unit,图形处理单元,为图像处理而生。
● HPU:Holographics Processing Unit,全息图像处理器,微软出品的全息计算芯片与设备。
● IPU:Intelligence Processing Unit,Graphcore公司设计的AI处理器。
● KPU:Knowledge Processing Unit,杭州嘉楠耘智推出的人工智能边缘计算芯片。
● MPU/MCU:Microprocessor/Micro controller Unit,微处理器/微控制器。
● NPU:Neural Network Processing Unit,神经网络处理器。
● OPU:Optional-Flow Processing Unit,光流处理器。
● TPU:Tensor Processing Unit,张量处理器,Google公司推出的人工智能专用处理器。
● VPU:Video Processing Unit,视频处理单元,主要用于视频硬解码。
● WPU:Wearable Processing Unit,可穿戴处理片上系统芯片。
● XPU:百度与Xilinx公司在2017年Hotchips大会上发布的FPGA智能云加速,含256核。
● ZPU:Zylin Processing Unit,由挪威Zylin公司推出的一款32位开源处理器。
后摩尔时代,伴随着AI和物联网技术的发展,百家争鸣,群雄并起,涌现出越来越多的芯片玩家。不同的玩家根据实际市场需求,将通用处理器与各种创新的处理单元(各种XPU)进行融合,来应对大数据时代不同类型的海量数据处理需求。不同的运算单元各有自己的编程模型、指令集甚至存储空间,在一个芯片内,如何让各个运算单元协同工作,如何高效互连以减少通信延迟和开销,如何发挥出芯片的最大性能,成为NoC最近几年的研究热点。也许未来有一天,随着传统计算机架构向异构计算方向不断迭代和演进,软硬件生态将发生颠覆性变革,是否有统一的编程框架和标准出来,让我们拭目以待吧。
未来很遥远,现实很骨感。我们还是回到当前,继续学习与计算机体系结构相关的知识吧。