跳转到主要内容

4.7 融会贯通:嵌入式与服务器 GPU、Tesla 与 Core i7

图形应用十分普及,因此,移动客户端、笔记本电脑、高性能台式机和传统服务器中如今都能看到 GPU。图 4.29 列出了面向平板电脑和笔记本客户端的 Intel Xe GPU 片上系统,以及面向服务器的 NVIDIA Hopper GPU 的主要特征。

Iris Xe ICX 是 Intel GPU 微体系结构家族中的低功耗成员。它的基本构件是执行单元(Execution Unit,EU),即一个支持七路多线程的 SIMD 处理器。每个线程有 128 个寄存器,每个寄存器宽 32 字节。主要计算单元是一个八路 SIMD 单元,用于浮点和整数计算;辅助单元是一个两路 SIMD 单元,用于扩展数学运算。

每个 EU 每个时钟周期能够执行 16 次 16 位浮点运算,或 8 次 32 位浮点运算。图 4.29 所列实例有 96 个 EU、12 MB L3 缓存,每个时钟周期可以向 DRAM 传输 128 字节数据。

NVIDIA Hopper H100 的睿频时钟频率为 2.0 GHz,包含 132 个 SIMD 处理器。通往 HBM3 存储器的数据通路宽 5120 位,在 2.62 GHz 时钟的上升沿和下降沿都传输数据,因此,峰值存储器带宽为 3330 GB/s。

H100 裸片的各项物理指标都相当惊人:它包含 800 亿个晶体管,采用 TSMC 4 nm 工艺,裸片面积为 814 mm²,典型功率为 700 W。

特征Intel Xe GPU(Core i7-1195G7 中)NVIDIA Hopper H100
推出年份20212022
核心数96132
基础时钟频率(GHz)0.301.13
睿频时钟频率(GHz)1.401.98
裸片面积(mm²)N.A.814
制造工艺Intel 10 nm SFTSMC 4N
功率(W)最高 28(包括 CPU、缓存等)700
晶体管数(十亿)N.A.80
存储器技术LPDDR4x-4267HBM3
存储器容量(GB)3280
存储器带宽(GB/s)683350
片上存储容量(MB)1250
单精度 SIMD 宽度832
双精度 SIMD 宽度N.A.32
单精度峰值(GFLOP/s)N.A.66,900
双精度峰值(GFLOP/s)N.A.33,500
机器学习 16 位峰值(GFLOP/s)4300989,000
图 4.29 嵌入式客户端与服务器 GPU 的主要特征。N.A. 沿用原表,表示未提供或不适用。

译注: 正文把 H100 的峰值带宽写为 3330 GB/s,图 4.29 写为 3350 GB/s。按正文给出的位宽和频率计算,5120/8×2×2.62=3353.65120/8\times2\times2.62=3353.6 GB/s。

GPU 与带有多媒体 SIMD 的 MIMD 的比较

一组 Intel 研究人员发表了一篇论文(Lee 等,2010),比较了带有多媒体 SIMD 扩展的四核 Intel i7 与 Tesla GTX 280。虽然这项研究没有采用 CPU 和 GPU 的最新版本,但它解释了性能差异背后的原因,因此是对这两种风格最深入的比较。此外,这两类体系结构的当前版本,与研究中的版本仍有许多相似之处。

图 4.30 列出了两个系统的特征。这两款产品都是在 2009 年秋季购买的。Core i7 采用 Intel 的 45 nm 半导体工艺,GPU 采用 TSMC 的 65 nm 工艺。如果由中立方,或由两个利益相关方共同进行比较,也许会更加公平;不过,本节的目的并非判定一种产品比另一种快多少,而是理解这两种截然不同的体系结构风格中,各项特征的相对价值。

