失效分析 赵工 半导体工程师 2022-09-19 10:33 发表于北京
AMD 一直在缓慢但坚定地执行他们在所有计算领域取得领先地位的计划,这已不是什么秘密。在服务器 CPU 和消费者方面,我们已经看到他们通过 Zen 和 RDNA 闯入了这个领域——这两个伟大的设计都在每一代都得到了迭代改进。今天我们来看看他们最新进入服务器 GPU 领域的产品:Instinct MI200 架构。
随着摩尔定律的放缓,以及现代工作负载不断增长的处理需求开始超过代际性能增长的速度,设计公司被迫转向专门的、特定领域的架构,而不是更通用的一刀切——所有方法。在 GPU 方面,这体现在游戏和计算架构的分歧上,RDNA 是处理图形和游戏工作负载的精益延迟优化架构,而 CDNA 是处理计算工作负载的吞吐量优化架构。MI200 是 CDNA 系列的第二款产品,取代了之前的 MI100。

MI200 概述,来自 HC34 演示文稿
虽然从更高的层面看,MI200 似乎是对其前身在关键领域的定期迭代改进;加强 MI100 的一些弱点并提高其优势,可以说,MI200 标志着 AMD 的服务器 GPGPU 设计的新时代,以及他们开始利用其作为强大 CPU 和 GPU 设计公司的优势的点。通过利用 Infinity Fabric 接口等关键技术,AMD 成功地在其 CPU 和 GPU 之间创建了一致的内存空间,从而在某些工作负载中提供了巨大的优势。
不仅如此,通过 Infinity Fabric,AMD 可以通过使用小芯片方法 ala Zen 来解决芯片扩展问题,其中芯片封装将包含多个图形小芯片,每个图形小芯片通过 Infinity Fabric 链接连接到另一个。

HC34 演示中所示的 MI250X GPU
事实上,两个主要的 MI200 加速器(MI250、MI250X)使用这种方法,其中每个加速器由两个通过一致的 4x Infinity Fabric 链路相互连接的小芯片(“GCD” - 图形计算芯片)组成,通过以下方式实现灵活性和可扩展性使用多个尺寸更小、产量更高的 GCD,而不是一个大型单片芯片。然而,正如第一代这样的新技术所预期的那样,它带有多个caveats。
首先,从软件的角度来看,一个加速器被暴露为两个独立的 GPU。这意味着您的算法需要支持多 GPU 才能充分利用加速器。其次,尽管由 4 条高速 IF 链路连接,但芯片到芯片的带宽仍然远低于 HBM 内存带宽,导致 GCD 之间的数据移动相当痛苦,并且比内存访问慢得多。这实际上是 AMD 选择将加速器作为两个不同的 GPU 公开的原因。他们无法匹配两个芯片之间的 HBM 带宽以将两个 GPU 暴露为一个,也无法匹配至少一半的带宽来支持分布式模式配置,因此他们决定将它们暴露为不同的 GPU。
有趣的是,另外两个 Hot Chips 演示展示了multi-die GPU,它们可以将自己呈现为一个统一的 GPU。英特尔的 Ponte Vecchio 可以,Biren 的 BR100 也可以。正如 NUMA 感知软件在多 CPU 系统设置为 NUMA 模式(显示多个内存池)时可以更好地执行一样,感知multi-die GPU 拓扑的软件将能够充分利用硬件。但是对于不是“NUMA 感知”的软件,英特尔和 Biren 的 GPU 可以伪装成单个 GPU,从而允许软件进行一些扩展。
对 AMD 有利的是,这种劣势在 HPC 环境中不会成为主要因素。HPC 代码旨在通过使用 MPI 在高速网络上同步和传递数据来跨多个节点进行扩展。dual die MI250X 将被简单地视为两个 GPU,它们之间的消息传递速度特别快。即使我们排除基于 MI250X 的系统,多 GPU 设置在超级计算机中也很常见。例如,Summit节点在每个节点中包含六个 GV100 GPU,而Perlmutter启用 GPU 的节点每个节点有四个 A100 GPU。简而言之,如果由于某种原因您无法编写可在多个 GPU 上很好扩展的代码,那么它可能不适合超级计算集群。
计算——MI200 GCD 内部的一个高峰
接下来,我们来看看 MI200 GCD,以及它对 MI100 带来的改进。

