AMD 硬件的性能分析工具入门

最初发布于:
最后更新于:
Thomas H. Gibson's avatar
Thomas H. Gibson
通讯作者
Noah Wolfe's avatar
Noah Wolfe
通讯作者
Gina Sitaraman's avatar
Gina Sitaraman
作者
Suyash Tandon's avatar
Suyash Tandon
作者
Nicholas Curtis's avatar
Nicholas Curtis
审稿人
Jakub Kurzak's avatar
Jakub Kurzak
审稿人
Jonathan Madsen's avatar
Jonathan Madsen
审稿人
George Markomanolis's avatar
George Markomanolis
审稿人
Maria Ruiz Varela's avatar
Maria Ruiz Varela
审稿人

仅仅让代码在功能上正确并不总是足够。在许多行业中,还需要应用程序及其复杂的软件堆栈尽可能高效地运行,以满足运营需求。随着硬件的不断发展,这一点尤其具有挑战性,因此代码可能需要进一步调整。实践中,许多应用程序开发者会构建精心设计的基准测试,以在类似运营的环境中衡量特定代码的性能,例如执行时间。换句话说:一个好的基准测试应该能够代表实际需要完成的工作。这些基准测试很有用,因为它们能深入了解应用程序的特性,并能发现可能导致在运营环境中性能下降的潜在瓶颈。

表面上看,基准测试听起来足够简单,通常被解释为仅仅是在各种不同机器上进行执行时间的比较。然而,为了从新兴硬件中提取最大的性能,程序必须经过多次调优,并且需要的不仅仅是衡量原始执行时间:需要知道程序大部分时间花在哪里,以及是否可以进一步改进。异构系统,即程序在 CPU 和 GPU 上运行的系统,会带来额外的复杂性。理解关键路径和内核执行变得更加重要。因此,性能调优是基准测试过程中必不可少的一部分。

通过 AMD 的性能剖析工具,开发者能够深入了解应用程序对硬件的利用效率,并有效地诊断可能导致性能下降的潜在瓶颈。针对 AMD GPU 的开发者可以根据其特定的性能剖析需求选择多种工具。本文旨在介绍 AMD 提供的各种性能剖析工具,以及开发者为何要选择其中一个。本文涵盖了从底层性能剖析工具到广泛的性能剖析套件。

在本入门博文中,我们将简要介绍以下有助于应用程序分析的工具:

  1. ROC-profiler

  2. Omniperf

  3. Omnitrace

  4. Radeon™ GPU Profiler

  5. AMD uProf

  6. 其他第三方工具

术语

本博文使用的术语如下:

术语

描述

AMD “Zen” 核心

AMD 的 x86-64 处理器核心架构设计。用于 AMD EPYC™、AMD Ryzen™、AMD Ryzen™ PRO 和 AMD Threadripper™ PRO 处理器系列。

RDNA™

AMD 的传统 GPU 架构,针对游戏和可视化等图形密集型工作负载进行了优化。包括 RX 5000、6000 和 7000 系列 GPU。

CDNA™

AMD 的计算专用 GPU 架构,针对加速 HPC、ML/AI 和数据中心类型工作负载进行了优化。包括 AMD Instinct™ MI50/60、MI100 和 MI200 系列加速器。

HIP

一个 C++ 运行时 API 和内核语言,允许开发者从单一源代码为 AMD 和 NVIDIA GPU 创建可移植的计算内核/应用程序

时间线跟踪

一种性能剖析方法,收集并可视化计算内核的持续时间和设备之间的数据传输

Roofline 分析

一种与硬件无关的方法,用于量化工作负载在浮点计算和内存带宽方面饱和给定计算架构的能力

硬件计数器

单个指标,用于跟踪硬件中特定事件发生的次数,例如从 L2 缓存移动的字节数或执行的 32 位浮点加法

使用什么工具?