特征Intel Core i7-960NVIDIA GTX 280GTX 280 / Core i7
处理单元数(核或 SM)4307.5
时钟频率(GHz)3.21.30.41
裸片面积2635762.2
制造工艺Intel 45 nmTSMC 65 nm1.6
芯片功率(不是模块功率)1301301.0
晶体管数7 亿14 亿2.0
存储器带宽(GB/s)321414.4
单精度 SIMD 宽度482.0
双精度 SIMD 宽度210.5
单精度标量峰值(GFLOP/s)261174.6
单精度 SIMD 峰值(GFLOP/s)102311–9333.0–9.1
单精度:一次加法或乘法N.A.(311)(3.0)
单精度:一次融合乘加N.A.6226.1
单精度:双发射融合乘加与乘法(罕见情况)N.A.9339.1
双精度 SIMD 峰值(GFLOP/s)51781.5
图 4.30 Intel Core i7-960 与 NVIDIA GTX 280。最右列为 GTX 280 与 Core i7 的比值。GTX 280 单精度 SIMD FLOP/s 的较高值 933 来自一种极少见的情况:同时发射融合乘加与乘法。单发射融合乘加对应的 622 更为合理。这里的存储器带宽高于原文所指的图 4.28,因为这里给出的是 DRAM 引脚带宽,而所比较的带宽是在处理器处通过基准程序测得的。数据出自 Lee 等(2010)的图表 2,完整出处见本节注释。

译注: 原表制造工艺的比值写为 1.6,按表内数字 65/45≈1.4465/45\approx1.44。图注所指“图 4.28”是术语比较表,不含带宽数据,显然是交叉引用错误;本节随后图 4.31 才列出实测 Roofline 带宽。以上均保留原值并注明。

图 4.31 中 Core i7 920 与 GTX 280 的 Roofline 曲线显示了这两台计算机的差异。920 的时钟频率低于 960(2.66 GHz 对 3.2 GHz),系统的其余部分相同。

图 4.31:Core i7 920 与 NVIDIA GTX 280 的双精度和单精度 Roofline 模型。
图 4.31 Roofline 模型(Williams 等,2009)。上排显示双精度浮点(DP FP)性能,下排显示单精度性能;下排也画出双精度性能上限,以便比较。左侧 Core i7 920 的双精度峰值为 42.66 GFLOP/s,单精度峰值为 85.33 GFLOP/s,峰值存储器带宽为 16.4 GB/s。NVIDIA GTX 280 的双精度峰值为 78 GFLOP/s,单精度峰值为 624 GFLOP/s,存储器带宽为 127 GB/s。左侧的竖直虚线表示算术强度为 0.5 FLOP/byte;受存储器带宽限制,Core i7 的双精度或单精度性能都不超过 8 GFLOP/s。右侧竖直虚线表示算术强度为 4 FLOP/byte;原文称此时“仅受计算能力限制”,Core i7 可达双精度 42.66 GFLOP/s、单精度 64 GFLOP/s,GTX 280 可达双精度 78 GFLOP/s 和“双精度 512 GFLOP/s”。要达到 Core i7 的最高计算速率,必须使用全部 4 个核心和 SSE 指令,并执行数量相等的乘法与加法。GTX 280 则必须在所有多线程 SIMD 处理器上使用融合乘加指令。

图内标记:Arithmetic intensity=算术强度;Double-precision/Single-precision GFLOP/s=双精度/单精度 GFLOP/s;Peak=峰值;Stream=STREAM 所测存储器带宽。

译注: 原图及图注有三处不一致。右上图的水平线标为 78 GFLOP/s,却画在纵轴约 16 的位置。图注末尾的“双精度 512 GFLOP/s”应与单精度曲线对应,因为同一图已给出双精度峰值 78 GFLOP/s。算术强度为 4 时,单精度性能仍受带宽限制:按图中数据,Core i7 为 min⁡(85.33,16.4×4)=65.6\min(85.33,16.4\times4)=65.6 GFLOP/s,GTX 280 为 min⁡(624,127×4)=508\min(624,127\times4)=508 GFLOP/s;因此,“仅受计算能力限制”不能同时适用于图注所列的全部情况。

GTX 280 不仅具有高得多的存储器带宽和双精度浮点性能,其双精度曲线的转折点也明显更靠左。前面提到,Roofline 曲线的转折点越靠左,就越容易达到计算性能峰值。GTX 280 的双精度转折点为 0.6,Core i7 为 2.6。单精度情况下,转折点向右移动了很多;由于单精度性能上限高得多,要达到这一上限也困难得多。注意,内核的算术强度根据访问主存的字节数计算,而不是访问缓存的字节数。因此,如果大部分访问确实命中缓存,缓存就可能改变一个内核在某台计算机上的算术强度。Roofline 曲线有助于解释本案例中的相对性能。还要注意,两种体系结构给出的带宽都针对单位步长访问;后面会看到,对于不能合并的实际聚集/散布地址,GTX 280 和 Core i7 都会更慢。

