在本文中,我们将从三个方面介绍人工智能系统中使用的核心处理器体系结构的最常见选择:标量、向量和空间。对于每种情况,我们都将对其性能特征和优化算法的类型进行一些概括。在后面的文章中,我们将更深入地讨论它们是如何实现的,以及它们在不同类型的AI工作负载上的性能。
Flynn分类法
如果没有相当流行的“Flynn分类法”,任何对处理器架构的阐述都是不完整的,因为命名法很常见。它的初衷是描述一台哈佛架构计算机如何摄取指令和数据流,并且尽可能在这种情况下最有意义。尽管如此,现代处理器通常比其他处理器更接近于一种特性,因此我们经常用这种方式来指代它们,但我们应该注意,假设任何现代处理器都完全符合其中一种类型,那将是一个严重的过度简化。这里介绍的是一种比较开放的稍微现代一些的分类法。
SISD:单指令单数据
最简单的CPU形式适合这一类。CPU的每个循环摄取指令和数据元素并处理它们以便修改全局状态。这个概念是计算机科学的基础,因此大多数编程语言都编译成一组针对这种架构的指令。大多数现代CPU也模拟SISD操作,尽管软件和硬件中可能会用到非常不同的概念。
SIMD:单指令多数据
最简单的SIMD架构是矢量处理器,类似于具有更宽数据类型的SISD架构,因此每条指令在多个连续数据元素上运行。稍微复杂的是线程并行性,其中单个指令在多个线程状态上操作,这是更通用的编程模型。
MISD:多指令单数据
对于什么是错误处理程序没有普遍的共识,所以我在这里将不做限制。考虑一个架构,它能够在单个数据输入上以单个周期的顺序执行多个任意指令。这基本上需要从输出到输入进行多路复用,而不存储中间结果。稍后,我们将看到这种高级体系结构的优点。
MIMD:多指令多数据
我再次不设限地说,一个非常长的指令字(VLIW)处理器最适合这个类别。这种处理器的目的是公开一个更精确地适合处理器可用资源的编程模型。VLIW指令能够同时向所有执行单元发送数据,这通过指令级并行(ILP)具有很大的性能优势,但编译器必须具有体系结构感知能力并执行所有调度优化。一般来说,这被证实具有挑战性。
标量(CPUs):混合性能
现代CPU是一个非常复杂的系统,旨在很好地完成各种任务。它的元素涵盖了Flynn的每一类分类。您当然可以将其编程为SISD机器,它将为您提供输出,就好像程序是按照您给出的顺序计算的一样。但是,每个CISC指令通常被转换为多个RISC指令链,以便在单个数据元素(MISD)上执行。它还将查看您提供的所有指令和数据,并将它们并行排列以便在许多不同的执行单元(MIMD)上执行数据。还有许多操作,例如在AVX指令集中,对许多并行对齐的数据元素(SIMD)执行相同的计算。此外,由于多个内核和多个线程并行运行以在单个内核上同时使用资源,因此可以实现Flynn分类法中的几乎任何类型的并行性。
代码优化器
如果CPU要以简单的SISD模式运行,从存储器中一次一个地抓取每个指令和数据元素,那么不管频率有多高,它都会非常慢。在现代处理器中,只有相对较小部分的管芯区域专用于实际执行算术和逻辑。其余部分专门用于预测程序接下来要做什么,并在不违反任何因果约束的情况下排列指令和数据以有效执行。也许与CPU的性能和其他体系结构相比,关系最密切的是对条件分支的处理。它不是等待解析一个分支,而是预测要朝哪个方向走,然后在出错时完全恢复处理器状态。在硅片上蚀刻了数百个这样的技巧,这些技巧在各种各样的工作负载上进行测试,在执行高度复杂的任意代码时提供极大的优势。
摩尔定律哲学
在我的第一份工作中,我被指派去集成一个非常昂贵的专用集成电路,这被认为是实时解码卫星图像所必需的。我注意到这个设计有几年的历史了,我做了一些计算,结果告诉我,我可以在英特尔处理器上拥有几乎相同的计算能力。在ASIC可用之前,我用C语言编写了该算法,并在奔腾III CPU上演示了该系统。那时候,'Dennard Scaling'的速度如此之快,以至于在一小段时间内,通用处理器的性能提升超过了对专用处理器的需求。选择通用处理器的最大优势可能是它易于编程,这使其成为算法开发和系统集成的首选平台。可以将算法优化为更专业的处理器,但CPU已经非常擅长为您执行此操作。在我的特殊情况下,第一版卫星使用Reed-Solomon码,但以后的设计还是考虑用Turbo码。使用ASIC的下行链路站点必须更换整个系统,我们的站点将使用简单的软件更新和常规CPU升级。因此,您可以花时间优化代码,也可以将时间花在创新应用程序上。摩尔定律的推论是,很快就会足够快。
矢量(GPU和TPU):简单和平行
在许多方面,矢量处理器是最简单的现代体系结构:一个非常有限的计算单元,它在芯片上重复多次,以便在大量数据上执行相同的操作。这些都是第一次普及的图形,因此术语GPU。一般来说,GPU不具备CPU为优化复杂的任意代码所做的预测gymnastics功能,并且具体地具有仅限于支持某些类型的计算的有限指令集。GPU性能的大部分进步都是通过密度,面积,频率和内存带宽的基本技术扩展实现的。
GPGPU
最近有一种趋势是扩展GPU指令集以支持通用计算。这些gp指令必须经过调整才能在simd体系结构上运行,这就暴露了一些优点和缺点,具体取决于算法。许多被编程为在CPU上作为重复循环运行的算法实际上只是在每个循环中对数组的每个相邻数据元素执行相同的操作。通过一些程序员的努力,它们可以很容易地并行化,有时在GPU上大规模地并行化。
值得注意的是。如果任何元素上有任何条件,那么所有分支都必须在所有元素上运行。对于复杂代码,这可能意味着计算时间相对于CPU呈指数增长。GPU具有非常宽的内存总线,可以提供出色的流数据性能,但是如果内存访问与向量处理器元素不一致,那么每个数据元素都需要来自内存总线的单独请求,而CPU具有非常复杂的预测缓存机制,可以大大补偿这一点。
内存本身非常快的同时也非常小,并且依赖于PCIe总线上的数据访问传输。在一般情况下,GPGPU算法的开发比CPU要困难得多。然而,这种挑战在一定程度上是通过发现和优化高效的并行算法来解决的,这些算法通过统一的执行分支和对齐的内存访问获得相同的结果。通常,这些算法在原始操作方面效率较低,但在并行架构中执行速度更快。
AI操作
许多人工智能中流行的算法都是基于线性代数的,而参数矩阵的大规模扩展使得该领域有了很大的进步。GPU的并行性允许最基本的线性代数的大规模加速,因此它适合AI研究人员,只要它们保持在矩阵上密集线性代数的范围内,矩阵足够大以占据大部分处理元素,小到足以容纳GPU的内存。然而,这种加速是如此之快,以至于到今天为止,在这些限制下,在深入学习方面已经取得了很大的进展。
GPU中现代开发的两个主要推动力是Tensor Processing Unit(TPU),它们在一个周期内执行全矩阵运算,而多GPU互连则用于处理更大的网络。我们在专用图形的硬件架构和为AI设计的硬件之间经历了更大的分歧。
今天,我们在专用图形的硬件架构和为AI设计的硬件之间遇到了更大的分歧。最简单的分歧是在精度上,AI正在开发基于低精度浮点和整数运算的技术。稍显迟钝的是图形处理器用来实时呈现令人信服的复杂场景重现的快捷方式,通常使用非常专业的计算单元。因此,架构之间的相似性以两者的最高优化级别结束。
Systolic Arrays
ASIC或FPGA可以为任何类型的计算体系结构设计,但是这里我们关注的是特定类型的体系结构,它与其他选择有些不同,并且与人工智能相关。在诸如CPU或GPU的时钟体系结构中,每个时钟周期从寄存器加载数据元素,将数据移动到处理元件,等待操作完成,然后将结果存储回寄存器以进行下一个操作。在空间数据流中,操作在处理器上物理连接,以便一旦计算结果就执行下一个操作,并且结果不存储在寄存器中。当在处理元素本地的寄存器中包含它们自己的状态的中等复杂单元以这种方式链接在一起时,我们将其称为“Systolic Arrays”。
功耗、延迟和吞吐量
有一些直接的优势很容易实现。在基于寄存器的处理器中,功耗主要是由寄存器之间的数据存储和传输造成的。其中唯一消耗的能量是处理元素,并将数据传输到下一阶段。另一个主要优点是元素之间的延迟,这不再局限于时钟周期。在吞吐量方面也有一些潜在的优势,因为数据可以以最慢处理阶段限制的速率被时钟发送到Systolic Arrays中。数据以相同的速率在另一端输出,其间存在一些延迟,从而建立数据流。与同步时钟 - 执行 - 存储循环相比,这可以是更高能效和/或更快的数量级,这取决于架构的目标。
数据流设计
如果说CPU是最容易编程的,并且GPU提出了更大的挑战,那么FPGA需要非常大的努力和大量的技能,而ASIC则需要更大量的成本和工程投资。尽管如此,特定算法的好处仍然很大。
要想知道这有多大的优势,可以考虑在现代硅工艺中驱动另一个逆变器的“标准化延迟”以单皮秒为单位测量,而时钟周期接近纳秒。类似地,传输能量是电阻和电容的函数,其可以根据互连的长度来计算,并且处理元件之间的距离可以比到在时钟周期之间保持数据的寄存器的距离短几个数量级。FPGA没有太大的优势,因为元件之间存在额外的扇出,切换和传输延迟,但它提供了灵活性,可以通过一个芯片适应多种数据流架构。虽然可以实现任何类型的算法,但是复杂性存在限制,因为条件需要两个分支的布局,这大大增加了面积并降低了利用效率。FPGA和ASICS还可以采用同步和收缩结构的混合来优化布局效率和速度之间的权衡。
数据流系统
用于AI实现的最常见的systolic array 类型是张量核心,它作为TPU或GPU的一部分集成到同步体系结构中。还提出了许多不同类型的卷积核心。已经在FPGA系统中实现了整个深度学习架构(如ResNet-50)的完整数据流实现,从而在延迟和功耗效率方面实现了最先进的性能。可定制性还允许任意位长精度,这会减小布局大小和处理延迟,但必须仔细调整以适应系统的统计性能要求。然而,主要的独特功能是处理的实时性质允许AI与实时系统中的其他信号处理组件集成。
结论
在为特定系统选择AI处理器时,了解每种算法在所用算法的上下文中的相对优势以及系统要求和性能目标非常重要。在后面的章节中,我们将介绍一些注意事项和示例。我们将看到这些处理器体系结构中的每一个在各种系统级考虑因素中都比其他处理器体系结构更具优势。
1.Fowers,J.,K.Ovtcharov,M.Papamichael,T.Massengill,M.Liu,D.Lo,D.Burger等。“用于实时AI的可配置云规模DNN处理器”,2018年ACM/IEEE第45届国际计算机体系结构研讨会(ISCA),2018年。doi:10.1109/isca.2018.00012。
2.Hennessy,J.L.和D.A.Patterson。计算机体系结构:定量方法。Burlington, MA:Morgan Kaufmann,2017。
3.Sze,V.,Y.Chen,T.Yang和J.S.Emer,“深层神经网络的高效处理:指导和调查”,《IEEE 105会议录》,第12期(2017),2295-2329。doi:10.1109/jproc.2017.2761740。
4.Scott Cyphers、Arjun K.Bansal、Anahita Bhiwandiwalla、Jayaram Bobba、Matthew Brookhart、Avijit Chakraborty、Will Constable、Christian Transvey、Leona Cook、Omar Kanawi、Robert Kimball、Jason Knight、Nikolay Korovaiko、Varun Kumar、Yixing Lao、Christopher R.Lishka、Jaikrishnan Menon、Jennifer Myers、Sandep Aswath Narayana、Adam Procter:“Intel nGraph:深度学习的中间表示、编译器和执行器”,2018;arxiv:1801.08058。