屋顶线模型和高性能计算基准剖析
简介
高性能计算的计算性能在很大程度上取决于处理元件的峰值性能和内存带宽之间的平衡。虽然外部内存通常是 HPC 中的限制因素,但相对简单的屋顶线模型可以为 HPC 性能的约束和瓶颈提供洞察力。它可能无法提供特定工作负载的准确性能数据,但却能为程序员和硬件架构师提供有关优化点的实用见解。我们在 ARM 和 X86 节点(服务器)上运行了具有代表性的基准 STREAM、HPCG 和 HPL。我们将供应商公布的峰值性能和内存带宽与通过 STREAM、HPCG 和 HPL 收集的配置文件数据进行比较,以证明简单屋顶线模型的有效性。HPCG 和 HPL 基准测试结果表明,HPCG 受内存限制,而 HPL 基准测试受计算限制。屋顶线模型还显示了每种架构在内存带宽和峰值计算性能之间的平衡点。
引言
超级计算机的应用领域正在从传统的科学和工程领域扩展到大数据和人工智能领域。对超级计算机更高性能的需求不断增长,推动了新型超级计算机架构与高性能加速器、内存架构和网络的增强。计算机系统的计算性能取决于处理器的运行频率、并行计算处理器和线程的数量以及数据宽度。此类处理器需要从主存储器读/写数据流才能获得最高性能。主内存带宽(数据吞吐量)取决于 DIMM(双列直插式内存模块 dual in-line memory module)或 HBM(高带宽内存 High Bandwidth Memory)的时钟速度和通道数量。并行计算范式需要用于多个socket和节点的事实标准 MPI、用于多线程编程的 OpenMP 以及用于利用加速器的 OpenCL。
屋顶线模型使用两个基本参数,即峰值计算性能和峰值内存带宽。因此,屋顶线模型可能无法显示准确的性能数字,但可以显示一种架构与其他架构相比的相对性能预期。顶线有两个区域,一个是内存边界,CPU 在该边界工作时内存带宽最大,计算性能较低;另一个是计算边界,CPU 在该边界工作时计算性能最大,内存带宽较低。
屋顶线模型使用的峰值计算性能和峰值内存带宽是理想性能。我们预计实际性能会低于峰值计算性能和最大内存带宽。有必要测量实际计算性能和内存带宽,以验证屋顶线模型所显示的趋势。有一些 HPC(高性能计算机)基准程序可以估算最大计算性能和最大内存带宽。HPL(高性能 LINPAC High Performance LINPAC)可估算最大计算性能,STREAM 可估算最大内存带宽。
HPCG(高性能共轭梯度 High-Performance Conjugate-Gradient)估算了稀疏矩阵计算在最大内存带宽下的计算性能。我们表明,HPL、HPCG 基准结果位于 ARM 和 X86 节点的顶线。STREAM 对内存带宽的估算使理想顶线成为经验顶线,HPCG 和 HPL 在此顶线上的计算性能证明,顶线是计算机系统计算性能的参考值。
屋顶线模型
屋顶线模型
屋顶线 x 轴为 AI(算术强度),即运算次数(W)与内存流量(Q)之比,轴的单位为 FLOPs/字节。
屋顶线的 y 轴显示在给定 AI 条件下的预期性能。最佳运行条件位于下图所示的屋顶线图的山脊处。屋顶线模型由两条蓝色直线组成,分别是平直线和线性下降线。x 轴和 y 轴为对数刻度,y 轴的单位为性能 FLOPS,即 FLOPs/sec 或 FLOP/sec。在最佳 AI(AIO)时,计算性能的 y 轴值即为 CPU 的峰值计算性能(PP)。当 AI 值达到 在 AIO 的右侧,最大可实现性能受到峰值性能的限制,而在 AIO 的左侧,预期性能在下降。蓝线下方区域是基准结果的允许范围,由经验计算性能和内存带宽决定。
节点性能
我们在 ARM 和 X86 节点上运行了三个基准程序。ARM 节点有两个 Cavium ThunderX2 CPU(ARMv8 内核 9980,有 28 个内核、4 个线程和 2 个 SIMD(单指令多数据)),主频为 2.2GHz。ARM 节点的内存带宽为 2.66GByte/秒,采用 16 通道 DIMM。X86 节点有两个至强 E5-2690 v4 CPU,其中有 14 个内核(2 个线程)、8 个 AVX2(高级矢量扩展)和 FMA(融合乘法器)3,工作频率为 2.6GHz,内存带宽为 2.4Gbyte/sec,有 8 个 DIMM 通道。表 1 总结了两个节点的峰值性能和峰值内存带宽。
尽管 ARM 节点有 16 个 DIMM 通道,但我们只使用了 16 个 DIMM 中的 8 个通道。X86 节点则使用了 8 通道 DIMM 的全部容量。
具有代表性的超级计算机 CPU 和 GPU 的顶线
目前 TOP500 榜单中速度最快的超级计算机 Fugaku 使用的是基于 ARM 内核的 A64FX CPU。该 CPU 拥有 3.377GFLOPS 的计算性能和 1.024TB/sec 的 HBM2(高带宽内存)。英伟达公司的 A100 GPU 被超级计算机广泛用于人工智能应用。它的计算性能和内存带宽分别为张量核 19.5TFLOPS 和 HBM2e 1.935TB/sec 。英特尔的 KNL 7250 是 Nurion 的 CPU,它是 KISTI 的第 5 台超级计算机。它的计算性能和内存带宽分别为 3.072TFLOPS 和 490GB/sec 的 MCDRAM(多通道 DRAM)。我们注意到,超级计算机的处理器广泛使用 HBM 等高带宽内存。表 2 总结了这些处理器的计算性能、内存带宽和 AIO。使用高带宽内存后,代表性处理器的 AIO 范围限制在 3 到 10 之间。
参考资料
- 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
- 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
- python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html
STREAM、HPCG 和 HPL 基准
HPCG 和 HPL 基准程序是衡量超级计算机性能的参考。STREAM 基准程序测量超级计算机的内存带宽。HPCG 的稀疏数据计算需要主存储器的全部内存带宽,而全部计算性能的一小部分需要主存储器的全部内存带宽。HPL 的密集数据计算需要比内存读/写速度更快的计算性能。我们在系统上运行基准程序,以获得系统主内存的实际带宽,以及 HPCG 的低人工智能和 HPL 的高人工智能下的计算性能。我们可以根据测量结果绘制修改后的屋顶线斜率图。基准(STREAM、HPCG、HPL)安装 Arm 节点需要 armclang 和 armpl,X86 节点需要 icc 和 MKL(数学内核库)。我们安装了相关的编译器、库和 MPI(消息传递接口),以便并行运行多进程。STREAM、HPCG 和 HPC 基准已安装,并在 MPI 安装后运行。
STREAM 基准
STREAM 基准通过复制、缩放、加法和三元组 4 个计算功能来测量内存带宽。STREAM 需要存储 3 个向量。我们将向量大小适当设置为大于 L3 缓存大小。一个向量的大小在编译条件中定义。基准运行需要线程数而不是进程数来获得 STREAM 基准结果。STREAM 基准结果在 ARM 节点为 100GB/s,在 X86 节点为 120GB/s,低于每个节点峰值内存带宽的 171GB/s 和153.6GB/s。
值得注意的是,两个坐标轴都是对数刻度,性能差距可能比看上去的要大。ARM 节点与理想带宽的经验带宽比为 58.4%,低于 X86 节点的 78.1%。”
- HPCG 基准测试
HPCG 基准测试有四个子程序,分别是点乘 (DDOT)、两比例向量加法 (WAXPBY)、稀疏矩阵-向量乘法 (SpMV) 和多网格矩阵 (MG)。基准结果还显示了 STREAM 的内存带宽。本域维度 nx、ny 和 nz 以及进程维度 nxp、nyp 和 nzp 由 hpcg.dat 和 mpirun 命令参数定义。矩阵的行数由 nxnxp + nynyp+nz*nzp,矩阵的非零数约为矩阵行数的 27 倍。在参数 OMP NUM THREADS=1 的情况下,我们设置进程数运行基准。
-
DDOT 函数有两个长度为 N 的向量输入和一个标量输出,计算操作有 N 次乘法和加法。因此,DDOT 的人工智能为 2N/(28*N+1),其中 8 是双精度数据的字节数。AI 的近似值为 0.125。
-
WAXPBY 有两个向量输入和一个向量输出,向量长度为 N,计算次数为 2N 次乘法和 N 次加法。WAXPBY 的人工智能为 3N/(38*N)=0.125
-
SpMV 有四个输入:一个长度为 Nsp 的稀疏矩阵、一个长度为 N 的矢量和一个长度为 N 的行指针,以及一个长度为 N 的矢量输出。算术运算次数为 Nsp 加法和乘法。SpMV 的 AI 上限为 2NSP/(8N+8N+4N+8NSP)≈0.25,其中 8 个字节为双精度数据字节,4 个字节为整数精度行指针字节。在 HPCG 基准中,Nsp 约为 N 的 27 倍。
HPCG 基准显示了 DDOT、WAXPBY、SpMV 和 MG 的计算性能随进程数增加而增加的向量和矩阵大小。ARM 节点的 HPCG 平均计算性能分别为 7.5GFLOPS、11GFLOPS 和 17.6GFLOP。X86 节点 HPCG 的平均计算性能分别为 8GFLOPS、10.5GFLOPS 和 17GFLOPS。HPCG 基准结果:
HPCG AI 小于 0.25,HPCG 计算性能小于节点峰值计算性能的 1.5%,这揭示了内存约束的特性。
HPL 基准测试
HPL 基准测试的功能是使用 LU(下和上)分解算法求解矩阵计算。通过随机生成一个矩阵(A)和一个解向量(x)就能通过线性方程得到另一个向量 y:y=Ax。为了并行处理 HPL,应将原始矩阵 A 分解成许多较小的矩阵。MPI 将子矩阵分配给特定的处理器,从而得到部分矩阵解。
- DGEMM 的人工智能与 HPL 的人工智能相当[9]。DGEMM 包括矩阵-矩阵乘法、标量-矩阵乘法和二乘加法。DGEMM 的数据读写量约为 4N2,输入 3 个矩阵,输出 1 个矩阵。矩阵乘法和加法的运算量约为 N3。DGEMM 的人工智能约为 2N3/32N2=N/16。在 NB=256 时,DGEMM 的人工智能约为 16。
矩阵设置的参数有 N、NB、P 和 Q,分别是矩阵大小、子矩阵大小、子矩阵的行和列处理器分配。最佳 N 值为 α8N2 字节,其中 α 约占总主内存的 85%的存储空间。已知最佳 NB 在 32 到 256 之间 。P 和 Q 是满足 NP=PQ 的少数集合(NP 是节点的处理器数量)。通过设置 N、NB、P 和 Q,我们运行 HPL 以获得节点的计算性能。N 为 16 万,取自节点 256GB 的主内存大小。ARM 节点的 NB 分别为 100、200、300,X86 节点的 NB 分别为 100、250、500。
ARM (左)和 X86 (右)节点的 HPL 基准结果 ARM 和 X86 sever 分别为 56 和 28。P, Q 对的集合为 (7,8)、(4,14)、(2,28)、(1,56)、(4,7)、(2,14)、(1,28) 。HPL 基准结果显示,最佳 NB 分别为 250 和 200,ARM 和 X86 节点的最佳 P、Q 对分别为 7,8 和 4,7。ARM 和 X86 节点的最大计算性能分别为 680GFLOPS 和 980GFLOPS。ARM 节点和 X86 节点的性能效率比分别为 70% 和 85%。
HPL 在 AI 15.6 和 12.5 时的计算性能接近节点的峰值性能。蓝色屋顶线代表 ARM 节点,红色屋顶线代表 X86 节点。HPCG 基准结果的 AI 小于 0.25,而 HPL 基准结果约为 12.5。因此,HPCG 基准是内存绑定的,HPL 是计算绑定的。
总结与后续工作
我们运行了 STREAM、HPCG 和 HPL 三个基准,以获得实际内存带宽、内存约束和计算约束的计算性能。ARM 和 X86 节点的基准测试结果取决于编译器和库。当节点在特定处理器编译器和库中运行时,会获得更好的计算性能。ARM 节点在使用 armclang 编译器和 armpl 库时运行得更好,X86 节点在使用 icc 编译器和 MKL 库时运行得更好。根据 HPL 的最佳 NB,峰值性能和峰值内存带宽的最佳 AI(AIO) 在 2 到 16 Flops/Byte 之间。
这个数字与测试节点 CPU 的 AIO 范围以及超级计算机的代表性 CPU 和 GPU 相吻合。
如果我们采用 HBM 或 MCDRAM 等宽带内存,内存绑定工作负载的计算性能应该会有所提高。此外,处理器内部有带宽较宽的高速缓冲存储器,因此我们可以利用高速缓冲存储器提高计算性能,并利用分层内存模型更精确地估算计算性能。当今的超级计算机拥有成千上万个计算节点,并通过高带宽互连实现更高的性能。在未来的研究中,我们可能会将当前的屋顶线模型扩展到分层模型,并分析通信带宽与内存带宽的影响。