研究人员表示,他们先分析了当时新提出的四套基准测试的计算与存储访问特征,再“制定出能够体现这些特征的一组吞吐计算内核”。图 4.32 描述了这 14 个内核,图 4.33 给出了性能结果,数值越大表示速度越快。

GTX 280 的原始规格与 Core i7 相比,从慢 2.5 倍(时钟频率)到快 7.5 倍(每芯片核心数)不等;实际性能则从慢 2.0 倍(Solv)到快 15.2 倍(GJK)不等。Intel 研究人员分析了这些差异的原因:

  • 存储器带宽。 GPU 的存储器带宽是 Core i7 的 4.4 倍,这有助于解释 LBM 和 SAXPY 分别快 5.0 倍与 5.3 倍的原因:两者的工作集都达数百 MB,无法装入 Core i7 的缓存。(为了密集地访问存储器,SAXPY 没有采用缓存分块。)因此,Roofline 曲线的斜率解释了它们的性能。SpMV 的工作集也很大,但只快 1.9 倍,因为 GTX 280 的双精度浮点性能仅为 Core i7 的 1.5 倍。
  • 计算吞吐能力。 其余内核中有五个受计算能力限制:SGEMM、Conv、FFT、MC 和 Bilat。GTX 分别快 3.9、2.8、3.0、1.8 和 5.7 倍。前三个使用单精度浮点运算,而 GTX 280 的单精度性能快 3–6 倍。(图 4.30 所示比 Core i7 快 9 倍的情况,仅发生在 GTX 280 每个周期都能发射一次融合乘加和一次乘法这一极特殊的条件下。)MC 使用双精度运算,所以只快 1.8 倍,因为双精度性能仅快 1.5 倍。Bilat 使用超越函数,GTX 280 直接提供硬件支持(见图 4.18)。Core i7 有三分之二的时间花在计算超越函数上,因此 GTX 280 快 5.7 倍。

最后这一观察说明了对工作负载中常见运算提供硬件支持的价值:包括双精度浮点运算,甚至可能包括超越函数。

  • 缓存的收益。 光线投射(RC)在 GTX 上只快 1.6 倍,因为 Core i7 的缓存与缓存分块使它避免像 GPU 上那样受存储器带宽限制。缓存分块也有助于 Search。如果索引树足够小,能装入缓存,Core i7 的速度就是其两倍。较大的索引树则会使程序受存储器带宽限制。
内核(简称)应用领域SIMD 并行性的特点线程级并行性的划分性能特点
SGEMM(SGEMM)线性代数规则跨二维分块分块后受计算能力限制
Monte Carlo(MC)计算金融规则跨路径受计算能力限制
卷积(Convolution,Conv)图像分析规则跨像素受计算能力限制;小滤波器时受带宽限制
FFT(FFT)信号处理规则跨较小的 FFT依规模而定,受计算能力或带宽限制
SAXPY(SAXPY)点积规则跨向量大向量时受带宽限制
LBM(LBM)Time migration规则跨单元受带宽限制
约束求解器(Constraint solver,Solv)刚体物理聚集/散布跨约束受同步限制
SpMV(SpMV)稀疏求解器聚集跨非零元素典型的大矩阵受带宽限制
GJK(GJK)碰撞检测聚集/散布跨对象受计算能力限制
排序(Sort)数据库聚集/散布跨元素受计算能力限制
光线投射(Ray casting,RC)体绘制聚集跨射线第一级工作集为 4–8 MB;最后一级超过 500 MB
搜索(Search)数据库聚集/散布跨查询小树时受计算能力限制;大树底部受带宽限制
直方图(Histogram,Hist)图像分析需要冲突检测跨像素受归约/同步限制
Bilateral(Bilat)图像分析规则跨像素受计算能力限制
图 4.32 吞吐计算内核的特征。括号内为本节使用的基准名称。研究作者表示,两台机器上的代码接受了同等程度的优化。出自 Lee 等(2010)的图表 1。

译注: 原表把 SAXPY 的应用写为“Dot product(点积)”,这里按原表保留。SAXPY 本身计算的是标量乘向量再加另一向量,并非点积。LBM 的应用栏“Time migration”也按原表保留,不根据缩写另行推定其应用。