性能剖析的第一步是确定适合任务的工具。无论用户是想在 CPU、GPU 还是两者上收集跟踪信息,还是想了解内核行为,或者评估内存访问模式,对于 AMD 硬件的新用户来说,执行这种分析似乎都很令人生畏。我们首先识别 AMD 提供的每种性能剖析工具所支持的架构和操作系统。几乎表 1 中的所有工具都支持 Linux® 发行版,并且随着 Instinct™ GPU 的流行,每种工具都具备一定能力来剖析在 CDNA™ 架构上运行的代码。但是,那些偏爱 Windows 的用户将仅限于使用 AMD uProf 来剖析针对 AMD “Zen” 系列处理器和 AMD Instinct™ GPU 的 CPU 和 GPU 代码,以及 Radeon™ GPU Profiler,后者可以提供宝贵的见解来优化应用程序在 RDNA™ 系列 GPU 上对图形管道(光栅化、着色器等)的使用。

AMD 性能剖析工具

AMD “Zen” 核心

RDNA™

CDNA™

Windows

Linux®

ROC-profiler

不支持

不支持

Omniperf

不支持

不支持

不支持

Omnitrace

不支持

Radeon™ GPU Profiler

不支持

AMDuProf

不支持

★ 完全支持 | ☆ 部分支持

表 1:性能剖析器/架构支持和操作系统需求。

在任何平台上最终选择哪种工具取决于性能剖析的目标和所需的分析类型。为了简化,我们鼓励用户根据图 1 中的流程图所示的三个问题来思考他们的目标:

  1. 我应该把时间花在哪里?:无论是对新应用程序进行基准测试,还是开始使用尚未进行性能剖析的新软件包,建议首先识别应用程序中可能受益于快速优化的热点。在这种情况下,最好用户通过收集应用程序的时间线和跟踪信息来开始。在 Linux® 平台上,Omnitrace 可以收集 CPU 和 GPU 跟踪以及调用堆栈样本,以帮助识别主要热点。然而,在 Windows 上,用户可能需要在 AMD uProfRadeon™ GPU Profiler 之间进行选择,具体取决于目标架构。

  2. 我如何有效地利用硬件?:第一步是获得工作负载的特征分析,以一窥硬件的利用情况。例如,识别应用程序中哪些部分受内存或计算限制。这可以通过 Roofline 分析来完成。通常,热点是容易理解的,并且人们通常感兴趣的是识别少数关键内核或子例程的性能。目前,Roofline 分析仅通过 AMD Instinct™ GPU 上的 Omniperf 和 AMD “Zen” 系列处理器上的 AMD uProf 提供。

  3. 为什么我会看到这样的性能?:一旦确定了热点并完成了对特定硬件上性能的初步评估,下一阶段可能涉及性能剖析并收集硬件指标,以了解观察到的性能来自何处。在 AMD GPU 上,像 OmnitraceOmniperfAMD uProf 这样的工具会与低级 ROC-profiler API 进行交互,并且/或者在后台使用 rocprof 来收集 GPU 指标。我们不建议直接使用 rocprof,因为处理文本/CSV 文件和硬件特定指标会带来额外的开销,除非有特定需求。在 Windows 系统上,用户将不得不依赖于使用 AMD uProfRadeon™ GPU Profiler

快速提示:Omni* 工具套件(OmniperfOmnitrace),在 Linux® 平台上可用,提供了一个易于使用的界面来研究代码在 AMD 硬件上的性能,并应被视为性能调优和基准测试的“首选”性能剖析工具。

图 1:各种 AMD 性能剖析工具的用例。


性能剖析工具概述

在本节中,我们将简要介绍上述 AMD 工具和一些第三方工具包。

Omnitrace

Omnitrace 是一个全面的性能剖析和跟踪工具,适用于并行应用程序,包括用 C、C++、Fortran、HIP、OpenCL™ 和 Python™ 编写的、在 CPU 或 CPU+GPU 上执行的 HPC 和 ML 包。它能够通过二进制插桩、调用堆栈采样、用户定义区域和 Python™ 解释器钩子等任意组合来收集函数的性能信息。Omnitrace 支持在 Web 浏览器中对全面的跟踪进行交互式可视化,以及提供带有平均/最小/最大/标准差统计信息的高级摘要配置文件。除了运行时信息,Omnitrace 还支持收集系统级指标,例如 CPU 频率、GPU 温度和 GPU 利用率。进程和线程级指标,如内存使用情况、页面错误、上下文切换以及众多其他硬件计数器也包含在内。

在分析应用程序性能时,最好不要假设您知道性能瓶颈在哪里以及它们为什么会发生。Omnitrace 是表征优化对应用程序端到端执行影响最大的地方,以及/或查看性能瓶颈期间系统中发生的其他事情的理想工具。

