AMD 通过新型设备端 PGO 技术进一步提升 ROCm/HIP 性能

发表于:昨天 22:07 1
AMD 通过新型设备端 PGO 技术进一步提升 ROCm/HIP 性能



编译器配置文件引导优化(PGO)技术通过将特定应用/工作负载的配置文件反馈给编译器,使其能够做出更明智的决策,从而显著提升 CPU 性能。现在,AMD 的编译器工程师正在为他们的 AMDGPU LLVM 后端开发设备端 PGO 技术,旨在让 ROCm/HIP 工作负载获得更高的 GPU 性能。目前,一个初步的合并请求已向上游 LLVM 提交。

AMD 工程师 Sam Liu 提交了 LLVM 合并请求,以支持卸载性能分析,初期重点是与 AMDGPU 后端结合的统一性感知优化。该工作的核心是针对 HIP/AMDGPU 工作负载,对 GPU 内核进行配置文件引导的编译器优化。他在几分钟前发布的 LLVM Discourse 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 应用。对于对编译器内部感兴趣的读者来说,这是一篇冗长且技术性强的文章。



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

关键特性:

  • 波聚合计数器增量以减少原子争用
  • 每个翻译单元的连续计数器分配以避免链接器重排序问题
  • 统一性检测以识别波统一与发散分支
  • 统一性感知溢出放置以防止 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
收藏
送赞
分享

发表回复