总的来说,GTX 280 上的 Search 快 1.8 倍。缓存分块也有助于 Sort。虽然大多数程序员不会在 SIMD 处理器上运行 Sort,但可以用名为 split 的 1 位排序原语来实现它。不过,split 算法执行的指令远多于标量排序。因此,GTX 280 的速度仅为 Core i7 的 0.8 倍。缓存也有助于 Core i7 上的其他内核,因为缓存分块能让 SGEMM、FFT 和 SpMV 转为受计算能力限制。这再次说明了第 2 章所述缓存分块优化的重要性。

  • 聚集/散布。 如果数据分散在主存各处,多媒体 SIMD 扩展几乎帮不上忙;只有数据按 16 字节边界对齐时,才能获得最佳性能。因此,GJK 在 Core i7 上从 SIMD 获得的收益很小。如前所述,GPU 提供了向量体系结构具有、但 SIMD 扩展缺失的聚集/散布寻址。地址合并单元也发挥了作用:它把对同一 DRAM 行的访问合并起来,减少聚集和散布的次数。存储器控制器还会把访问同一 DRAM 页的请求放到一批中。这些机制相结合,使 GTX 280 上的 GJK 比 Core i7 快了惊人的 15.2 倍,超过图 4.30 中任何单一物理参数的比值。这进一步说明了聚集/散布对向量和 GPU 体系结构的重要性,而 SIMD 扩展恰恰缺少它。
内核单位Core i7-960GTX 280GTX 280 / Core i7
SGEMMGFLOP/s943643.9
MC十亿路径/s0.81.41.8
Conv百万像素/s125035002.8
FFTGFLOP/s71.42133.0
SAXPYGB/s16.888.85.3
LBM百万次查找/s854265.0
Solv帧/s103520.5
SpMVGFLOP/s4.99.11.9
GJK帧/s67102015.2
Sort百万元素/s2501980.8
RC帧/s58.11.6
Search百万次查询/s50901.8
Hist百万像素/s151725831.7
Bilat百万像素/s834755.7
图 4.33 在两个平台上测得的原始性能与相对性能。本研究仅将 SAXPY 用于测量存储器带宽,因此正确单位是 GB/s,而非 GFLOP/s。根据 Lee 等(2010)的图表 3 整理。
  • 同步。 Hist 的同步性能受原子更新限制。即使 Core i7 提供硬件取值并递增指令,原子更新仍占其总运行时间的 28%。因此,原文称“Hist 只比 GTX 280 快 1.7 倍”。Solv 对一批互相独立的约束进行少量计算,然后执行屏障同步。Core i7 受益于原子指令,以及一个即使此前对存储层次结构的访问尚未全部完成、也能保证结果正确的存储一致性模型。GTX 280 缺少这样的存储一致性模型,其版本需要由系统处理器启动某些批次,结果 GTX 280 的速度只有 Core i7 的一半。这说明,对某些数据并行问题,同步性能可能十分重要。

译注: “Hist 只比 GTX 280 快 1.7 倍”是原文的比较方向。根据上一页图 4.33,Hist 在 GTX 280 上为 2583 百万像素/s,在 Core i7 上为 1517 百万像素/s,实际是 GTX 280 约快 1.7 倍。

值得玩味的是,向量体系结构比 SIMD 指令早了几十年,其聚集/散布支持却对这些 SIMD 扩展的实际效果如此重要;在这项比较之前就有人作出了这一判断(Gebis 与 Patterson,2007)。Intel 研究人员指出,如果 Core i7 能提供更高效的聚集/散布支持,14 个内核中有 6 个就能更好地利用 SIMD。

这项比较还缺少一项重要信息:在两个系统上获得这些结果,各自需要付出多少努力。理想情况下,今后的比较应公开两边使用的代码,让其他人能在不同硬件平台上复现实验,并可能进一步改进结果。

比较的更新

此后的几年中,Core i7 与 Tesla GTX 280 的后继产品针对其弱点作出了改进。Intel 的 ACV2 增加了聚集指令,AVX/512 增加了散布指令,两者都出现在 Intel Skylake 系列中。NVIDIA Pascal 的双精度浮点性能达到单精度的一半,而非八分之一,还提供了快速原子操作和缓存。

译注: 原文写作“ACV2”和“AVX/512”。结合本章 4.3 节的扩展名称,分别应为 AVX2 和 AVX-512。

图 4.34 列出了这两款后继产品的特征。图 4.35 使用原论文 14 个基准中的 3 个比较性能——我们只找到了这 3 个的源代码。图 4.36 给出了两个新的 Roofline 模型。新 GPU 芯片比其前代快 15–50 倍,新 CPU 芯片比其前代快 50 倍,而新 GPU 比新 CPU 快 2–5 倍。