../_images/omnitrace-timeline-example.png

图 2:Omnitrace 时间线跟踪示例。

有关最新信息,请参阅 官方 Omnitrace 文档。鼓励用户提交 问题、功能请求,并提供任何其他反馈。

Omniperf

Omniperf 是一个系统性能剖析器,用于使用 AMD Instinct™ GPU 的高性能计算 (HPC) 和机器学习 (ML) 工作负载。Omniperf 使用 AMD ROC-profiler 来收集硬件性能计数器。Omniperf 工具基于 AMD Instinct™ MI200 和 MI100 架构的所有批准的硬件计数器执行系统剖析。它提供高级性能分析功能,包括系统光速、IP 块光速、内存图表分析、Roofline 分析、基线比较等。

Omniperf 通过消除提供包含计数器列表的文本输入文件以及分析原始 CSV 输出文件(ROC-profiler 的情况)的需要,消除了性能剖析中的猜测。相反,Omniperf 在一个命令中自动化了所有可用硬件计数器的收集,并提供图形界面,帮助用户理解和分析其在 AMD Instinct™ GPU 上的计算工作负载的瓶颈和压力源。请注意,Omniperf 会在多个通道中收集硬件计数器,因此在每个通道中会重新运行应用程序以收集不同的指标集。

图 3:Omniperf 内存图表分析面板。

总而言之,Omniperf 提供了关于特定 GPU 内核硬件活动的详细信息。它还支持基于 Web 的 GUI 或命令行分析器,具体取决于用户的偏好。有关可用 Omniperf 功能的最新信息,我们强烈建议读者查阅 官方 Omniperf 文档。鼓励用户提交 问题、功能请求,我们欢迎社区的贡献和反馈。

ROC-profiler

ROC-profiler 主要作为访问和提取 GPU 硬件性能指标(也通常称为性能计数器)的低级 API。这些计数器量化了底层架构的性能,展示了计算管道和内存层次结构中的哪些部分正在被利用。一个名为 rocprof 的脚本/可执行命令随 ROCm™ 安装包一起提供,它提供了列出特定 GPU 可用的所有硬件计数器的功能,以及运行应用程序并在执行期间收集计数器。

rocprof 工具还依赖于 ROC-tracerROC-TX 库,使其能够收集 GPU 软件堆栈的时间线跟踪以及用户注释的代码区域。请注意,rocprof 是一个纯命令行实用程序,因此输入和输出采用 txt 和 CSV 文件格式。这些格式提供了数据的原始视图,并将解析和分析数据的负担转嫁给用户。因此,rocprof 为用户提供了对原始性能剖析数据的完全访问和控制,但分析收集到的数据需要额外的努力。

Radeon™ GPU Profiler

Radeon™ GPU Profiler 是一个性能工具,传统游戏和可视化开发者可以使用它来优化 DirectX 12 (DX12) 和 Vulkan™ 在 AMD RDNA™ 硬件上的性能。Radeon™ GPU Profiler (RGP) 是 AMD 的一项开创性低级优化工具。它使用自定义的、内置的硬件线程跟踪功能,提供 Radeon™ 图形的详细计时信息,使开发者能够深入检查 GPU 工作负载。这个独特的工具可以生成易于理解的可视化,展示您的 DX12 和 Vulkan™ 游戏在硬件层面如何与 GPU 交互。使用 Radeon™ Developer Panel 和公共显示驱动程序,对游戏进行性能剖析是一个快速而简单的过程。

请注意,Radeon™ GPU Profiler 也支持 OpenCL™ 和 HIP 应用程序,但它需要在 Windows 环境下的 AMD RDNA™ GPU 上运行。在 Windows 环境下运行 HIP 和 OpenCL™ 本身就是一个系列博文的主题,并且超出了当前对 HPC 应用程序的建议范围。对于 HPC 工作负载,我们建议在 Linux® 环境下的 AMD Instinct™ GPU 上使用 HIP 进行编程,并在这些 GPU 上使用 OmniperfOmnitraceROC-profiler 性能剖析工具。

AMD uProf

