AI芯
⽚,APUBPUCPUDPUFPUHPUGPUTPUNPUMPUMCUVPU
的区别
APU -- Accelerated Processing Unit, 加速处理器,AMD公司推出加速图像处理芯⽚产品。
BPU -- Brain Processing Unit, 地平线公司主导的嵌⼊式处理器架构。
CPU -- Central Processing Unit 中央处理器, ⽬前PC core的主流产品。
DPU -- Deep learning Processing Unit, 深度学习处理器,最早由国内深鉴科技提出;另说有Dataflow Processing Unit 数据流处理器, Wave Computing 公司提出的AI架构;Data storage Processing Unit,深圳⼤普微的智能固态硬盘处理器。
FPU -- Floating Processing Unit 浮点计算单元,通⽤处理器中的浮点运算模块。
GPU -- Graphics Processing Unit, 图形处理器,采⽤多线程SIMD架构,为图形处理⽽⽣。
HPU -- Holographics Processing Unit 全息图像处理器, 微软出品的全息计算芯⽚与设备。
IPU -- Intelligence Processing Unit, Deep Mind投资的Graphcore公司出品的AI处理器产品。
MPU/MCU -- Microprocessor/Micro controller Unit, 微处理器/微控制器,⼀般⽤于低计算应⽤的RISC计算机体系架构产品,如ARM-M系列处理器。
NPU -- Neural Network Processing Unit,神经⽹络处理器,是基于神经⽹络算法与加速的新型处理器总称,如中科院计算所/寒武纪公司出品的diannao系列。
RPU -- Radio Processing Unit, ⽆线电处理器, Imagination Technologies 公司推出的集合集Wifi/蓝⽛/FM/处理器为单⽚的处理器。
TPU -- Tensor Processing Unit 张量处理器, Google 公司推出的加速⼈⼯智能算法的专⽤处理器。⽬前⼀代TPU⾯向Inference,⼆代⾯向训练。
VPU -- Vector Processing Unit ⽮量处理器,Intel收购的Movidius公司推出的图像处理与⼈⼯智能的专⽤芯⽚的加速计算核⼼。
WPU -- Wearable Processing Unit, 可穿戴处理器,Ineda Systems公司推出的可穿戴⽚上系统产品,包含GPU/MIPS CPU等IP。
XPU -- 百度与Xilinx公司在2017年Hotchips⼤会上发布的FPGA智能云加速,含256核。
ZPU -- Zylin Processing Unit, 由挪威Zylin 公司推出的⼀款32位开源处理器。
CPU
CPU( Central Processing Unit, 中央处理器)就是机器的“⼤脑”,也是布局谋略、发号施令、控制⾏动的“总司令官”。
CPU的结构主要包括运算器(ALU, Arithmetic and Logic Unit)、控制单元(CU, Control Unit)、寄存器(Register)、⾼速缓存器(Cache)和它们之间通讯的数据、控制及状态的总线。
简单来说就是:计算单元、控制单元和存储单元,架构如下图所⽰:
图:CPU微架构⽰意图
什么?架构记不住?来,我们换种表⽰⽅法:
图:CPU微架构⽰意图(改)
嗯,⼤概就是这个意思。
从字⾯上我们也很好理解,计算单元主要执⾏算术运算、移位等操作以及地址运算和转换;存储单元主要⽤于保存运算中产⽣的数据以及指令等;控制单元则对指令译码,并且发出为完成每条指令所要执⾏的各个操作的控制信号。
所以⼀条指令在CPU中执⾏的过程是这样的:读取到指令后,通过指令总线送到控制器(黄⾊区域)中进⾏译码,并发出相应的操作控制信号;然后运算器(绿⾊区域)按照操作指令对数据进⾏计算,并通过数据总线将得到的数据存⼊数据缓存器(⼤块橙⾊区域)。过程如下图所⽰:
图:CPU执⾏指令图
是不是有点⼉复杂?没关系,这张图完全不⽤记住,我们只需要知道,CPU遵循的是冯诺依曼架构,
其核⼼就是:存储程序,顺序执⾏。
讲到这⾥,有没有看出问题,没错——在这个结构图中,负责计算的绿⾊区域占的⾯积似乎太⼩了,⽽橙⾊区域的缓存Cache和黄⾊区域的控制单元占据了⼤量空间。
⾼中化学有句⽼⽣常谈的话叫:结构决定性质,放在这⾥也⾮常适⽤。
因为CPU的架构中需要⼤量的空间去放置存储单元(橙⾊部分)和控制单元(黄⾊部分),相⽐之下计算单元(绿⾊部分)只占据了很⼩的⼀部分,所以它在⼤规模并⾏计算能⼒上极受限制,⽽更擅长于逻辑控制。
另外,因为遵循冯诺依曼架构(存储程序,顺序执⾏),CPU就像是个⼀板⼀眼的管家,⼈们吩咐的事情它总是⼀步⼀步来做。但是随着⼈们对更⼤规模与更快处理速度的需求的增加,这位管家渐渐变得有些⼒不从⼼。
于是,⼤家就想,能不能把多个处理器放在同⼀块芯⽚上,让它们⼀起来做事,这样效率不就提⾼了吗?
没错,GPU便由此诞⽣了。
GPU
在正式讲解GPU之前,我们先来讲讲上⽂中提到的⼀个概念——并⾏计算。
并⾏计算(Parallel Computing)是指同时使⽤多种计算资源解决计算问题的过程,是提⾼计算机系统计算速度和处理能⼒的⼀种有效⼿段。它的基本思想是⽤多个处理器来共同求解同⼀问题,即将被求解的问题分解成若⼲个部分,各部分均由⼀个独⽴的处理机来并⾏计算。
并⾏计算可分为时间上的并⾏和空间上的并⾏。
时间上的并⾏是指流⽔线技术,⽐如说⼯⼚⽣产⾷品的时候分为四步:清洗-消毒-切割-包装。
如果不采⽤流⽔线,⼀个⾷品完成上述四个步骤后,下⼀个⾷品才进⾏处理,耗时且影响效率。但是采⽤流⽔线技术,就可以同时处理四个⾷品。这就是并⾏算法中的时间并⾏,在同⼀时间启动两个或两个以上的操作,⼤⼤提⾼计算性能。
图:流⽔线⽰意图
空间上的并⾏是指多个处理机并发的执⾏计算,即通过⽹络将两个以上的处理机连接起来,达到同时计算同⼀个任务的不同部分,或者单个处理机⽆法解决的⼤型问题。
⽐如⼩李准备在植树节种三棵树,如果⼩李1个⼈需要6个⼩时才能完成任务,植树节当天他叫来了好朋友⼩红、⼩王,三个⼈同时开始挖坑植树,2个⼩时后每个⼈都完成了⼀颗植树任务,这就是并⾏算法中的空间并⾏,将⼀个⼤任务分割成多个相同的⼦任务,来加快问题解决速度。
所以说,如果让CPU来执⾏这个种树任务的话,它就会⼀棵⼀棵的种,花上6个⼩时的时间,但是让GPU来种树,就相当于好⼏个⼈同时在种。
GPU全称为Graphics Processing Unit,中⽂为图形处理器,就如它的名字⼀样,GPU最初是⽤在个⼈电脑、⼯作站、游戏机和⼀些移动设备(如平板电脑、智能⼿机等)上运⾏绘图运算⼯作的微处理器。
为什么GPU特别擅长处理图像数据呢?这是因为图像上的每⼀个像素点都有被处理的需要,⽽且每个像素点处理的过程和⽅式都⼗分相似,也就成了GPU的天然温床。
GPU简单架构如下图所⽰:
图:GPU微架构⽰意图
从架构图我们就能很明显的看出,GPU的构成相对简单,有数量众多的计算单元和超长的流⽔线,特别适合处理⼤量的类型统⼀的数据。
但GPU⽆法单独⼯作,必须由CPU进⾏控制调⽤才能⼯作。CPU可单独作⽤,处理复杂的逻辑运算和不同的数据类型,但当需要⼤量的处理类型统⼀的数据时,则可调⽤GPU进⾏并⾏计算。
注:GPU中有很多的运算器ALU和很少的缓存cache,缓存的⽬的不是保存后⾯需要访问的数据的,这点和CPU不同,⽽是为线程thread 提⾼服务的。如果有很多线程需要访问同⼀个相同的数据,缓存会合并这些访问,然后再去访问dram。
再把CPU和GPU两者放在⼀张图上看下对⽐,就⾮常⼀⽬了然了。
GPU的⼯作⼤部分都计算量⼤,但没什么技术含量,⽽且要重复很多很多次。
借⽤知乎上某⼤神的说法,就像你有个⼯作需要计算⼏亿次⼀百以内加减乘除⼀样,最好的办法就是雇上⼏⼗个⼩学⽣⼀起算,⼀⼈算⼀部分,反正这些计算也没什么技术含量,纯粹体⼒活⽽已;⽽CP
U就像⽼教授,积分微分都会算,就是⼯资⾼,⼀个⽼教授资顶⼆⼗个⼩学⽣,你要是富⼠康你雇哪个?
GPU就是⽤很多简单的计算单元去完成⼤量的计算任务,纯粹的⼈海战术。这种策略基于⼀个前提,就是⼩学⽣A和⼩学⽣B的⼯作没有什么依赖性,是互相独⽴的。
但有⼀点需要强调,虽然GPU是为了图像处理⽽⽣的,但是我们通过前⾯的介绍可以发现,它在结构上并没有专门为图像服务的部件,只是对CPU的结构进⾏了优化与调整,所以现在GPU不仅可以在图像处理领域⼤显⾝⼿,它还被⽤来科学计算、密码破解、数值分析,海量数据处理(排序,Map-Reduce等),⾦融分析等需要⼤规模并⾏计算的领域。
所以GPU也可以认为是⼀种较通⽤的芯⽚。
TPU
按照上⽂所述,CPU和GPU都是较为通⽤的芯⽚,但是有句⽼话说得好:万能⼯具的效率永远⽐不上专⽤⼯具。
随着⼈们的计算需求越来越专业化,⼈们希望有芯⽚可以更加符合⾃⼰的专业需求,这时,便产⽣了ASIC(专⽤集成电路)的概念。
ASIC是指依产品需求不同⽽定制化的特殊规格集成电路,由特定使⽤者要求和特定电⼦系统的需要⽽设计、制造。当然这概念不⽤记,简单来说就是定制化芯⽚。
因为ASIC很“专⼀”,只做⼀件事,所以它就会⽐CPU、GPU等能做很多件事的芯⽚在某件事上做的更好,实现更⾼的处理速度和更低的能耗。但相应的,ASIC的⽣产成本也⾮常⾼。
⽽TPU(Tensor Processing Unit, 张量处理器)就是⾕歌专门为加速深层神经⽹络运算能⼒⽽研发的⼀款芯⽚,其实也是⼀款ASIC。
图:⾕歌第⼆代TPU
x86架构和arm架构区别
⼀般公司是很难承担为深度学习开发专门ASIC芯⽚的成本和风险的,但⾕歌是谁,⼈家会差钱吗?
咳咳,开玩笑。更重要的原因是⾕歌提供的很多服务,包括⾕歌图像搜索、⾕歌照⽚、⾕歌云视觉API、⾕歌翻译等产品和服务都需要⽤到深度神经⽹络。基于⾕歌⾃⾝庞⼤的体量,开发⼀种专门的芯⽚开始具备规模化应⽤(⼤量分摊研发成本)的可能。