单个 MI200 图形计算芯片,如 CDNA2 白皮书中所述
总体而言,MI200 GCD 的计算架构与之前的 MI100 架构相比,采用了一种迭代、进化的方法。芯片分为 4 个计算引擎,每个计算引擎由一个异步计算引擎提供,每个计算引擎分为 2 个着色器引擎,每个着色器引擎有 14 个计算单元 (CU)。

单个 MI200 计算单元,来自 CDNA2 白皮书
CU 的结构与 MI100 基本相同。每个 CU 有 4 个 SIMD16 单元和 4 个 Matrix Core 单元,带有一个调度器、一个 64B/CU/clk 带宽的 16KB 64 路 L1 缓存、加载/存储单元和本地数据共享。这里的主要区别在于 ALU 现在本身是 64 位宽的。这意味着 MI200 可以做全速率 FP64,这不仅比 MI100 的吞吐量提高了 2 倍,而且相对于 NVIDIA A100 也有相当大的优势,并且 MI200 加速器的FP64表现仅比下一代 NVIDIA H100 差一点。
AMD 还使用此功能来提供对打包(packed) FP32 指令的支持,这使某些 FP32 操作(FMA、FADD 和 FMUL)的吞吐量增加了一倍。然而,这并不是免费的——它需要修改代码才能工作,因为操作数需要与偶数寄存器相邻并对齐。AMD 还包括专用的打包移动指令,以帮助对分散的操作数进行排序,以便它们可以与打包的 FP32 操作一起使用。寄存器分配当然是编译器的工作,而不是程序员的工作,但是对于打包的 FP32,需要指导编译器以利用此功能,需要进行一些修改。

使用打包的 FP32 所需的代码修改说明,如 CDNA2 白皮书中所示
虽然所需的代码更改可能看起来令人失望,但对于 MI200 所针对的超级计算机平台来说,这并不是什么大问题,在这些平台上,专门编写的软件更容易容忍。
从 MI100 开始,AMD 在其 CU 中添加了矩阵单元。与 NVIDIA 的张量核心一样,这些矩阵单元是通过一组新指令访问的。在 NVIDIA 和 AMD 上,矩阵指令打破了 SIMT 抽象模型并在整个波前(或 NVIDIA 上的“扭曲”)上工作。

NVIDIA Turing 张量核心的矩阵布局。请注意,32-wide warp 中的通道不再是独立的,并且矩阵运算在 32-wide warp 中起作用
矩阵操作在双方都有些奇怪。NVIDIA 依赖于向量寄存器文件中的特殊布局。AMD 添加了第二个累加器寄存器文件。对于 A * B + C 矩阵运算,MFMA 指令可以从任一寄存器文件中获取 A 和 B,但 C 必须来自累加器寄存器文件。

来自 AMD 的CDNA ISA 文档,说明了单独的累加器寄存器文件
CDNA2 通过删除单独的累加器 RF 对此进行了改进,而是选择提供一个大的统一寄存器文件。以前在 MI100 中,每个 SIMD16 单元都有 256 个“架构”矢量通用寄存器 (VGPR),而矩阵核心单元有另外 256 个“累加器”寄存器。MI200 将这两者结合到一个具有 512 个条目的统一寄存器文件中。对于矩阵运算,这消除了在寄存器文件之间移动值的潜在麻烦,以确保累加器输入可以来自累加器寄存器文件。统一寄存器文件增加的条目数也有助于减少寄存器压力,并且在运行非矩阵代码时也可能增加占用率。

