随着物联网、大数据、人工智能时代的到来,海量的数据分析、大量复杂的运算对CPU的算力要求越来越高。CPU内部的大部分资源用于缓存和逻辑控制,适合运行具有分支跳转、逻辑复杂、数据结构不规则、递归等特点的串行程序。在集成电路工艺制程将要达到极限,摩尔定律快要失效的背景下,无论是单核CPU,还是多核CPU,处理器性能的提升空间都已经快达到极限了。适用于大数据分析、海量计算的计算机新型架构——异构计算,逐渐成为目前的研究热点。

什么是异构计算

异构计算就是在SoC芯片内部集成不同架构的Core,如DSP、GPU、NPU、TPU等不同架构的处理单元,各个核心协同运算,让整个SoC性能得到充分发挥。在异构计算机系统中,CPU像一个大脑,适合处理分支、跳转等复杂逻辑的程序;GPU头脑简单,但四肢发达,擅长处理图片、视频数据;而在人工智能领域,则是NPU和FPGA的战场。大家在一个SoC系统芯片内发挥各自专长,多兵种协同作战,让处理器的整体性能得到更大地提升。

GPU

GPU(Graphic Process Unit,图形处理单元)主要用来处理图像数据。玩过吃鸡或3D游戏的朋友可能都知道,个人计算机上不配置一块大容量的显卡,这些游戏根本玩不了。显卡是显式接口卡的简称,计算机联网需要网卡,计算机显示则需要显卡。显卡将数字图像信号转换为模拟信号,并输出到屏幕上。早期的计算机比较简单,都是简单的文本显示,显卡都是直接集成到主板上,只充当适配器的角色,即只具备图形信号转换和输出的功能,对于一些简单的图像处理,CPU就能轻松应付,不需要显卡的参与。随着大型3D游戏、制图、视频渲染等软件的流行,计算机对图像数据的计算量成倍增加,CPU已经越来越力不从心,独立显卡开始承担图像处理和视频渲染的工作。 GPU是显卡电路板上的芯片,主要用来进行图像处理、视频渲染。GPU虽然是为图像处理设计的,但如果你认为它只能进行图像处理就大错特错了。GPU在浮点运算、大数据处理、密码破解、人工智能等领域都是一把好手,比CPU更适合做大规模并行的数据运算。
GPU比CPU强悍的地方在于其自身架构:
image.png
CPU有强大的ALU、复杂的控制单元,再配上分支预测、流水线、Cache、多发射,单核的功能可以做得很强大,特别擅长处理各种复杂的逻辑程序,如跳转分支、循环结构等。但CPU的局限是,由于软件本身不可能无限拆分为并行执行,导致CPU的核数也不可能无限增加,而且在一个单核中Cache和控制单元电路就占了很大一部分芯片面积,也不可能集成太多的ALU。后续的处理器虽然扩充了SIMD指令集,通过数据并行来提高处理器的性能,但面对日益复杂的图形处理和海量数据也是越来越力不从心。GPU也是一种SIMD结构,但和CPU不同的是,它没有复杂的控制单元和Cache,却集成了几千个,甚至上万个计算核心。正可谓“双拳难敌四手,恶虎也怕群狼”,GPU天然多线程,特别适合大数据并行处理,在现在的计算机中被广泛使用。在个人计算机上,GPU一般以独立显卡的形式插到主板上,跟CPU一起协同工作;在手机处理器里,GPU一般以IP的形式集成到SoC芯片内部。

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协同工作。

FPGA

FPGA(Field Programmable Gate Array,现场可编程门阵列)专用集成电路(Application Specific IntegratedCircuit,ASIC)领域中是以一种半定制电路的形式出现的。FPGA既解决了定制电路的不足,又克服了原有可编程逻辑器件(Programmable Logic Device,PLD)门电路有限的局限。FPGA芯片内部集成了大量的逻辑门电路和存储器,用户可以通过VHDL、Verilog甚至高级语言编写代码来描述它们之间的连线,将这些连线配置文件写入芯片内部,就可以构成具有特定功能的电路。
FPGA不依赖冯·诺依曼体系结构,也不要编译器编译指令,它直接将硬件描述语言翻译为晶体管门电路的组合,实现特定的算法和功能。FPGA剔除了CPU、GPU等通用处理器的冗余逻辑电路,电路结构更加简单直接,处理速度更快,在数据并行处理方面最具优势。可编程逻辑器件通过配套的集成开发工具,可以随时修改代码,下载到芯片内部,重新连线生成新的功能。正是因为这种特性,FPGA在数字芯片验证、ASIC设计的前期验证、人工智能领域广受欢迎。
FPGA一般和CPU结合使用、协同工作。以高速信号采集和处理为例,CPU负责采集模拟信号,通过A/D转换,将模拟信号转换成数字信号;然后将数字信号送到FPGA进行处理;FPGA依靠自身硬件电路的性能优势,对数字信号进行快速处理;最后将处理结果发送回CPU处理器,以便CPU做进一步的后续处理。
image.png
在嵌入式开发中,为了更方便地控制FPGA工作,可以将ARM核和FPGA集成到一块。一种集成方式是在FPGA芯片内部集成一个ARM核,在上面运行操作系统和应用程序,这种FPGA芯片也被称为FPGA SoC。另一种集成方式是将FPGA以一个IP的形式集成到ARM SoC芯片内,实现异构计算。这种嵌入式SoC芯片上的FPGA,一般也称为eFPGA,可以根据系统的需求配置成不同的模块,使用更加灵活。FPGA与DSP相比,开发更具有灵活性,但成本也随之上升,上手也比较难,因此主要用在一些军事设备、高端电子设备、高速信号采集和图像处理领域。

TPU

TPU(Tensor Processing Unit,张量处理器)是Google公司为提高深层网络的运算能力而专门研发的一款ASIC芯片。为了满足人工智能的算力需求,TPU的设计架构和CPU、GPU相比更加激进:TPU砍去了分支预测、Cache、多线程等逻辑器件,在省下的芯片面积里集成了6万多个矩阵乘法单元(Matrix Multiply Unit)和24MB的片上内存SRAM作为缓存。
image.png

NPU

NPU(Neural Network Processing Unit,神经网络处理器)是面向人工智能领域,基于神经网络算法,进行硬件加速的处理器统称。NPU使用电路来模拟人类的神经元和突触结构,用自己指令集中的专有指令直接处理大规模的神经元和突触。