AMD uProf (AMD MICRO-prof) 是一个用于在 Windows、Linux® 和 FreeBSD 操作系统上运行的 x86 应用程序的软件性能剖析分析工具,并提供 AMD “Zen” 系列处理器和 AMD Instinct™ MI 系列加速器特有的事件信息。AMD uProf 使开发者能够更好地理解应用程序性能的限制因素并评估改进。

AMD uProf 提供:

  • 性能分析,用于识别应用程序的运行时性能瓶颈

  • 系统分析,用于监控系统性能指标

  • Roofline 分析

  • 功耗剖析,用于监控系统的热和功耗特性

  • 能耗分析,用于识别应用程序中的能耗热点(仅限 Windows)

  • 远程剖析,用于从 Windows 主机连接到远程 Linux® 系统(在 Windows 主机系统上),触发远程系统上的数据收集/转换并将在本地 GUI 中报告

  • AMD uProf 3.6 为 AMD Instinct™ MI100 和 MI200 系列设备提供了对 AMD CDNA™ 加速器的初步支持,并且新功能正在开发中。

其他第三方工具

在高性能计算领域,许多第三方性能剖析工具已经启用了对 ROCm™ 和 AMD Instinct™ GPU 的支持。这为用户提供了一个平台,可以采用独立于供应商的方法进行性能剖析,提供易于使用的高级功能套件,这些套件可能为多种架构提供统一的性能剖析体验。对于已经熟悉这些工具的用户来说,这是了解他们在 AMD 硬件上工作负载性能的另一个便捷切入点。

目前可用的第三方性能剖析工具包括:

下次

敬请关注,我们将发布一系列后续博文,深入介绍设置和使用这些可用工具的细节。并附带示例!

如果您有任何问题或评论,请在 GitHub 讨论区 与我们联系

Thomas H. Gibson's avatar

Thomas H. Gibson

通讯作者
Thomas Gibson 是 AMD 数据中心 GPU 软件解决方案部门的技术人员 (MTS) 软件系统设计工程师。他获得了伦敦帝国理工学院计算数学博士学位,专注于数值天气模拟代码的混合有限元离散化。博士毕业后,Thomas 继续从事关于天气应用的结构保持(“兼容”)有限元方法和多重网格预处理器的研究。此外,他还开始将研究重点转向使用 GPU 加速流体动力学代码,并开发了用于 GPU 上湍流/燃烧模型的高保真/低耗散不连续伽辽金方法。他目前的研究兴趣包括优化 C/C++/Fortran GPU 应用程序、迭代求解器和预处理、有限元离散化以及数值天气预报应用。
Noah Wolfe's avatar

Noah Wolfe

通讯作者
Noah Wolfe 是数据中心 GPU 软件解决方案部门的技术人员 (MTS)。他也是 Frontier 和 El Capitan 卓越中心 (COE) 的 AMD 成员,与应用程序团队合作,将 HPC 工作负载移植、分析和优化到 AMD 硬件上。他在 AMD 工作多年,处理过从宇宙学到粒子传输的各种 HPC 工作负载,并在从小规模的合成单进程测试到数千进程的大规模运行的各种规模上进行过测试。如果他不在电脑前,您会发现他在外面努力跟上他两个女儿的步伐。
Gina Sitaraman's avatar

Gina Sitaraman

作者
Gina Sitaraman 是数据中心 GPU 软件解决方案部门的技术总监(SMTS)软件系统设计工程师。她获得了达拉斯德克萨斯大学计算机科学博士学位。她在地震数据处理领域拥有十多年的经验,开发并优化了使用 CPU 集群上的混合 MPI + OpenMP 以及 GPU 上的 CUDA 或 OpenCL 的预处理、迁移和后处理应用程序。她在 AMD 的时间主要用于解决在大型 HPC 集群上运行的科学应用程序的优化挑战。
Suyash Tandon's avatar

Suyash Tandon

作者
Suyash Tandon 是 AMD 的高级技术人员 (SMTS),专注于高性能计算和科学应用程序在驱动当今最先进超级计算机的现代 AMD GPU 上的性能工程和优化。他在 GPU 加速数值算法和应用程序的研究和开发方面拥有 5 年以上的经验。Suyash 的技术兴趣在于计算物理学的交叉领域,尤其侧重于复杂流体的计算流体动力学、数值建模和高性能计算。他拥有密歇根大学的机械工程和科学计算博士学位,并且是自豪的 Wolverine。
Nicholas Curtis's avatar