MI200 CU的存储布局
MI200 中的矩阵核心单元还支持全速率 FP64,与 MI100 相比,每个 CU 周期的 FP64 FLOPS 增加了 4 倍。较低精度的矩阵数学也看到吞吐量增加,BF16 每个 CU 时钟的吞吐量相对于 MI100 增加了一倍。此外,还为 16x16x4 和 4x4x4 块引入了更节能的矩阵指令。
最后,MI200 CU 中的 LDS 得到了改进的atomics,并支持 FP64 atomics。
这些变化反映并强化了 AMD 在其服务器 GPU 上采用的以 HPC 为中心的方法,非常注重双精度矢量性能,而不是较低精度或矩阵性能。MI250X 的矩阵单元比 CDNA1 中的矩阵单元有所改进,但它仍然仅与 NVIDIA 的每 CU/SM 时钟吞吐量与 FP64 相匹配。在处理精度较低的格式时,NVIDIA 仍然提供更高的矩阵吞吐量,这使 Hopper 成为 ML 和 AI 工作负载的更好选择。
内存层次结构——扩大规模
每个 GCD 都有一个 8MB 的 16 路 L2 缓存,物理划分为 32 个 slice,BW 为 128B/clk/slice,总带宽为 4096B/clk,实际上是 MI100 的 L2 带宽的两倍。与 LDS 一样,MI200 也增强了 L2 atomics,增加了对 FP64 atomics的支持。
在内存方面,每个 MI200 GCD 都有 4 个堆栈,总计 64GB 3.2 Gbps HBM2E,物理划分为 32 个通道,在有效电压下带宽为 64B/clk,这意味着每个 GCD 的内存带宽为 1.6 TB/s,即与 MI100 相比,带宽增加了 33%,内存容量增加了 100%。由于大多数工作负载都受内存带宽限制,这些都是朝着正确方向迈出的良好一步,特别是对于 HPC,内存容量翻倍将非常有用,因为大量工作负载仍然受内存容量限制。

与 CDNA 相比,CDNA2 GCD 带来的 CU 稍少,但为这些 CU 提供了更多的缓存和内存带宽。这种带宽增加可能是必要的,因为 CDNA2 计算单元可以全速处理 FP64,而 FP64 值消耗的内存和内存带宽是 FP32 的两倍。
AMD 的 HPC 和消费级 GPU 架构在过去几年中越来越分化,而 CDNA2 和 RDNA2 的内存子系统也大相径庭。RDNA2 将廉价的 256 位 GDDR6 设置与非常复杂的缓存层次结构相结合,而 CDNA2 具有简单的两级缓存设置,具有巨大的 L2 和 DRAM 带宽。
CDNA2 的 L2 实际上比 RDNA 的 L2 具有更多的理论带宽,尽管更大。
NVIDIA 的缓存方法与 AMD 的相反,同时强调消费卡和 HPC 卡的高 DRAM 带宽。他们的消费级 GA10x 芯片具有高达 6 MB 的 L2,并使用非常高功率、高带宽的 GDDR6X 设置。相比之下,他们面向 HPC 的 A100 具有 40 MB 的 L2,由 HBM2 支持。NVIDIA 即将推出的 Hopper 架构延续了这一趋势,并带来了由 HBM3 支持的 50 MB L2。
连通性——Infinity Architecture 3
高速连接将超级计算机与任何旧的商品硬件区分开来。HPC 程序旨在跨多个节点进行扩展,并通过在节点之间传递消息(使用 MPI 等 API)来实现。因此,快速链接对于确保良好的扩展性至关重要。HPC 集群还需要复杂的链路拓扑,以在任意两个节点之间提供尽可能多的带宽,同时最大限度地减少所需的链路数量。MI250X 引入了更复杂的 IF 链路设置,以尽可能提高带宽。
首先,AMD 略微增加了 IF 链路带宽。MI100 的 IF 链路在每个方向上为 16 位宽,以 23 GT/s 的速度运行,在每个方向上提供 46 GB/s 的带宽,或总共 92 GB/s。MI250X 的 IF 链路保持 16 位宽,但传输速率提高到每个方向提供 50 GB/s,或总计 100 GB/s。然后,AMD 实施了更多具有不同类型物理接口的 IF 链路,以在物理约束范围内最大化带宽。四个 IF 链路具有封装内接口,可让封装内的两个 GCD 以 400 GB/s 的带宽相互通信。
其他三个 IF 链路具有inter-package 接口,用于与其他 GCD 和主机 CPU 通信。与 MI100 不同,在 MI100 中,每个 GPU 三个 IF 链路允许完全连接的四 GPU 设置,MI250X 需要更复杂的拓扑。因为每张 MI250X 卡基本上都是双 GPU 板,所以四 GPU HPC 设置需要连接八个 GCD。AMD 为每个 GCD 提供了到对等 MI250X 卡中两个 GCD 的直接链接。当跨 GCD 通信确实需要额外的一跳时,该额外的一跳总是可以通过高带宽的包内链路。这避免了在较低带宽的包间链路上产生拥塞。

