计算机工业从
1960 年代早期开始使用 CPU 这个术语。迄今为止, CPU
从形态、设计到实现都已发生了巨大的变化,但是其基本工作原理却一直没有大的改变。 通常 CPU 由控制器和运算器这两个主要部件组成。 传统的
CPU 内部结构图如图 3 所示, 从图中我们可以看到:实质上仅单独的 ALU
模块(逻辑运算单元)是用来完成数据计算的,其他各个模块的存在都是为了保证指令能够一条接一条的有序执行。这种通用性结构对于传统的编程计算模式非常适合,同时可以通过提升
CPU 主频(提升单位时间内执行指令的条数)来提升计算速度。 但对于深度学习中的并不需要太多的程序指令、 却需要海量数据运算的计算需求,
这种结构就显得有些力不从心。尤其是在功耗限制下, 无法通过无限制的提升 CPU 和内存的工作频率来加快指令执行速度, 这种情况导致 CPU
系统的发展遇到不可逾越的瓶颈。▲传统 CPU 内部结构图(仅 ALU 为主要计算模块)
2、并行加速计算的 GPU
GPU 作为最早从事并行加速计算的处理器,相比 CPU 速度快, 同时比其他加速器芯片编程灵活简单。传统的
CPU 之所以不适合人工智能算法的执行,主要原因在于其计算指令遵循串行执行的方式,没能发挥出芯片的全部潜力。与之不同的是, GPU
具有高并行结构,在处理图形数据和复杂算法方面拥有比 CPU 更高的效率。对比 GPU 和 CPU 在结构上的差异,
CPU大部分面积为控制器和寄存器,而 GPU 拥有更ALU(ARITHMETIC LOGIC
UNIT,逻辑运算单元)用于数据处理,这样的结构适合对密集型数据进行并行处理, CPU 与 GPU 的结构对比如图 所示。程序在
GPU系统上的运行速度相较于单核 CPU往往提升几十倍乃至上千倍。随着英伟达、 AMD 等公司不断推进其对 GPU
大规模并行架构的支持,面向通用计算的 GPU(即GPGPU, GENERAL PURPOSE
GPU,通用计算图形处理器)已成为加速可并行应用程序的重要手段。▲CPU 及 GPU 结构对比图(引用自 NVIDIA CUDA 文档)GPU 的发展历程可分为 3 个阶段, 发展历程如图所示:第 一 代 GPU(1999 年 以 前 ) , 部 分 功 能 从 CPU 分 离 , 实 现 硬 件 加 速 , 以GE(GEOMETRY ENGINE)为代表,只能起到 3D 图像处理的加速作用,不具有软件编程特性。第二代
GPU(1999-2005 年), 实现进一步的硬件加速和有限的编程性。 1999 年,英伟达发布了“专为执行复杂的数学和几何计算的”
GeForce256 图像处理芯片,将更多的晶体管用作执行单元, 而不是像 CPU 那样用作复杂的控制单元和缓存,将
T&L(TRANSFORM AND LIGHTING)等功能从 CPU 分离出来,实现了快速变换,这成为 GPU
真正出现的标志。之后几年, GPU 技术快速发展,运算速度迅速超过 CPU。 2001 年英伟达和 ATI 分别推出的GEFORCE3 和
RADEON 8500,图形硬件的流水线被定义为流处理器,出现了顶点级可编程性,同时像素级也具有有限的编程性,但 GPU
的整体编程性仍然比较有限。第三代
GPU(2006年以后), GPU实现方便的编程环境创建, 可以直接编写程序。 2006年英伟达与 ATI分别推出了 CUDA(Compute
United Device Architecture,计算统一设备架构)编程环境和 CTM(CLOSE TO THE METAL)编程环境,
使得 GPU 打破图形语言的局限成为真正的并行数据处理超级加速器。2008 年,苹果公司提出一个通用的并行计算编程平台 OPENCL(OPEN COMPUTING LANGUAGE,开放运算语言),与 CUDA 绑定在英伟达的显卡上不同,OPENCL 和具体的计算设备无关。▲GPU 芯片的发展阶段目前,
GPU 已经发展到较为成熟的阶段。谷歌、 FACEBOOK、微软、 TWITTER 和百度等公司都在使用 GPU
分析图片、视频和音频文件,以改进搜索和图像标签等应用功能。此外,很多汽车生产商也在使用 GPU 芯片发展无人驾驶。 不仅如此, GPU
也被应用于VR/AR 相关的产业。但是 GPU也有一定的局限性。 深度学习算法分为训练和推断两部分, GPU 平台在算法训练上非常高效。但在推断中对于单项输入进行处理的时候,并行计算的优势不能完全发挥出来。