2018
年,John L. Hennessy 和 David A. Patterson 发表了题为“计算机架构的新黄金时代”的图灵讲座。他们关注的是
CPU 及其发展方式,但这只是整个方程式的一小部分。Arteris IP研究员兼系统架构师 Michael Frank 表示:“从 CPU
的角度来看,这些xPU中的大多数都不是真正的处理器。” “它们更像是一个
GPU,一个用于特殊工作负载的加速器,而且它们内部有相当多的多样性。机器学习是一类处理器,您可以将它们统称为机器学习加速器,但它们加速的处理部分却多种多样。”
处理器的本质可以归结为三件事。“归根结底,它确实回到了指令集架构
(ISA),”赛灵思芯片营销总监 Manuel Uhm 说。“这定义了你想要做什么。然后你有 I/O 和内存,它们支持 ISA
和它试图完成的任务。未来这将是一个非常有趣的时刻,因为我们将看到比过去两三年多的时间更多的创新和变化。”
许多新架构都不是单处理器。“我们看到的是不同类型的处理器或可编程引擎的组合,它们存在于同一个
SoC 或同一个系统中,” Cadence技术和战略营销集团总监 Pierre-Xavier Thomas
说。“将软件任务分派到不同的硬件或灵活的可编程引擎。所有处理器可能共享一个公共
API,但执行域将有所不同。在这里,您确实会看到具有不同类型特征的不同类型的处理。”
现实情况是,大部分命名都是营销。
“关键是人们将这些名称和首字母缩略词用于两个不同的目的,”
Imperas Software 的首席执行官 Simon Davidmann 说。“一个用于解释处理器的架构,例如
SIMD(单指令多数据)。另一个定义了它正在寻址的应用程序段。所以它可以定义处理器架构,或者像张量处理单元(TPU)这样的品牌名称。他们正在为他们的异构或同构架构命名,而不是单个处理器。”
一点历史
40
年前,事情要简单得多。当时有中央处理器(CPU),
也有很多它的变体,但它们基本上都是冯诺依曼架构,图灵完备的处理器。每个都有不同的指令集,使它们在某些任务上更高效,并且有很多关于复杂指令集
(CISC) 与精简指令集 (RISC) 的相对优点的讨论。
RISC-V的出现给ISA带来了很多关注。“人们想要了解
ISA,因为正是 ISA 定义了处理器针对已定义任务的优化程度,”赛灵思的 Uhm 说。“他们可以查看 ISA 并开始计算周期。如果一个
ISA 具有本机指令并以 1 GHz 运行,我可以将其与另一个处理器 ISA 进行比较,后者相同的功能可能需要两条指令,但处理器以 1.5
GHz 运行。哪一个让我走得更远?他们为重要的功能进行数学计算。”
CPU 有多种封装方式,有时将 IO 或内存放在同一个封装中,它们被称为微控制器单元 (MCU)。
当调制解调器变得流行时,数字信号处理器(DSP) 出现了,它们的不同之处在于它们使用了哈佛架构。这将指令总线与数据总线分开。其中一些还实施了 SIMD 架构,使数据处理更加高效。
指令和数据的分离是为了提高吞吐率,尽管它限制了一些可以完成的边缘编程,例如自写程序。“通常,边界条件不是计算,”Uhm 说。“它越来越多地是 I/O 或内存。该行业从提升计算能力转向确保有足够的数据来保持计算能力并保持性能。”
当单个处理器不再变得更快时,他们把多个处理器连接在一起,这些处理器通常共享内存并保持每个处理器和整个处理器集群保持图灵完备的概念。程序的任何部分在哪个核心上执行都无关紧要,因为结果是一样的。
下一个重****展是图形处理单元(GPU),它的出现打破了常规,因为每个处理元素或pipeline都有自己的内存,无法在处理器外部寻址。因为内存是有限的,这意味着它不能执行任何任意的处理任务,只能执行那些可以放入提供的内存空间的任务。
“对于某些类型的功能,GPU 是非常强大的处理器,但它们的pipeline非常长,”Uhm 指出。“这些pipeline让 GPU 单元不断处理数据,但在某些时候,如果您必须刷新pipeline,那将是一个巨大的打击。系统中内置了大量的延迟和不确定性。”
虽然已经定义了许多其他加速器,但
GPU——以及后来的通用 GPU
(GPGPU)——定义了一种编程范式和软件堆栈,使它们比过去的加速器更容易上手。“多年来,某些工作是专门化的,”Imperas
的Davidmann说。“有用于顺序程序的
CPU。有图形处理器,它专注于为屏幕处理数据,并将我们带入了一个高度并行的世界。使用许多小的处理元素来执行任务。现在有机器学习任务。”
还有什么其他的构造规则可以解释所有的新架构?过去,处理器阵列通常通过内存或固定网络拓扑(例如网状或环形)连接。最近出现的是片上网络 (NoC) 的结合,使分布式异构处理器能够以更灵活的方式进行通信。将来,它们还可以在不使用内存的情况下实现通信。
“此时,NoC
只携带数据,”Arteris 的 Frank 说。“未来,NoC
可以扩展到加速器之间的通信超越数据的其他领域。它可以发送命令、发送通知等。加速器阵列的通信需求可能与 CPU 或标准 SoC
等的通信需求不同。但是片上网络并不会将您限制在一个子集上。您可以通过支持加速器的特殊通信需求来优化和提高性能。”
实现架构
处理器区分的一种方式是针对特定操作环境进行优化。例如,软件可能在云中运行,但您也可以在微型物联网设备上执行相同的软件。实现架构将大不相同,并在性能、功耗、成本或在极端条件下运行的能力方面实现不同的运行点。
“一些应用程序是针对云计算的,现在我们正在让它们更接近边缘,”Cadence
的 Thomas
说。“这可能是因为延迟要求,或者能量或功率耗散,这将需要不同类型的架构。您可能希望拥有完全相同的软件堆栈,以便能够在两个位置运行。云需要提供灵活性,因为它将接收不同类型的应用程序,并且必须能够聚合大量用户。这要求服务器上的硬件具有特定于应用程序的能力,但一种尺寸并不适合所有人。”
ML增加了自己的要求。“在使用神经网络和机器学习构建智能系统时,您需要使用软件框架和通用软件堆栈对新网络进行编程并将其映射到硬件,”Thomas
补充道。“然后,您可以从PPA 的角度使软件应用程序适应正确的硬件。这推动了对不同类型的处理和处理器的需求,以便能够在硬件层满足这些需求。”
这些需求由应用定义。“一家公司已经创建了一个用于图形操作的处理器,”
Frank说。“他们优化和加速如何跟踪图形,并执行诸如重新排序图形之类的操作。还有其他一些主要加速机器学习的蛮力部分(brute force
),即矩阵乘法。内存访问对于每个架构来说都是一个特殊的问题,因为当你构建加速器时,最重要的目标是让它保持忙碌。你必须将尽可能多的数据传送到
ALU,因为它可以消费和生产。”
许多这些应用有许多共同点。“它们都有一些本地内存,它们有一个片上网络来进行通信,每个执行软件算法的处理器都在处理一小块数据,”Davidmann说。“这些工作由运行在更传统 CPU 上的操作系统调度。”
硬件设计人员的棘手之处在于预测它将被要求执行哪些任务。“尽管您将在某些层中进行类似类型的操作,但人们正在关注层中的差异化,”Thomas
说。“为了能够处理神经网络,需要几种类型的处理能力。这意味着您需要能够对神经网络的一部分进行某种方式的处理,然后可能需要另一种类型的操作来处理另一层。数据移动和数据量也在逐层变化。”
这种差异化可以超越数据移动。“对于基因组测序,您需要进行某些处理,”Frank说。“但是你不能用单一类型的加速器来加速所有东西。您必须为不同的pipeline构建一整套不同的加速器。CPU
成为管理执行流程的守护者。它进行设置,执行
DMA,提供两者之间的决策过程。理解和分析算法并定义您希望如何优化它们的处理是一项完整的架构任务。”
该过程的一部分需要分区。“没有一种处理器类型可以针对每个处理器任务进行优化——
FPGA不行,CPU不行,GPU不行,DSP也必行,”Uhm
说。“我们创建了一系列包含所有这些的设备,但客户方面的困难部分是他们必须提供智能,以确定整个系统的哪些部分将针对处理器或可编程逻辑,或在 AI
引擎。每个人都想要那个自动神奇的工具,一个可以立即决定把它放在 CPU 上,把它放在 FPGA 上,把它放在 GPU
上的工具。那个工具今天不存在。”
尽管如此,CPU 总会发挥作用。“需要 CPU 来执行程序的不规则部分,”Frank说。“CPU 的通用可编程性有其优势。如果您有专门的数据结构或数学运算,它就不能很好地工作。CPU 是一个通用处理器,它没有针对任何东西进行优化。它什么都不擅长。”
改变“抽象”
过去,硬件/软件边界由 ISA 定义,并且该内存是连续可寻址的。当存在多个处理器时,它们通常是内存一致的。
“一致性是一种契约,”Frank说。“这种一致性非常重要,不会消失。但是您可以想象,在数据流引擎中,一致性并不那么重要,因为您将在边缘移动的数据直接从一个加速器传送到另一个加速器。如果您对数据集进行分区,则一致性会成为障碍,因为它会花费您额外的周期。你必须查资料。您必须提供更新信息。”
这需要不同的内存架构。“你必须考虑内存结构,因为你只有这么多紧密耦合的内存,”Uhm
说。“你可以访问相邻的内存,但你很快就会耗尽相邻的内存,无法及时访问。这必须在设计中加以理解。随着工具的成熟,工具将开始了解更多内容。今天,它是由人类智能完成的,能够理解架构并应用它。”
还需要更高级别的抽象(
abstraction)。“有些框架可以将已知网络映射或编译到目标硬件上,”Thomas 说。“您有一组低级内核或
API,它们将在软件堆栈中使用,然后最终由神经网络的映射器使用。在下面,您可能拥有不同类型的硬件,具体取决于您想要实现的目标,取决于您的产品详细信息。它实现了相同的功能,但不是使用相同的硬件,也不是相同的
PPA 权衡。”
这给那些编译器带来了很大的压力。“主要的问题是你未来如何对加速器进行编程?”
Frank问道。“您是否实现了像第一代 GPU
那样串在一起的硬连线引擎?或者您是否构建了具有自己指令集的小型可编程引擎?现在你必须单独对这些东西进行编程,并将这些引擎中的每一个与数据流连接起来,执行任务。一个处理器拥有整个指令集的某个子集,另一个处理器拥有一个不同的子集,它们都将共享控制流的一些重叠部分。您可能有一些加速能力略有不同的产品。编译器或了解它的库会相应地进行映射。”
总结
处理器的架构没有改变。他们仍然遵守过去
40
年来一直存在的相同选择。正在改变的是芯片的构造方式。它们现在包含大量异构处理器,这些处理器具有针对应用任务子集优化的内存和通信。每个芯片都对处理器功能及其优化目的、所需的数据吞吐量以及通常会看到的数据流做出了不同的选择。
每个硬件供应商都希望将自己的芯片与其他芯片区分开来,但是通过品牌推广比谈论内部技术细节要容易得多。所以他们给它起了个名字,称它为第一个、最快的、最大的,并将它与特定类型的应用程序问题联系起来。这三个字母的首字母缩写词已成为应用任务名称,但它们并未定义硬件架构。