皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

AMD 通过新设备端 PGO 提升更多 ROCm/HIP 性能

编译器配置引导优化 (PGO) 技术通过将特定于应用程序/工作负载的配置反馈给编译器以做出更明智的决策,从而很好地提高了 CPU 性能。AMD 编译器工程师一直在努力为他们的 AMDGPU LLVM 后端打造设备端 PGO,以允许 ROCm/HIP 工作负载实现更高的 GPU 性能。现在,一个初始的合并请求已向上游 LLVM 开放。

AMD 工程师 Sam Liu 提出了支持卸载分析的 LLVM 合并请求,最初的重点是使用 AMDGPU 后端进行均匀性感知优化。重点是 HIP/AMDGPU 工作负载,以进行 GPU 内核的配置引导编译器优化。

他在 LLVM 论坛上详细解释了他们的工作,发布了一分钟前发布的 RFC,寻求上游 LLVM 开发者社区的反馈。

本 RFC 提议为 HIP/AMDGPU 实现设备端的分析引导优化(PGO),使 GPU 内核能够进行分析引导的编译器优化。

主要贡献包括:

设备 PGO 基础设施——为 AMDGPU 设备代码提供仪器化、分析收集和消费的管道,仅使用标准 HIP API(无需 CLR 补丁)。

统一感知 PGO——一种安全机制,可在运行时检测分支是否统一(所有线程走相同路径)或发散,并据此控制某些优化。

均匀性检测至关重要,因为 GPU 执行遵循 SIMT(单指令,多线程)模型,其中标准 CPU PGO 关于“冷”代码路径的假设不成立。没有这个保护措施,PGO 指导的优化(如溢出放置)可能导致在发散分支上出现性能退化。”

RFC 帖子继续概述了将编译器 PGO 技术应用于 GPU 而不是 CPU 的传统挑战、不同的用例、HIPRTC 用于工作负载自适应优化,以及将 PGO 技术应用于静态 HIP 应用。对那些对编译器内部感兴趣的人来说,这是一篇冗长且技术性的阅读。

AMD 通过新设备端 PGO 提升更多 ROCm/HIP 性能

与此同时,这是初始代码的 LLVM 拉取请求:

主要特性:

– 波段聚合计数器增量以减少原子竞争
– 每个 TU 连续计数器分配以避免链接器重排序问题
– 均匀性检测以识别波统一分支与发散分支
– 基于均匀性的溢出放置以防止 GPU 上的 PGO 性能退化

均匀性检测至关重要,因为标准 PGO 可能导致 GPU 上出现严重的性能退化。当 PGO 将寄存器溢出移动到”冷”路径时,如果这些路径以发散方式进入(不同线程走不同路径),部分波内存访问会导致合并效果差,并可能造成高达 3.7 倍的减速。通过在性能收集时检测均匀性并控制溢出放置决策,我们实现了:

– 均匀分支上提升 12-14%的性能
– 在分支发散的情况下没有回归(门控防止了这个问题)

到目前为止很有希望,很令人兴奋地看到这项 PGO 工作对 AMD ROCm/HIP 的结果如何。

转自  AMD Squeezing Out More More ROCm/HIP Performance With New Device-Side PGO – Phoronix