增量变化是人类成功的秘诀,在某些方面也是最困难的。我们需要推动事情向前发展,但与此同时,我们不能打破先前行之有效的做法。这就是我们如何从各种各样的系统中得到越来越多华丽的架构,从 CPU 插槽内部到超大规模数据中心,再到融入地球的政治、经济和文化网络。
英特尔Pentium 和 Xeon 服务器处理器中包含的 X86 架构非常复杂,并且不断进行调整,以适应越来越多的应用程序的处理需求,而这些应用程序本身的复杂性也在不断增加。如今,没有多少企业是容易的,但要找到一家比设计 CPU 并让 CPU 制造工艺不断发展的企业,或是找到一家比一代代地实现这一工程壮举的企业更有经济回报的企业,则更加困难。
随着两周前推出的“Cascade Lake”Xeon SP 处理器,英特尔再次将其架构向前推进了很多,因为它目前使用的是 14nm 晶圆蚀刻技术。但是英特尔在处理器上的改变和它的“Apache Pass”Optane 内存模块的交付,以及将 3D XPoint 带入 DDR4 主内存,这些都是使处理器吸引客户的重要方面,即便“Cooper Lake”Xeon SP 针对机器学习工作负载进行了一些调整,采用了新架构,以及备受期待的 10nm 晶圆工艺的“Ice Lake”Xeon SP 将于今年年底推出,2020 年上路。
自从英特尔推出“Nehalem”Xeon 5500 处理器以来,数据中心发生了很大变化,因为 AMD 仍在激烈竞争,坦率地讲,公共云业务规模很小,超大规模用户对系统业务的影响不像今天这样大。
Ian Steiner 是英特尔首席工程师、处理器首席架构师,以及自 Nehalems 以来 Xeons 所有产品的功率和性能架构师,他在一次关于 Cascade Lake Xeon SP 细节的演示中,把架构比较基准线 月推出的“Sandy Bridge”Xeon E5-2600 处理器上,这是英特尔架构上的一个重要飞跃,顺便说一下,由于设计和 32nm 制造工艺的问题,该器件的高端产品有 22.6 亿个晶体管和核心,因此出现了一些延迟。Skylake 和 Cascade LakeXeon SP 处理器,以及那些经过改进的 14nm 处理器,内置 28 个内核,以及大量“非核”电路,总共 80 亿个晶体管。但市场上的差异比这些基本的“进料和速度”所暗示的更为深刻,正如 Steiner 所示:
Steiner 在一次关于 Cascade Lake 处理器架构的简报中解释说:“从那时起,情况发生了很大的变化。公共云才刚刚开始。我们有很多客户真的很担心节能、规格和其他测量指标,但今天客户真正困扰我们的是我们如何才能提高他们系统的吞吐量,并真正利用我们正在进行的一切投资。因此,我们在系统中添加的很多功能与运行传统基准测试以及如何将系统使用到其峰值无关。我记得我在 2010 年读过一些关于数据中心以 20%的利用率运行的文章,如果我是一个财务人员,那么会让我非常生气。如果客户线%的利用率使用我们的系统,我们想知道如何使他们达到 50%、60%、甚至 70%、80%。这一直是我们关注的重点之一。”
Steiner 还说,在这七年里,高性能计算的本质也发生了很大变化。“我们在市场的其他部分看到了更多的计算量,随着 AI 和其他一些分析工作负载的增加,许多高性能的计算特性正在扩展到其他用例。这只是刚开始,但我们认为这在未来将会继续发展。”在客户的敦促下,英特尔在 CPU 市场引发的另一个重大变化是定制化。第一个定制的英特尔 CPU 是在 Sandy Bridge 时代,就像 Steiner 所言,现在英特尔有“成堆”的定制 CPU。对 Cascade Lake 生产线的快速回顾显示了大规模定制是如何进行的,英特尔在处理器上进行各种调节来激活或禁用处理器特性,并调高或降低时钟速度来调整特定工作负载的性能,这是一种常态。下图是一个简易的图表,展示了 Cascade Lake 产品线中主要 SKU 的散点图,英特尔将其称为可扩展处理器(Scalable Processor):
标准的 Cascade Lake Xeon SP 部件有 53 个,包括 Platinum 系列的中型和大型内存变体,其中不包括英特尔仍在为企业、HPC、云和超级销售部门的终端用户客户为 OEM 和 ODM 生产的定制部件。正如我们之前所指出的,Skylake 和 Cascade Lake Xeon SP 处理器实际上有三种不同版本低核心数(LCC)、高核心数(HCC)和极限核心数(XCC)变体,它们分别有 10、18 和 28 个核心。
相比之下,2009 年的 Nehalem Xeons 来自相同的芯片设计,它们都有 4 个核心,都有 8MB 的 L3 缓存,它们的主要区别在于时钟速度,从 2.26 GHz 到 2.93 GHz 不等。由于登纳德缩放比例定律(Dennard Scaling)的结束,时钟速度没有太大变化,在 2006 年左右开始崩溃。我们可以想象,由于核心流水线、缓存结构和其他调整的变化,整数工作负载的每个时钟周期所执行的指令数(IPC)在 Nehalem 和 Skylake 代之间增加了 41%,并且考虑到 Cascade Lake core 是 Skylake 设计的衍生产品,具有针对 Spectre/Meltdown 的安全措施,调整向量引擎以运行用于机器学习推理的 8 位整数指令(INT8),以及允许 Optane PMM 内存在系统上运行的更改,我们不认为英特尔已经改变了通过从 Skylake 迁移到 Cascade Lake 的核心算术逻辑单元(ALU)运行的整数工作的 IPC。这就是英特尔从 2009 年的 4 核 Nehalem 处理器转向 2011 年的 6 核 Westmere 处理器时所发生的情况。但英特尔确实把核心计数、时钟速度、温度和价格混在了一起,从 Westmere Xeons 开始,这个过程一直在扩大 Xeon 产品线中 SKU 的数量。
英特尔一直在逐步提高每个插槽的内存带宽,方法是通过向系统中添加更快的 DDR3 和 DDR4 内存,以及增加每个插槽的内存控制器,就像其他芯片制造商一直在做的那样。
Nehalem Xeons 在芯片上集成了一个内存控制器(在此之前,AMD 在 Opterons 上也是这样做的),支持两个或三个 DIMM 用于双插槽服务器。对于 Westmere Xeons,双插槽机器具有相同的内存控制器,但在四插槽的变体中,内存控制器可以在每个插槽上驱动四个内存插槽。对于 Sandy Bridge Xeons,四插槽机器和一些双插槽机器在集成在芯片上的单个控制器上有四个内存插槽,而另一些则有三个内存插槽,这种内存方案仍然适用于后续的“Ivy Bridge” Xeons(2013 年),但英特尔将芯片上 12 个内核的环形互连增加了一倍,因此每个芯片的内存控制器翻了一倍(每个内存控制器有两个通道)。在 2014 年的“Haswell”Xeons 中,更多的核心挂在连接芯片上的核心和缓存的一对环路上,但内存控制器和存储通道的数量与 Ivy Bridge 相同;内存速度略有加快。随着 2016 年的“Broadwell”Xeons 的推出,环路再次变大,但内存保持在两个控制器和每个控制器两个通道,总共四个通道,每个通道可选择三个 DDR4 DIMM,运行频率为 1.6GHz;或两个每个通道的 DIMM 以 2.4GHz 的较高时钟速度运行。凭借 2017 年的 Skylake Xeon SP,英特尔在芯片上的网状互连中有两个 DDR4 内存控制器,每个都有三个通道,客户可以以高达 2.67 GHz 的频率运行内存,理论上这对 Xeon 处理器来说应该是一个很大的内存带宽提升,但每个通道只有两个 DIMM,而 Broadwell 最多有三个 DIMM。这一代的所有其他芯片IBM Power 9、AMD Epyc 和 Marvell ThunderX 2每个插槽有 8 个 DDR4 内存通道,因此在相同的内存速度下,Broadwells 和 Skylakes 的带宽优势为 33%。
随着 Cascade Lake Xeon SP 芯片刚刚推出,英特尔对于库存芯片仍然使用每插槽 6 个内存通道,但在双倍 Cascade Lake-AP 中,它将两个完整的 Cascade Lake 芯片塞到同一个 BGA 表面贴装封装上(像一个巨大的嵌入式芯片,而不是用于服务器处理器的更标准的 LGA 插槽)。通过这样做,英特尔可以把它放入插槽的内容加倍,但每个人都知道,双插槽服务器实际上是一个时髦的四插槽服务器。
如果在不必重新调整整个芯片布局和插槽设计的情况下为插槽添加更多电源引脚并不困难,那么英特尔就会在 Skylake 或 Cascade Lake 代际中添加更多或更强大的内存控制器,似乎我们必须等到 Ice Lake 这一代才能看到这一点。人们期待的是一对内存控制器,每个插槽可提供 8 个通道,每个通道最多可提供两个 DIMM,但英特尔尚未对 Ice Lake 提供任何承诺。据我们所知,在 2020 年之前,没有人会比这做得更好,但如果所有人都不增加更多内存,那么内存与核心比率将会失控。这就是为什么英特尔一直寄希望于使用 3DXPoint 内存扩展每个 DIMM 的内存容量,这可以从目前使用昂贵的 128 GB DDR 4 DIMM(最高 768 GB)内存通过 Cascade Lake Xeon SP 插槽提升到 L 内存扩展的 Platinum 版本处理器的 4.5 TB。这种 FAT 配置使用 DDR 4 和 OPTAN PMM 内存的混合。顺便说一下,该配置使用了四个 128 GB 的 DDR 4 DIMM 和 8 个 512 GB 的光学 PMMS。
由于受到 GPU 的威胁,以及在较小程度上采用卸载方式的 FPGA 加速,英特尔受到传统 HPC 空间以及从 Westmere 产品线开始的超大规模用户和云建设者空间的威胁,英特尔的回应是通过连续的 Xeon 代际增加更强大的浮点能力。
过去十年,英特尔一直致力于在 Xeon 产品线上扩展单精度和双精度浮点运算。Steiner 承认,英特尔对增强这些矢量单元的整数运算能力并不十分感兴趣直到机器学习训练算法的兴起,随着时间的推移,这些算法正在使用越来越小的 INT 数据格式。
Haswell Xeons 在其 AVX 2 矢量单元中有 INT 的运算支持,但乘法累加(MAC)操作不是焦点,因为 8 位 INT 8 格式的动态范围很小,只有 256 个数值,而单精度 FP32 格式表示的是 2128 个可能的数值。但是,INT 8 的精度和动态范围(有些人甚至会认为 INT 4)对于某些机器学习训练推理例程来说已经足够了,因此英特尔将其添加到 Cascade Lake Xeon SP 处理器中的 AVX-512 矢量引擎中。我们进入了矢量神经网络指令(VNNI)的架构,有时称为深度学习增强(DL Boost),它于 2018 年 8 月随 Cascade Lake 首次亮相,但下图更好地概括了它:
利用 Skylake 架构,对 8 位整数进行矩阵乘法,并将它们累加到 32 位整数寄存器中(这是为了避免因 8 位数字范围有限而导致溢出,FP16 或 FP32 由于这些数据格式的动态范围很大而很容易处理)。这在过去需要三个步骤,现在 Cascade Lake 只需要一步,完整的 AVX-512 单元(意味着两个端口都被激活)可以在每个时钟周期完成 128 个这样的步骤。这比 ALU 中的整数单元(每次 64 位)所能处理的多很多。
Steiner 表示:“实际工作负载可能无法通过 DL Boost 获得 3 倍的性能,但这没关系。我们的目标并不是要在所有方面最大化 TOPS 峰值。我们正在尝试将正确的基元构建到硬件中,以便更复杂的软件能够获得尽可能多的性能提升。这就是我们追求的很多2X的地方。”
这意味着在矢量整数格式上获得类似的扩展,就像过去十年矢量浮点格式发生的情况一样,下面是一张简易的图表,展示了随着时间的推移,Xeon 系列的 SIMD 引擎中的浮点和整数在架构上的飞跃:
虽然客户并不像过去那样痴迷于功耗,但设计 Cascade Lake 的团队仍然关注当前常用的各种推理基准测试中功耗和性能的相互作用,这张图表展示了 DL Boost 是如何在 Skylake Xeons 中使用 FP32 和传统 INT 8 方法实现的:
根据 Steiner 的说法,在 Skylake Xeon SP 芯片上,从 FP32 到 INT 8,每个时钟周期峰值 Mac 的性能提高了大约 33%,而且由于数据量较小,处理器的缓存和内存带宽压力也有所缓解。与 FP32 相比,Skylake 上的 INT8 计算效率更高。现在,从 Skylake 芯片中的传统 INT8 转移到 Cascade Lake 芯片中的 DL Boost 指令导致每个时钟周期峰值 MAC 增加 3 倍,并且对缓存或内存带宽没有影响(数据格式相同,处理器上的缓存层次结构相同),此外 INT8 操作的功率效率再一次得到了提升。
如图所示,传统的 INT8 方法使用的功率要低得多,性能也有所提升,但是 DL Boost 的重点是用相同的功率提供更高的吞吐量,就像在 FP32 模式中进行相同的推理一样。可能还有其他工作负载可以使用此 INT 8 及其配套的 INT 16 功能,但到目前为止还没有出现。但是现在硬件已经在这里了,也许有人会想出聪明的方法来使用它。
也许同样重要的是,当运行推理工作负载时,系统的内存带宽压力从 FP32 转移到 DL Boost:
这又回到了超大规模用户和高频交易商以及超级计算机客户甚至在他们告诉系统制造商很长一段时间之前的老生常谈的观点:在实际工作负载上,可预测的延迟和一致的性能比某些理论工作负载上的一些峰值吞吐量重要得多。

