最新 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 、 OpenACC 和 CUDA 以 C 、 C ++或 Fortran 編寫的 HPC 建模和仿真應用程序,這些都是理想的選擇。
例如,與 GCC 12.1 相比,使用 NVIDIA HPC 編譯器編譯時, AWS Graviton 3 的 SPEC CPU ? 2017 基準分數預計增加 17% 。
編譯器還可以與優化的 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 )等系統中實現最先進的性能。
關于作者
John Linford 博士是 NVIDIA 的首席技術經理,專注于開發 CPU 軟件生態系統。 John 此前曾擔任 HPC 工程部主任。 John 擁有近二十年的一線 HPC 應用、系統和優化經驗,尤其喜歡與新興技術和極端規模的系統合作。約翰的總部設在德克薩斯州奧斯汀。
Scott Manley 是一名編譯器優化工程師,也是 NVIDIA HPC SDK 的自動矢量化主管。 Scott 的整個職業生涯都致力于矢量化和 HPC 編譯器。他曾在 Cray 編譯環境( CCE )工作,并在都柏林三一學院獲得博士學位,主要致力于優化 SIMD ISAs 的使用。
Graham Lopez 在 NVIDIA 領導高性能計算編譯器的產品管理。此前,他曾與應用程序合作,以在當前和未來的領先級計算設施上大規模運行。除了直接參與 HPC 應用程序之外, Graham 還發表了編程模型、計算科學、異構系統的應用程序加速和基準測試以及低級通信 API 等領域的研究成果。格雷厄姆過去三年一直是 ISO C ++標準委員會的成員。
審核編輯:郭婷
-
NVIDIA
+關注
關注
14文章
4978瀏覽量
102987 -
編譯器
+關注
關注
1文章
1623瀏覽量
49108
發布評論請先 登錄
相關推薦
評論