Nicholas Curtis

审稿人
Nicholas Curtis 是 AMD 数据中心 GPU 软件解决方案部门的高级技术人员 (SMTS)。Nick 领导了 AMD 在移植和优化 Kokkos 的 HIP 后端方面的努力,并负责 LAMMPS 在 Frontier 卓越中心上的移植和优化。Nick 在康涅狄格大学获得了能源与热科学博士学位,在那里他研究了 GPU 加速反应流模拟。Nick 的研究兴趣范围广泛,从高级语言及其在 GPU 上的实现,到编译器和运行时分析与优化,底层 GPU 微基准测试/性能剖析,以及 GPU 硬件/运行时与 Linux 内核的交互。
Jakub Kurzak's avatar

Jakub Kurzak

审稿人
Jakub Kurzak 是数据中心 GPU 软件解决方案部门的高级技术人员 (SMTS) 软件系统设计工程师。他获得了德克萨斯州休斯顿大学计算机科学博士学位。他在并行计算方面拥有二十年的经验,在 GPU 计算方面拥有十年的经验。Jakub 在田纳西大学诺克斯维尔分校 (UTK) 的创新计算实验室 (ICL) 工作了 14 年,专注于密集线性代数软件。他在 AMD 的时间致力于将大规模科学应用程序移植和优化到 AMD 硬件上。
Jonathan Madsen's avatar

Jonathan Madsen

审稿人
Jonathan Madsen 是 AMD Research Audacious Software 部门的高级技术人员 (SMTS) 软件系统设计工程师。他是 Omnitrace 性能分析工具的首席开发人员,专注于提高 AMD 异构系统上运行软件的可观测性和性能分析能力。在加入 AMD 之前,他获得了德州 A&M 大学核工程博士学位,并在接下来的四年里担任劳伦斯伯克利国家实验室 (LBNL) 的美国能源部科学计算中心 (NERSC) 的应用程序性能专家。在 NERSC 工作期间,Jonathan 担任了 LBNL 在 C++ 标准化委员会的代表之一,在美国能源部 (DOE) 赞助的 GPU 软件移植研讨会上担任导师,开发了一个名为 timemory 的性能分析工具包,为 CERN 模拟工具包 Geant4 开发了多线程任务框架,并与多个 DOE 研究实验室的研究人员合作开发了一个针对所有主要 HPC 平台的性能可移植执行框架,名为 Kokkos。
George Markomanolis's avatar

George Markomanolis

审稿人
George Markomanolis 是 AMD 的首席技术团队成员软件开发工程师。他协助 AMD 的培训工作,并支持欧洲高性能计算 (HPC) 站点。他致力于理解和移植 AMD GPU 的代码。在他的当前和之前的职位上,他准备并进行了许多关于 HIP 移植、HIP 编程、GPU 基准测试以及评估可用于 AMD GPU 的各种编程模型的培训。他的研究兴趣包括 GPU 应用移植、基准测试、各种技术下 HPC 应用的性能评估/优化以及文件系统上的并行 I/O 分析。他是 IO500 委员会的联合开发者和成员。在加入 AMD 之前,他曾在多家超级计算中心工作。他于 2008 年在希腊雅典国立和卡波季斯强大学获得了计算科学理学硕士学位,并于 2014 年在法国里昂高等师范学院获得了计算机科学博士学位。
Maria Ruiz Varela's avatar

Maria Ruiz Varela

审稿人
Maria Ruiz Varela 是 AMD 的高级技术人员,专注于在 AMD GPU 上运行的 HPC 应用程序的验证、调试和质量。在加入 AMD 之前,Maria 负责英特尔美国能源部 Aurora Exascale 超级计算机 (A21) 的 RAS 系统验证。她拥有 HPC 集群验证、集成和执行方面的经验,以及为美国和墨西哥的汽车行业支持任务和安全关键应用程序的广泛软件工程经验。她发表了关于大规模并行处理、大型系统和用于嵌入式系统的新型非易失性存储器的容错领域的研究。她是 SC21、SC22 和 SC23 包容性委员会的成员。Maria 拥有特拉华大学计算机科学硕士学位。

相关视频

© . This site is unofficial and not affiliated with AMD.