CDNA2 互连拓扑。NIC 带宽由 GPU HBM 提供支持,减少了较慢 CPU DDR4 的压力。与 CPU 的 IF 链路连接允许 CPU 和 GPU 内存池之间的硬件缓存一致性
AMD 使用 GCD 的第三个inter-package
IF 链路连接到 CPU。此链接仅在 IF 模式下使用特别优化的第三代 EPYC(霄龙)CPU(Frontier 中使用的 AMD Trento 平台)运行。这允许 CPU 和 GPU 之间的完全一致性,其中 CPU 在 MI250X 中缓存其内存和 HBM 内存,使 MI250X 封装在某些工作负载中比其他传统设置具有主要优势。当与任何其他常规 x86 CPU 连接时,该链接表现为常规 PCIe x16 接口。

CDNA1 互连拓扑。CPU 到 GPU 的通信和 CPU 到网络的通信都由较慢的 DDR4 支持
MI200 的另一个重大变化是增加了一个下行 25Gbps PCIe 4.0 ESM 链路。此下游接口与 PCIe 根复合体耦合,使 GPU 能够驱动与其连接的 I/O 设备。因此,GPU 可以直接管理与其连接的设备,而无需依赖 CPU 进行管理。此功能对于在超级计算集群中看到的非常高带宽的网卡特别有用。进出 IO 设备的流量通常由 DRAM 支持,这意味着通过网络控制器移动大量数据可能会占用大量 DRAM 带宽。将 NIC 直接连接到 MI250X GPU 允许 AMD 使用 GPU 的 HBM 内存支持网络流量,它的内存带宽比 CPU 的 DDR4 大得多。
这反过来使具有四个 200 Gbps NIC 的 HPC 设置变得实用,为 HPC 集群中的其他计算机提供高带宽。如果您尝试将这四个 200 Gbps NIC 连接到 CPU,网络流量可能会占用大部分 CPU DRAM 带宽,如果您还想在 CPU 内核上进行大量计算,则会导致带宽不足。
MI300 – 建立在坚实的基础之上
在 AMD 的财务分析师日期间,AMD 披露了 CDNA2 的继任者,不出所料地称为 CDNA3。与 CDNA 2 相比,CDNA3 看起来是一个非常不同的野兽,并继续从 CDNA 1 开始的计算专业化。

根据这张幻灯片,CDNA3 不是标准 GPU,而是更像是一个非常大且非常强大的 APU,在同一个封装上具有 CPU 和 GPU 计算小芯片。因此,它延续了改进 CPU 到 GPU 通信的趋势。

这是继 MI200 之后自然而然的下一步。我们正在从让 CPU 和 GPU 作为系统中的对等点一起工作,到将 CPU 和 GPU 放入具有统一内存架构的同一个封装中。
将 CPU 和 GPU 封装在一起开辟了更多可能性,看起来 AMD 正在考虑 Infinity Cache。RDNA 2 使用 Infinity Cache 来避免昂贵的 GDDR6X 或 HBM 内存配置。在 CDNA3 中,一个大的内存附加高速缓存可以提供几个优点。CDNA(和 GCN 代)从来没有特别大的 L2 缓存。即使使用 CDNA2,L2 缓存仍然小于 NVIDIA 的 A100。Infinity Cache 可以将一项成功的技术从 RDNA2 带到 CDNA 线。Infinity Cache 可以加速 CPU 和 GPU 之间的复制,因为两者都是该缓存的客户端。最后,高带宽网卡可以连接到 CPU 或 GPU,并且 IO 流量将由高带宽 Infinity Cache + HBM 设置支持。
HSA 又活了?
许多很多年前,AMD 在其消费类 APU 中引入了 HSA(异构系统架构)。与英特尔相比,AMD 当时的处理能力严重不足。AMD 的向量单元为 128 位宽,而 Intel 有全宽的 256 位 AVX 单元。Piledriver、Steamroller 和 Excavator 还在模块中的两个线程之间共享一个 FPU。但是,AMD 确实拥有非常强大的图形 IP,因此他们希望通过将相对强大的集成 GPU 集成到他们的 APU 中来弥补这一点。HSA 有望让计算应用程序利用 APU 的统一内存池和硬件一致性来利用 AMD 的 iGPU 吞吐量。

