AMD硬件分析工具简介

Introduction to profiling tools for AMD hardware — ROCm Blogs

**注意:** 本文博客内容此前为[ AMD实验室笔记]博客系列的一部分。

让代码功能正确只是基础,在许多行业中,还要求应用程序及其复杂的软件栈尽可能高效地运行以满足操作需求。这尤为具有挑战性,因为硬件在不断演进,代码可能需要进一步优化。实际上,许多应用程序开发者会构建基准测试,这些测试经过精心设计,旨在测量特定代码在类似操作环境中的性能,比如执行时间。换句话说:一个好的基准测试应该能代表实际需要完成的工作。这些基准测试非常有用,因为它们提供了对应用程序特性的洞见,使人能够发现潜在的瓶颈,这些瓶颈可能导致操作环境中的性能下降。

表面上看,基准测试似乎很简单,通常被理解为在不同机器上比较执行时间。然而,为了从新兴硬件中提取出最高性能,程序必须进行多次优化,不仅仅是测量执行时间:我们需要知道程序大部分时间花在哪里,哪些地方还可以进一步改进。异构系统中,程序在CPU和GPU上运行,增加了额外的复杂性。理解关键路径和内核执行变得尤为重要。因此,性能优化是基准测试过程中的必要组成部分。

借助AMD的分析工具,开发者能够深入了解应用程序是如何高效利用硬件的,并有效诊断导致性能不佳的潜在瓶颈。对于针对AMD GPU的开发者来说,根据特定的分析需求,可以使用多种工具。本文介绍了AMD提供的各种分析工具及其应用场景,从低级分析工具到全面的分析套件。

在这篇介绍性博客文章中,我们将简要描述以下用于应用程序分析的工具:

