转载:深度人工智能学院
人工智能的发展离不开算力的支持,算力又是依附于各种硬件设备的,没有了算力设备的加持,就好比炼丹少了丹炉一样,可想而知,人工智能也就无用武之地了。以深度学习为主的人工智能方向的发展更是离不开强大的算力支持。随着深度学习的不断发展,各种各样的芯片也逐渐抛头露面,见过的,没见过的,听过的没有听过的都出现在眼前,一下有些眼花缭乱,一时竟不知选择哪个?当然前提是不差钱。 本学徒在打杂的时候就发现了众多的XPU,例如GPU, TPU, DPU, NPU, BPU……,各种不同的XPU还分不同等级的系列,价格也大不相同,要起钱来一个比一个凶猛。突然觉得这玩意根本就不是我们这些穷人玩的,虽然当时看的头晕目眩,内心波涛汹涌,但是仍然还要表现的波澜不惊才行,毕竟做为一名资深的炼丹学徒,还是要有最基本的心里素质的。
东西贵是贵,但是挡不住看起来真香啊。那么接下了,本学徒就给大家介绍一些常见的、以及不常见的XPU吧。
首先介绍一下这些常见的XPU的英文全称:
CPU全称:Central Processing Unit, 中央处理器;GPU全称:Graphics Processing Unit, 图像处理器;TPU全称:Tensor Processing Unit, 张量处理器;DPU全称:Deep learning Processing Unit, 深度学习处理器;NPU全称:Neural network Processing Unit, 神经网络处理器;BPU全称:Brain Processing Unit, 大脑处理器。
下面就来科普一下这些所谓的“XPU”
CPUCPU( Central Processing Unit, 中央处理器)一般是指的设备的“大脑”,是整体布局、发布执行命令、控制行动的总指挥。
CPU主要包括运算器(ALU, Arithmetic and Logic Unit)和控制单元(CU, Control Unit),除此之外还包括若干寄存器、高速缓存器和它们之间通讯的数据、控制及状态的总线。CPU遵循的是冯诺依曼架构,即存储程序、顺序执行。一条指令在CPU中执行的过程是:读取到指令后,通过指令总线送到控制器中进行译码,并发出相应的操作控制信号。然后运算器按照操作指令对数据进行计算,并通过数据总线将得到的数据存入数据缓存器。因此,CPU需要大量的空间去放置存储单元和控制逻辑,相比之下计算能力只占据了很小的一部分,在大规模并行计算能力上极受限制,而更擅长于逻辑控制。 简单一点来说CPU主要就是三部分:计算单元、控制单元和存储单元,其架构如下图所示:
图:CPU微架构示意图
什么?这个架构太复杂,记不住?来,那么我们换一种表示方法:
图:CPU微架构示意图
嗯,大概就是这个意思。
从字面上我们也很容易理解,上面的计算单元主要执行计算机的算术运算、移位等操作以及地址运算和转换;而存储单元主要用于保存计算机在运算中产生的数据以及指令等;控制单元则对计算机发出的指令进行译码,并且还要发出为完成每条指令所要执行的各个操作的控制信号。
所以在CPU中执行一条指令的过程基本是这样的:指令被读取到后,通过控制器(黄色区域)进行译码被送到总线的指令,并会发出相应的操作控制信号;然后通过运算器(绿色区域)按照操作指令对输入的数据进行计算,并通过数据总线将得到的数据存入数据缓存器(大块橙色区域)。过程如下图所示:
图:CPU执行指令图
这个过程看起来是不是有点儿复杂?没关系,这张图可以不用记住,我们只需要知道,CPU遵循的是冯诺依曼架构,其核心就是:存储计算程序,按照顺序执行。讲到这里,有没有看出问题,没错——在上面的这个结构图中,负责计算的绿色区域占的面积似乎太小了,而橙色区域的缓存Cache和黄色区域的控制单元占据了大量空间。高中化学有句老生常谈的话叫:结构决定性质,放在这里也非常适用。
因为CPU的架构中需要大量的空间去放置存储单元(橙色部分)和控制单元(黄色部分),相比之下计算单元(绿色部分)只占据了很小的一部分,所以它在大规模并行计算能力上极受限制,而更擅长于逻辑控制。
另外,因为遵循冯诺依曼架构(存储程序,顺序执行),CPU就像是个一板一眼的管家,人们吩咐它的事情它总是一步一步来做,当做完一件事情才会去做另一件事情,从不会同时做几件事情。但是随着社会的发展,大数据和人工智能时代的来临,人们对更大规模与更快处理速度的需求急速增加,这位管家渐渐变得有些力不从心。
于是,大家就想,我们能不能把多个处理器都放在同一块芯片上,让它们一起来做事,相当于有了多位管家,这样效率不就提高了吗?
没错,就是这样的,我们使用的GPU便由此而诞生了。
GPU我们在正式了解GPU之前,还是先来了解一下上文中提到的一个概念——并行计算。并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和数据处理能力的一种有效手段。它的基本思想是用多个处理器来共同求解同一个问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算完成。