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 uProf 或 Radeon™ GPU Profiler。

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

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

Quick Tip: Omni* 工具套件(Omniperf和 Omnitrace),在 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 联系我们。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1552032.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Linux gadget 模拟触控屏 支持多点触控

通过gadget命令行生成hid设备 下面xxx自己根据需要修改&#xff0c;例如VID,PID&#xff0c;产品名称 const char *INSTALL_GADGET_CMDS[] {"modprobe libcomposite","mkdir /sys/kernel/config/usb_gadget/g1","echo xxx > /sys/kernel/config/…

华为 海思22AP10(SS524)H.265 编解码处理器用户指南

1.1 概述 22AP10 是针对多路高清 / 超高清&#xff08; 1080p/4M/5M/4K &#xff09; DVR 产品应用开发的新一代专 业 SoC 芯片。 22AP10 集成了 ARM Cortex-A7 四核处理器和性能强大的 图像分析工具 推理引擎&#xff0c;支持多种智能算法应用。同时&#xff0c; 2…

智能招聘系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;企业管理&#xff0c;招聘信息管理&#xff0c;应聘信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;招聘信息&#xff0c;我的 开发系统&…

启动服务并登录MySQL9数据库

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) Windows平台下安装与配置MyS…

QSqlDatabase在多线程中的使用

Qt中多线程使用数据库_qt数据库管理类支持多数据库,多线程-CSDN博客 1. 代码&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError>…

Chainlit集成LlamaIndex并使用通义千问实现和数据库交互的网页对话应用(text2sql)

前言 我在之前的几篇文章中写了如何使用Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用&#xff0c;但是发现Langchain的几种和数据库交互的组件都不够让我满意&#xff0c;虽然已经满足了大部分场景的需求&#xff0c;但是问题还是很多&#xff0c;比如…

无人机协同作业中的多网融合技术详解

无人机协同作业中的多网融合技术是一种复杂且高效的技术体系&#xff0c;它旨在通过整合多种通信网络和技术&#xff0c;实现多架无人机之间的无缝协同作业&#xff0c;从而提升任务执行效率、增强系统可靠性和扩展应用场景。以下是对该技术的详细解析&#xff1a; 一、多网融…

【C++】多态练习题(面试常考)

学习之前&#xff0c;建议观看&#xff1a;【C】多态&#xff1a;深度剖析&#xff08;多态、虚函数、抽象类、底层原理&#xff09;_c 多态和虚函数,虚函数的实现原理-CSDN博客https://blog.csdn.net/2301_80555259/article/details/142178677?spm1001.2014.3001.5501 一.概念…

解决 Macos下 Orbstack docker网络问题

两种解决方法&#xff0c;第一种开代理 参考 —— 但是我这一种没成功&#xff0c;第二种方法是换镜像源 { "registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://mirrors.tencent.com&q…

《向量数据库指南》——Milvus 和 Fivetran 如何为 AI 构建基础

哈哈,说起 Milvus 和 Fivetran 如何为 AI 构建基础,这可真是个有意思的话题!来,让我这个向量数据库领域的“老司机”给你详细讲解一番,保证让你听得津津有味,还能学到不少干货! Milvus 和 Fivetran:AI 搜索解决方案的黄金搭档 在当今这个数据爆炸的时代,AI 已经成为…

使用MTVerseXR SDK实现VR串流

1、概述​ MTVerseXR SDK 是摩尔线程GPU加速的虚拟现实&#xff08;VR&#xff09;流媒体平台&#xff0c;专门用于从远程服务器流式传输基于标准OpenXR的应用程序。MTVerseXR可以通过Wi-Fi和USB流式将VR内容从Windows服务器流式传输到XR客户端设备, 使相对性能低的VR客户端可…

【10000字pandas数据可视化超全笔记整理】Numpy Pandas | 常用API介绍 | 缺失值处理 matplotlib数据可视化介绍

文章目录 Numpy 部分NumPy的数组类被称作ndarray&#xff0c;通常被称作数组。属性创建方法内置函数运算基本运算矩阵运算 Pandas部分总述Serise 对象创建属性方法运算 DataFrame属性索引操作添加删除插入列 保存读取文件保存读取 数据加载分组聚合语法格式: 基本绘图 数据组合…

Vue3 Typescript 前端页面5min后无操作自动退出至登录页面

效果图&#xff1a; 前端页面5min无操作&#xff0c;弹出弹窗提示用户系统将在30s后退出&#xff0c;30s后系统自动退出至登录页面。 <template><div><div class"f-z-20-px">{{ remainTime }}秒后无操作将退出</div><el-dialogtitle&quo…

C语言 getchar 函数完全解析:掌握字符输入的关键

前言 在C语言中&#xff0c;getchar 是一个非常实用的函数&#xff0c;用于从标准输入流&#xff08;通常是键盘&#xff09;读取单个字符。这对于处理文本输入非常有用&#xff0c;尤其是在需要逐个字符处理的情况下。本文将深入探讨 getchar 函数的用法和特点&#xff0c;并…

【Ubuntu】git

文章目录 1.配置SSH key2. 基础知识操作命令1分支branch 如果对git命令使用不熟悉&#xff0c;推荐一个非常棒的git在线练习工具 Learn Git Branching。 https://m.runoob.com/git/git-basic-operations.html 1.配置SSH key ssh-keygen -t rsa -C "YOUR EMAIL"完成…

软考中级网络规划设计师已过,分享一些备考心得

据说通过率只有15%左右&#xff0c;蛮低&#xff0c;但我还是一次过了。 其实参加考试的人不多&#xff0c;考场上来的人也就一半&#xff0c;很多人报名之后弃考了。。。所以我觉得最重要的还是坚持。 网规不像高项是热门科目&#xff0c;参考资料很多&#xff0c;自学的话某…

SpringBoot3响应式编程全套-Reactor核心

目录 传送门前言一、前置知识1、Lambda2、Function3、StreamAPI4、Reactive-Stream 二、Reactor1、快速上手1.1、介绍1.2、依赖 2、响应式编程2.1、阻塞是对资源的浪费2.2、异步可以解决问题吗&#xff1f;2.3、从命令式编程到响应式编程 三、核心特性1、Mono和Flux2、subscrib…

在 AI 大模型时代,了解 Agentic RAG 的核心理念至关重要

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ Agentic RAG&#xff0c;即基于智能体的检索增强生成技术&#xff0c;融合了 AI Agent 与 RAG 技术的优势。该技术通过集成 AI Agent&#xff0c;显著提升了 RAG 系统的智能水平与自主能力&#xff0c;…

1.7 编码与调制

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言前言1 基本术语2 常用的编码方法2.1 不归零编码2.2 归零编码2.3 反向归零编码2.4 曼彻斯特编码2.5 差分曼彻斯特编码 3 常用的调制方法3.1 调幅&#xff08;AM&#xff09…

Linux网络操作命令与函数全面总结

1. 引言 Linux作为服务器和开发平台&#xff0c;网络操作是其核心功能之一。本文旨在全面总结Linux系统中的网络操作方法&#xff0c;包括命令行工具和编程接口&#xff0c;帮助读者深入理解Linux网络管理的机制。 2. 命令行工具 2.1 ping 命令 ping 命令用于测试网络连接和…