1. [ROC-profiler](Introduction to profiling tools for AMD hardware — ROCm Blogs)
2. [Omniperf](Introduction to profiling tools for AMD hardware — ROCm Blogs)
3. [Omnitrace](Introduction to profiling tools for AMD hardware — ROCm Blogs)
4. [Radeon™ GPU Profiler](Introduction to profiling tools for AMD hardware — ROCm Blogs)
5. [AMD uProf](Introduction to profiling tools for AMD hardware — ROCm Blogs)
6. [其他第三方工具](Introduction to profiling tools for AMD hardware — ROCm Blogs

术语表

以下术语用于本博客文章中:

术语描述

AMD “Zen” Core

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 的可移植计算内核/应用程序

Timeline Trace

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

Roofline Analysis

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

Hardware Counters

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

应使用哪些工具?

性能分析的第一步是确定适用的工具。无论是要在 CPU、GPU 还是两者上收集跟踪数据,理解内核行为,还是评估内存访问模式,对于 AMD 硬件的新用户来说,执行这样的分析可能看起来难以完成。我们首先确定每种性能分析工具支持的架构和操作系统。表 1 中几乎所有工具都支持 Linux® 发行版,并且随着 Instinct™ GPU 的日益普及,每个工具都有一些能力去分析在 CDNA™ 架构上运行的代码。然而,偏好 Windows 的用户将只能使用 AMD uProf来分析针对 AMD “Zen”架构处理器和 AMD Instinct™ GPU 的 CPU 和 GPU 代码,以及Radeon™ GPU Profiler来优化应用程序在 RDNA™ 架构上对图形管道(栅格化,着色器等)的使用。

AMD Profiling Tools

AMD “Zen” Core

RDNA™

CDNA™

Windows

Linux®

ROC-profiler

不支持

不支持

Omniperf

不支持不支持

不支持

Omnitrace

不支持

Radeon™ GPU Profiler

不支持

AMD uProf

不支持

★ 完全支持 | ☆ 部分支持

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

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

  1. 我应该将时间集中在哪里?:无论是对新应用程序进行基准测试,还是开始使用尚未进行性能分析的新软件包,建议首先识别应用程序中可能从快速优化中获益的热点。在 Linux® 平台上,Omnitrace支持收集 CPU 和 GPU 跟踪数据,并通过调用堆栈样本帮助识别主要热点。然而,在 Windows 上,可能需要根据目标架构选择 AMD uProfRadeon™ GPU Profiler

  2. 我硬件使用得如何?:第一步是获取工作负载特征,能够初步了解硬件的利用情况。比如,识别应用程序的哪些部分是内存约束还是计算约束。这可以通过屋顶线性能分析实现。通常,热点是可以很好理解的,重点在于识别几个关键内核或子程序的性能。目前,屋顶线性能分析只能通过 Omniperf在 AMD Instinct™ GPU 上和 AMD uProf在 AMD “Zen”架构处理器上实现。

  3. 我为什么会看到这种性能?:一旦确定了热点并对特定硬件的性能进行了初步评估,下一阶段可能涉及分析和收集硬件指标,以了解所观察到的性能来自哪里。在 AMD GPU 上,诸如 OmnitraceOmniperfAMD uProf等工具接口低级 ROC-profiler API,并利用底层的`rocprof`来收集 GPU 指标。我们不推荐直接使用 rocprof,因为处理文本/CSV 文件和特定硬件指标会带来额外的开销,除非有特定需求。对于 Windows 系统,建议使用 AMD uProfRadeon™ GPU Profiler

Quick Tip: Omni* 工具套件(OmniperfOmnitrace),在 Linux® 平台上提供易于使用的接口,用于研究代码在 AMD 硬件上的性能,应视为性能调优和基准测试的“首选”工具。

../../_images/when-to-use-diagram-vert.jpg

图 1:各种 AMD 性能分析工具的使用情况。

Profiling 工具概述

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

Omnitrace

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

在分析应用程序性能时,最好不要假设你知道性能瓶颈在哪里以及为何会发生。Omnitrace 是表征优化对应用程序端到端执行影响的理想工具,并/或查看在性能瓶颈期间系统上还发生了什么。

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

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

请参见 [官方 Omnitrace 文档] 以获取最新信息。用户被鼓励提交[问题报告]、需求请求并提供任何额外反馈。

Omniperf

Omniperf 是一款用于高性能计算(HPC)和机器学习(ML)工作负载的系统性能分析工具,专门用于AMD Instinct™ GPU。Omniperf 利用 问题报告 来收集硬件性能计数器。该工具基于所有经过批准的硬件计数器对 AMD Instinct™ MI200 和 MI100 架构进行系统性能分析。Omniperf 提供了高级性能分析功能,包括系统速度上限分析、IP模块速度上限、内存图表分析、屋顶线分析、基线对比等。

Omniperf 通过消除提供待收集计数器列表及分析原始CSV输出文件的文本输入文件的需要,简化了性能分析过程。这与 ROC-profiler 不同,Omniperf 自动化了一条命令收集所有可用的硬件计数器,并提供图形界面帮助用户理解和分析他们在AMD Instinct™ GPU上的计算负载瓶颈和压力点。需要注意的是,Omniperf 通过多次运行应用程序来收集硬件计数器,每次采集一组不同的指标。

../../_images/mca-diagram-example.png

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

简而言之,Omniperf 提供了有关特定GPU内核的硬件活动详细信息。它还支持基于Web的图形用户界面或命令行分析器,用户可以根据自己的偏好进行选择。有关Omniperf可用功能的最新信息,我们强烈建议读者查看官方 Omniperf 文档。我们鼓励用户提交 问题、功能请求,并欢迎社区的贡献和反馈。

ROC-profiler

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

rocprof 工具还依赖于 ROC-tracer 和 ROC-TX 库,使其能够收集 GPU 软件堆栈的时间线跟踪以及用户注释的代码区域。需要注意的是,`rocprof` 是一个仅限命令行的实用工具,因此输入和输出的格式为 txt 和 CSV 文件。这些格式提供了数据的原始视图,用户需要自己解析和分析。因此,`rocprof` 让用户能够完全访问和控制原始性能分析数据,但需要额外的努力来分析所收集的数据。

Radeon™ GPU Profiler

<Radeon™ GPU Profiler (RGP)> 是一款性能优化工具,主要用于传统的游戏和可视化开发者,以优化 AMD RDNA™ 硬件上的 DirectX 12 (DX12) 和 Vulkan™。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 编程,并使用 <Omniperf>, <Omnitrace> 或 <ROC-profiler> 等性能分析工具。

AMD uProf

AMD uProf(AMD 微观分析器)是一款适用于在 Windows、Linux® 和 FreeBSD 操作系统上运行的 x86 应用程序的软件分析工具,并提供 AMD “Zen” 架构处理器和 AMD Instinct™ MI 系列加速器独有的事件信息。AMD uProf 帮助开发者更好地了解应用程序性能的瓶颈并评估改进措施。
AMD uProf 提供以下功能:
- 性能分析:识别应用程序运行时性能瓶颈
- 系统分析:监控系统性能指标
- 屋顶线分析
- 功耗分析:监控系统的热量和功耗特性
- 能量分析:识别应用程序中的能量热点(仅限 Windows)
- 远程分析:连接到远程 Linux® 系统(从 Windows 主机系统),触发远程系统上的数据收集/转换,并在本地 GUI 中报告
- AMD uProf 3.6 提供对 AMD Instinct™ MI100 和 MI200 系列设备的 AMD CDNA™ 加速器的初步支持,并正在开发新功能 

其他第三方工具

高性能计算领域中的一些第三方分析工具已经支持ROCm™和AMD Instinct™ GPU。这让用户能够保持厂商独立的分析方法,提供易于使用和高级的功能套件,可能为各种架构提供统一的分析体验。对于已经熟悉这些工具的用户来说,这是另一种易于理解其在AMD硬件上工作负载性能的入门途径。

目前可用的第三方分析工具包括:
- [HPCToolkit](http://hpctoolkit.org/)
- [TAU](TAU - Tuning and Analysis Utilities -)
- [Vampir](Vampir 10.5)
- [CrayPat](仅限CrayOS平台) 

下一次

敬请期待我们将发布的系列文章,这些文章将深入探讨如何设置和使用这些可用的工具,附有完整的示例!

我们要感谢 Nicholas Curtis、Jakub Kurzak、Jonathan Madsen、George Markomanolis 和 Maria Ruiz Varela 提出的宝贵意见和建议。如果您有任何问题或评论,请通过 GitHub Discussions 联系我们。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

109702008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值