CPU/GPU/TPU/NPU...XPU,你有没有被各种PU搞晕了头?

“有没有听说过HUAWEI Mate 10,有个很厉害的宣传点,NPU?”
“人工智能处理器吧?”
“什么是人工智能处理器?和CPU/GPU有啥区别?不都带个PU吗?”
“呃……”
 
现在这年代,技术日新月异,各种概念遍地开花,各类芯片名词GPU, TPU, NPU,DPU,层出不穷......它们都是什么鬼?与CPU又是什么关系?
 
所以,今天我们就来通俗易懂的科普一下这些所谓的“XPU”!
 
CPU
 
CPU( Central Processing Unit, 中央处理器)就是机器的“大脑”,也是布局谋略、发号施令、控制行动的“总司令官”。
 
CPU的结构主要包括运算器(ALU, Arithmetic and Logic Unit)、控制单元(CU, Control Unit)、寄存器(Register)、高速缓存器(Cache)和它们之间通讯的数据、控制及状态的总线。
 
简单来说就是:计算单元、控制单元和存储单元,架构如下图所示:
 
什么?架构记不住?来,我们换种表示方法:
 
嗯,大概就是这个意思。
 
从字面上我们也很好理解,计算单元主要执行算术运算、移位等操作以及地址运算和转换;存储单元主要用于保存运算中产生的数据以及指令等;控制单元则对指令译码,并且发出为完成每条指令所要执行的各个操作的控制信号。
 
所以一条指令在CPU中执行的过程是这样的:读取到指令后,通过指令总线送到控制器(黄色区域)中进行译码,并发出相应的操作控制信号;然后运算器(绿色区域)按照操作指令对数据进行计算,并通过数据总线将得到的数据存入数据缓存器(大块橙色区域)。过程如下图所示:
 
因为CPU的架构中需要大量的空间去放置存储单元(橙色部分)和控制单元(黄色部分),相比之下计算单元(绿色部分)只占据了很小的一部分,所以它在大规模并行计算能力上极受限制,而更擅长于逻辑控制。
 
另外,因为遵循冯诺依曼架构(存储程序,顺序执行),CPU就像是个一板一眼的管家,人们吩咐的事情它总是一步一步来做。但是随着人们对更大规模与更快处理速度的需求的增加,这位管家渐渐变得有些力不从心。
 
于是,大家就想,能不能把多个处理器放在同一块芯片上,让它们一起来做事,这样效率不就提高了吗?
 
没错,GPU便由此诞生了。
 
GPU
 
GPU全称为Graphics Processing Unit,中文为图形处理器,就如它的名字一样,GPU最初是用在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上运行绘图运算工作的微处理器。
 
为什么GPU特别擅长处理图像数据呢?这是因为图像上的每一个像素点都有被处理的需要,而且每个像素点处理的过程和方式都十分相似,也就成了GPU的天然温床。
 
GPU简单架构如下图所示:
 
从架构图我们就能很明显的看出,GPU的构成相对简单,有数量众多的计算单元和超长的流水线,特别适合处理大量的类型统一的数据。
 
但GPU无法单独工作,必须由CPU进行控制调用才能工作。CPU可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用GPU进行并行计算。
 
再把CPU和GPU两者放在一张图上看下对比,就非常一目了然了。
 
GPU的工作大部分都计算量大,但没什么技术含量,而且要重复很多很多次。
 
借用知乎上某大神的说法,就像你有个工作需要计算几亿次一百以内加减乘除一样,最好的办法就是雇上几十个小学生一起算,一人算一部分,反正这些计算也没什么技术含量,纯粹体力活而已;而CPU就像老教授,积分微分都会算,就是工资高,一个老教授资顶二十个小学生,你要是富士康你雇哪个?
 
但有一点需要强调,虽然GPU是为了图像处理而生的,但是通过前面的介绍可以发现,它在结构上并没有专门为图像服务的部件,只是对CPU的结构进行了优化与调整,所以现在GPU不仅可以在图像处理领域大显身手,它还被用来科学计算、密码破解、数值分析,海量数据处理(排序,Map-Reduce等),金融分析等需要大规模并行计算的领域。
 
所以GPU也可以认为是一种较通用的芯片。
 
TPU
 
随着人们的计算需求越来越专业化,人们希望有芯片可以更加符合自己的专业需求,这时,便产生了ASIC(专用集成电路)的概念。
 
ASIC是指依产品需求不同而定制化的特殊规格集成电路,由特定使用者要求和特定电子系统的需要而设计、制造。当然这概念不用记,简单来说就是定制化芯片。
 
因为ASIC很“专一”,只做一件事,所以它就会比CPU、GPU等能做很多件事的芯片在某件事上做的更好,实现更高的处理速度和更低的能耗。但相应的,ASIC的生产成本也非常高。
 
而TPU(Tensor Processing Unit, 张量处理器)是一款为机器学习而定制的芯片,经过了专门深度机器学习方面的训练,它有更高效能(每瓦计算能力)。
 
TPU每瓦能为机器学习提供比所有商用GPU和FPGA更高的量级指令,这基本相当于7年后的科技水平。TPU是为机器学习应用特别开发,以使芯片在计算精度降低的情况下更耐用,这意味每一个操作只需要更少的晶体管,用更多精密且大功率的机器学习模型,并快速应用这些模型,因此用户便能得到更正确的结果。
 
TPU已秘密使用在谷歌诸多商业项目中超过一年,并参加了与李世石的世纪人机围棋大战。
 
NPU
 
看到这里,相信大家对这些所谓的“XPU”的套路已经有了一定了解。
 
所谓NPU(Neural network Processing Unit), 即神经网络处理器。顾名思义,用电路模拟人类的神经元和突触结构啊!特别擅长处理视频、图像类的海量多媒体数据。
 
那怎么模仿?那就得先来看看人类的神经结构——生物的神经网络由若干人工神经元结点互联而成,神经元之间通过突触两两连接,突触记录了神经元之间的联系。
 
NPU的典型代表有国内的寒武纪芯片和IBM的TrueNorth。以中国的寒武纪为例,DianNaoYu指令直接面对大规模神经元和突触的处理,一条指令即可完成一组神经元的处理,并对神经元和突触数据在芯片上的传输提供了一系列专门的支持。
 
用数字来说话,CPU、GPU与NPU相比,会有百倍以上的性能或能耗比差距——以寒武纪团队过去和Inria联合发表的DianNao论文为例——DianNao为单核处理器,主频为0.98GHz,峰值性能达每秒4520亿次神经网络基本运算,65nm工艺下功耗为0.485W,面积3.02平方毫米mm。
 
在以上这些知识的基础上,我们再来理解BPU和DPU就更容易了。
 
BPU(Brain Processing Unit,大脑处理器)是由地平线科技提出的嵌入式人工智能处理器架构。第一代是高斯架构,第二代是伯努利架构,第三代是贝叶斯架构。目前地平线已经设计出了第一代高斯架构,并与英特尔在2017年CES展会上联合推出了ADAS系统(高级驾驶辅助系统)。
 
DPU(Deep learning Processing Unit, 即深度学习处理器)最早由国内深鉴科技提出,基于Xilinx可重构特性的FPGA芯片,设计专用的深度学习处理单元(可基于已有的逻辑单元,设计并行高效的乘法器及逻辑电路,属于IP范畴),且抽象出定制化的指令集和编译器(而非使用OpenCL),从而实现快速的开发与产品迭代。事实上,深鉴提出的DPU属于半定制化的FPGA。