数据中心/云端/边缘

利用 AWS Graviton3 上的 SVE 加速 NVIDIA HPC 软件

最新 NVIDIA HPC SDK 更新扩展了可移植性,现在支持基于 Arm 的 AWS Graviton 3 processor 。在本文中,您将学习如何使用 NVIDIA 编译器启用可缩放矢量扩展( Scalable Vector Extension , SVE )自动矢量化,以最大限度地提高运行在 AWS Graviton3 CPU 上的 HPC 应用程序的性能。

HPC SDK NVIDIA 软件包

NVIDIA HPC SDK 包括经过验证的编译器、库和软件工具,对于最大限度地提高开发人员生产力和为 CPU 、 CPU 或云构建 HPC 应用 至关重要。

NVIDIA HPC compilers 为 NVIDIA GPU 和多核 Arm 、 OpenPOWER 或 x86-64 CPU 启用跨平台 C 、 C ++和 Fortran 编程。对于使用 OpenMP 、 OpenACCCUDA 以 C 、 C ++或 Fortran 编写的 HPC 建模和仿真应用程序,这些都是理想的选择。

例如,与 GCC 12.1 相比,使用 NVIDIA HPC 编译器编译时, AWS Graviton 3 的 SPEC CPU ® 2017 基准分数预计增加 17% 。

  Speedup (est.) Ratio (est.) Seconds (est.)
    NVHPC GCC 12.1 NVHPC GCC 12.1
64 Copy FPRate 1.04 263 254 501 519
64 Thread FPSpeed 1.17 188 161 73.6 85.9
表 1.SPEC CPU 2017 年估算

编译器还可以与优化的 NVIDIA math libraries 、通信库以及性能调优和调试工具完全互操作。这些加速的数学库最大限度地提高了普通 HPC 算法的性能,而优化的通信库支持基于标准的可扩展系统编程。

集成的性能分析和调试工具简化了 HPC 应用程序的移植和优化,而容器化工具可以方便地在本地或云中部署。

臂和 AWS 重力 3

AWS Graviton3 于 2022 年 5 月推出,是 AWS 基于 Arm 的 CPU 。 Arm 体系结构具有传统的能效和对高内存带宽的支持,使其成为云和数据中心计算的理想选择。 Amazon 报导

Amazon EC2 C7g 实例由最新一代 AWS Graviton3 处理器提供支持,为计算密集型工作负载提供了 Amazon EC2 中最佳的性价比。 C7g 实例非常适合 HPC 、批处理、电子设计自动化( EDA )、游戏、视频编码、科学建模、分布式分析、基于 CPU 的机器学习( ML )推理和广告服务。与基于第六代 AWS Graviton2 的 C6g 实例相比,它们的性能提高了 25% 。

与 AWS Graviton2 相比, ANSYS 将 AWS Graviton3 的性能提高 35% 作为基准 。一级方程式模拟速度也提高了 40% 。自推出 Arm Neoverse 产品线以来,基于 Arm 的 CPU 一直在提供重大创新和性能增强,当时 Neoverses N1 核心 超过绩效预期30% 。

与 Arm 支持新计算技术的历史保持一致, AWS Graviton3 的特点是 DDR5 内存和 SVE 到 Arm 体系结构。

Amazon EC2 C7g 实例是云中第一个使用 DDR5 内存的实例,与 DDR4 内存相比,它提供了 50% 的内存带宽,从而实现了对内存中数据的高速访问。充分利用所有内存带宽的最佳方法是使用最新的矢量化技术: Arm SVE 。

SVE 架构

除了是第一个提供 DDR5 的云托管 CPU 之外, AWS Graviton3 也是第一个在云中使用 SVE 的。

SVE 首次引入富士通 A64FX CPU ,为 RIKEN Fugaku 超级计算机供电。当 Fugaku 推出时,它打破了所有当代 HPC CPU 基准,并在两年内自信地名列 TOP500 超级计算机榜首。

SVE 和高带宽内存是 A64FX 的主要设计特点,是 HPC 的理想之选,而 AWS Graviton3 处理器中也有这两个特点。

SVE 是 Arm 体系结构的下一代 SIMD 扩展。它可以使用 CPU 实现中的一系列可能值实现灵活的矢量长度。矢量长度可以从最小 128 位到最大 2048 位不等,增量为 128 位。

例如,富士通 A64FX 以 512 位实现 SVE ,而 AWS Graviton3 以 256 位实现。与其他 SIMD 体系结构不同,尽管硬件矢量位宽度不同,但相同的汇编代码在两个 CPU 上运行。这称为矢量长度无关( VLA )编程。

VLA 代码具有高度的可移植性,可以使编译器生成更好的汇编代码。但是,如果编译器知道目标 CPU 的硬件矢量位宽度,它可以针对特定的体系结构进行进一步优化。这是矢量长度特定( VLS )编程。

SVE 对 VLA 和 VLS 使用相同的汇编语言。唯一的区别是,编译器在生成代码时可以自由地对数据布局、循环跳闸计数和其他相关特性进行附加断言。这会产生高度优化的、特定于目标的代码,从而充分利用 CPU 。

SVE 还引入了一系列功能强大的高级功能,非常适合 HPC 和 ML 应用:

  • 收集加载和分散存储指令允许对结构数组和其他非连续数据进行矢量化操作。
  • 推测性矢量化支持对包含控制流的字符串操作函数和循环进行 SIMD 加速。
  • 水平和序列化矢量操作有助于数据缩减,并有助于优化处理大型数据集的循环。

SVE 不是 NEON 指令集的扩展或替代,后者也可在 AWS Gravition3 中使用。 SVE 经过重新设计,以提高 HPC 和 ML 的数据并行性。

使用 NVIDIA HPC 编译器最大限度地提高 Graviton3 性能

编译器自动矢量化是利用 SVE 的最简单方法之一, NVIDIA HPC 编译器在 22.7 版本中添加了对 SVE 自动矢量化的支持。

为了最大限度地提高性能,编译器执行分析以确定要生成的 SIMD 指令。 SVE 自动矢量化使用目标特定信息,根据 CPU 核的矢量位宽度生成高度优化的矢量长度特定( VLS )代码。

要启用 SVE 自动矢量化,请为目标 CPU 指定适当的 -tp 体系结构标志: -tp = neoverse-v1 。如果不指定 -tp 选项,则假定应用程序将在编译它的同一系统上执行。

在 Graviton3 上使用 NVIDIA HPC 编译器编译的应用程序会自动充分利用 CPU 的 256 位 SVE SIMD 单元。 Graviton3 还向后兼容 -tp = neoverse-n1 选项,但仅在其 128 位 NEON SIMD 单元上运行矢量代码。

NVIDIA HPC SDK 入门

NVIDIA HPC SDK 提供了一个全面且经验证的软件堆栈。它使 HPC 开发人员能够在 NVIDIA 平台和 AWS Graviton3 等高性能系统上创建和优化应用程序性能。

通过提供广泛的编程模型、库和开发工具,可以针对专用硬件高效开发应用程序,从而在 NVIDIA GPU 和支持 SVE 的处理器(如 AWS Graviton3 )等系统中实现最先进的性能。

有关详细信息,请参阅以下资源:

 

Tags