从历史来看,GPU 上 SGEMM 相对 CPU 的 3.9 倍加速,以及 CUDA 的可用性,对 Intel 和 NVIDIA 后来的发展都至关重要。SGEMM 是 Single precision GEneral Matrix Multiply(单精度通用矩阵乘法)的缩写,而矩阵乘法正是深度神经网络的核心计算。Alex Krizhevsky 是多伦多大学的博士生,曾选修一门使用 GPU 进行计算的研究生课程。2012 年,他在 GPU 上训练了名为 AlexNet 的神经网络,并将其提交给计算机视觉领域的 ImageNet 竞赛。AlexNet 不仅获得第一名,还大幅降低了视觉识别错误率。2012 年,AlexNet 是唯一参赛的 DNN;仅仅两年之后,全部参赛方案都依赖 DNN。这个结果推动 GPU 成为 DNN 的首选计算引擎,DNN 的重要性此后也迅速上升。

2012 年,Intel 的市值是 NVIDIA 的 10 多倍。在我们于 2024 年修订本章时,DNN 的日益普及使双方地位反转:NVIDIA 的市值已超过 Intel 的 30 倍。注意,2012 年 NVIDIA 并没有一个以 DNN 为目标的宏大计划。它通过 CUDA 尽可能向更多程序员开放 GPU 的潜力,让任何人都能围绕任何课题探索,使一个杀手级应用自行出现,由此获得了成功。

特征Intel Xeon Platinum 8180NVIDIA P100P100 / Xeon
处理单元数(核或 SM)28562.0
时钟频率(GHz)2.51.30.52
裸片面积N.A.610 mm²—
制造工艺Intel 14 nmTSMC 16 nm1.1
芯片功率(不是模块功率)80 W300 W3.8
晶体管数N.A.153 亿—
存储器带宽(GB/s)1997323.7
单精度 SIMD 宽度1680.5
双精度 SIMD 宽度840.5
单精度 SIMD 峰值(GFLOP/s)448010,6082.4
双精度 SIMD 峰值(GFLOP/s)224053042.4
图 4.34 Intel Xeon 8180 与 NVIDIA P100。最右列显示 P100 与 Xeon 的比值。原图注说明,这里的存储器带宽高于“图 4.28”,因为这里是 DRAM 引脚带宽,而“图 4.28”是在处理器处通过基准程序测得的带宽。

译注: 图 4.34 再次把带宽比较指向不含带宽数据的图 4.28,属于与图 4.30 同样的交叉引用疑误。

内核单位Xeon 8180P100P100 / Xeon原平台 GTX 280 / Core i7-960
SGEMMGFLOP/s349468272.03.9
DGEMMGFLOP/s169334902.1—
FFT-SGFLOP/s41018204.43.0
FFT-DGFLOP/s1908114.2—
SAXPYGB/s2075442.65.3
DAXPYGB/s2125562.6—
图 4.35 两个平台现代版本的实测原始性能与相对性能,以及原平台的相对性能。与原文所指的“图 4.30”一样,SAXPY 和 DAXPY 仅用于测量存储器带宽,因此正确单位是 GB/s,而非 GFLOP/s。

译注: 图 4.35 图注所指的“图 4.30”是硬件参数表;此前以 SAXPY 测量带宽的基准结果实际位于图 4.33。

图 4.36:新旧 CPU 与新旧 GPU 的 Roofline 模型。
图 4.36 较旧与较新的 CPU,以及较旧与较新的 GPU 的 Roofline 模型。每台计算机较高的曲线表示单精度浮点性能,较低的曲线表示双精度性能。

图内标记:Arithmetic Intensity=算术强度;SP=单精度;DP=双精度;纵轴 GFLOPS/s 按原图保留;Sapphire Rapids、Skylake、Nehalem、Hopper、Pascal、Tesla 均为产品或微体系结构名称。

译注: 原图右侧图例把 Pascal 较高的曲线标为 DP、较低的曲线标为 SP,与本图图注和前文 P100 的单、双精度峰值关系相反。

本节图 4.30、4.32、4.33 的完整出处:Lee, W.V., et al., 2010. Debunking the 100× GPU vs. CPU myth: an evaluation of throughput computing on CPU and GPU. In: Proc. 37th Annual Int’l. Symposium on Computer Architecture (ISCA), June 19–23, 2010, Saint-Malo, France.

表格阅读