AMD 的 APU 将 CPU 和 GPU 组合到同一个芯片上,具有硬件一致性和未分配的内存池
可悲的是,AMD 的集成 GPU 远弱于独立 GPU,因此 iGPU 计算从未真正起飞。然而,iGPU 计算随着 HSA 的优势回归 CDNA3。CDNA3 仍应以高性能计算为目标,并应具有足以与离散 GPU 竞争的性能。

将 CPU 和 GPU 放在同一个内存池中,很大程度上消除了在两个设备之间复制数据的需要。相反,可以传递指针。可以在两个设备上映射相同的物理内存页面,而不必担心一个设备必须通过低带宽链接访问该页面。

AMD 在 Kaveri 的 HSA 上幻灯片,展示了统一内存池如何允许跳过复制步骤
总之,CDNA3 延续了 CDNA 专注于计算应用程序的趋势,但它引入了最初为消费类图形架构开发的技术,当它们适用于高性能计算时。
封装与人工智能
另一个似乎与 MI300 一起出现的重大变化是 Infinity Architecture 4,它希望将 Infinity Architecture 支持扩展到 2.5D/3D 小芯片以及其他连接性变化,这与启用统一内存架构密切相关。MI300 带来了,因为它将允许单个封装中的所有芯片和小芯片共享一个连贯和统一的内存空间。

最后但同样重要的是,MI300 似乎还解决了 MI200 的核心弱点之一,即与 NVIDIA A100 和 H100 架构相比,AI 性能相对较差。据称,估计 AI 训练性能 > 8 倍,AI perf/watt 提升 > 5 倍,看来 AMD 将给矩阵内核一个不错的升级。从尾注中我们也知道 MI300 将支持 FP8,因此较低精度的性能看起来会受到关注,这也有助于提高 AI 性能。
结论——百亿亿次级之旅
到 2022 年年中,距离 AMD 最初的 GCN 发布已有十多年的时间。几年前,AMD 对 GCN 的基础架构进行了重大更改以创建 RDNA,从而为图形工作负载提供了巨大的效率优势。但是 GCN 并没有随着 RDNA 的崛起而逐渐消失。它仍然非常适合计算工作负载,因此 AMD 从 GCN 中删除了 G(图形)并开始优化架构以实现高性能计算,从而为我们提供 CDNA。

相对现代的 AMD GPU 架构的简要概述
在第二代 CDNA 中,该架构进一步远离了其作为面向图形设计的根源。FP64 在消费图形市场上几乎无关紧要,但在 CDNA2 上却是一等公民。CDNA 中存在具有不同细节级别 (LOD) 的纹理采样说明,但随 CDNA2 删除。CDNA2 还获得了更强大的矩阵单元,AMD 在消费图形方面没有用处。
AMD 对 HPC 的关注还体现在双芯片设计上。CDNA2 的跨芯片链接缺乏跨两个芯片公开统一内存池所需的带宽。由于帧节奏问题,多 GPU 卡在消费类图形领域几乎消失了。但是 HPC 代码几乎按照定义是多 GPU 感知的,因此 MI250X 的多芯片设计在提供出色的计算密度的同时并没有太大的障碍。
HPC 领域的所有这些专业化使 AMD 能够提供一个在 HPC 中实际上是其他任何产品都无法比拟的软件包,这为 AMD 带来了令人印象深刻的超级计算机胜利。Frontier 和 LUMI 均搭载 MI250X GPU,在6 月份的 TOP500榜单中分别占据第一和第三的位置。我们期待看到 MI250X 在市场上出现,尽管我们怀疑它在 HPC 领域之外的主导地位将更加困难。
来源:半导体行业观察

半导体经验分享,半导体成果交流,半导体信息发布。半导体行业动态,半导体从业者职业规划,芯片工程师成长历程。