ROCm Code Object Tooling

news2024/9/25 9:33:27

ROCm(Radeon Open Compute)提供了一系列的工具,用于检查和提取编译器生成的代码对象,包括可执行文件、目标文件和共享对象库。

一、roc-obj

roc-obj 是 ROCm(Radeon Open Compute)提供的一个高层级工具,用于操作和提取 ROCm 编译器生成的代码对象。

以下是关于 roc-obj 工具的一些使用示例:

  1. 提取所有 ROCm 代码对象: 使用以下命令从一系列可执行文件中提取所有的 ROCm 代码对象:

    roc-obj <executable>...
  2.  提取并反汇编 ROCm 代码对象: 如果你想提取代码对象并同时进行反汇编,可以使用带有 --disassemble 或简写 -d 选项的命令:

    roc-obj --disassemble <executable>... 
    or 
    roc-obj -d <executable>... 
  3. 将 ROCm 代码对象提取到指定目录: 使用 --outdir-o 选项后跟目标目录的路径,可以将提取的代码对象保存到该目录中:

    roc-obj --outdir dir/ <executable>... 
    or 
    roc-obj -o dir/ <executable>... 
二、Low-Level Tooling
1. URI Syntax

ROCm 代码对象可以使用统一资源标识符(URI)语法进行列表显示和访问。以下是 URI 语法的组成部分及其示例:

  1. code_object_uri:这是一个通用的代码对象URI,可以是文件URI(file_uri)或内存URI(memory_uri)。

  2. file_uri:指向文件系统中的一个代码对象。

        <extract_file> 是经过URI编码的操作系统文件路径,表示代码对象所在的文件。
  3. memory_uri:指向内存中的一个代码对象。

        <process_id> 是一个十进制数字,表示包含代码对象的进程ID。
  4. range_specifier:定义了要访问的代码对象的一部分。

    • # 或 ? 是范围指定符,用于区分后续的参数。
    • offset= 后面跟随的数字表示从指定位置开始的偏移量。
    • size= 后面跟随的数字表示要访问的数据块的大小。
  5. extract_file:表示需要提取的文件,它是经过URI编码的操作系统文件路径。

  6. process_id:表示包含代码对象的内存所在进程的唯一标识符,是一个十进制数字。

  7. number:可以是以下任意一种格式的数字:

    • HEX_NUMBER:十六进制数,以 "0x" 开头。
    • DECIMAL_NUMBER:十进制数。
    • OCTAL_NUMBER:八进制数,通常以数字开头,但不应以数字0开头,以避免与十六进制混淆。
  8. Examples:

    • file://dir1/dir2/hello_world#offset=133&size=14472:表示文件系统中的 hello_world 文件中,从偏移量 133 开始,大小为 14472 字节的代码对象。

    • memory://1234#offset=0x20000&size=3000:表示进程 ID 为 1234 的内存中,从偏移量 0x20000(十六进制)开始,大小为 3000 字节的代码对象。

这种 URI 语法为 ROCm 代码对象提供了一种灵活的访问方式,允许开发者根据需要定位和操作代码对象的特定部分。

2. List available ROCm Code Objects: roc-obj-ls

roc-obj-ls 是 ROCm(Radeon Open Compute)提供的一个工具,用于列出指定宿主可执行文件中嵌入的 ROCm 代码对象。这些代码对象按捆绑编号(bundle number)、条目 ID(entry ID)和 URI 语法列出,提供了一种方法来查看和管理编译后的 GPU 代码。

以下是 roc-obj-ls 工具的使用方式和选项:

  • Usage: roc-obj-ls [-v|h] executable...

    • 这个命令后面跟着一个或多个可执行文件名,这些文件包含了要列出的代码对象。
  • Options:

    • -v 或 --verbose:详细输出模式。添加列标题,使得输出格式更易于阅读和理解。
    • -h 或 --help:显示帮助信息。提供关于如何使用 roc-obj-ls 工具的说明。

例如,如果你想列出一个名为 my_application 的可执行文件中的所有 ROCm 代码对象,并希望输出包含列标题以便更好地理解结果,你可以使用以下命令:

roc-obj-ls -v my_application

如果你只需要查看帮助信息,以了解如何使用这个工具,可以使用:

roc-obj-ls -h

使用 roc-obj-ls 可以帮助开发者审计和分析他们的应用程序中包含的 GPU 代码,确保它们正确嵌入,并且可以用于调试和性能分析。

3. Extract ROCm Code Objects: roc-obj-extract

roc-obj-extract 是 ROCm(Radeon Open Compute)提供的一个工具,用于从指定的 URI 中提取 ROCm 代码对象。以下是该工具的使用方法和选项:

  • Usage: roc-obj-extract [-o|v|h] URI...

    • 这个命令接受一个或多个 URI,这些 URI 指定了要提取的代码对象的位置。
  • Options:

    • -o <path>:输出路径。指定提取的代码对象文件的存放位置。如果指定为 -,则将代码对象打印到标准输出(STDOUT)。
    • -v:详细输出模式。在输出中包含额外的信息,如条目 ID。
    • -h:显示帮助信息。
  • Input from STDIN

    • URIs 可以从标准输入(STDIN)中读取,每行一个。
  • Output File Naming

    • 提取的代码对象将被保存在文件中,文件名的格式为:<executable_name>[pid<NUMBER>]-offset<NUMBER>-size<NUMBER>.co
  • Escaping Characters

    • 如果你从 roc-obj-ls 的输出中复制 URI 作为 roc-obj-extract 的参数,需要转义 & 字符,否则你的 shell 可能会将其解释为后台运行命令的选项。

例如,如果 roc-obj-ls 生成了如下 URI:

file://my_exe#offset=24576&size=46816xxi

你需要使用以下参数来调用 roc-obj-extract

file://my_exe#offset=24576\&size=46816

示例用法:

  • 从 URI 提取代码对象并保存到指定路径:

  • roc-obj-extract -o ./output/ file://my_exe#offset=24576&size=46816
  • 从标准输入读取 URIs 并提取代码对象,将结果打印到 STDOUT:

  • roc-obj-ls | roc-obj-extract -o -
  • 提取代码对象并使用详细模式输出更多信息:

  • roc-obj-extract -v file://my_exe#offset=24576&size=46816

使用 roc-obj-extract 工具可以帮助开发者提取和分析 GPU 程序的二进制代码对象,这对于性能调优和代码调试非常有用。

4. Examples

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

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

相关文章

【软件文档】需求规格说明书编制模板

1 范围 1.1 系统概述 1.2 文档概述 1.3 术语及缩略语 2 引用文档 3 需求 3.1 要求的状态和方式 3.2 系统能力需求 3.3 系统外部接口需求 3.3.1 管理接口 3.3.2 业务接口 3.4 系统内部接口需求 3.5 系统内部数据需求 3.6 适应性需求 3.7 安全性需求 3.8 保密性需求 3.9 环境需求…

数据结构(邓俊辉)学习笔记】串 14——BM_GS算法:构造gs表

以下&#xff0c;就来简要地介绍 gs 表的具体构造算法。算法为了便于理解其原理&#xff0c;这里将整个算法划分为若干的层次&#xff0c;并逐层递进、逐层细化。 我们首先需要引入 MS 子串与 ss 表的概念。实际上&#xff0c;相对于模式串中的任何一个字符 P[j] &#xff0c…

RP2040 C SDK开发串口的使用

RP2040 C SDK开发串口的使用 &#x1f4cd;环境搭建部署篇《RP2040 VSCode C/C开发环境快速部署》&#x1f516;RP2040 有硬件串口资源有2个。&#x1f33f;参考RP2040 C SDK Hardware APIS&#xff1a;https://www.raspberrypi.com/documentation/pico-sdk/hardware.html#grou…

安卓APK重签名并查看MD5值-2024最新版

重签名 命令行运行&#xff1a; apksigner sign --ks your_keystore.jks --out output.apk input.apk在这个命令中&#xff1a; –ks 或 --keystore 参数后面是你的keystore文件路径。 your_keystore.jks 是你的keystore文件。 –out 参数后面是输出的签名后的APK文件名。 out…

发布npm包到GitLab教程

之前在研究如何搭建UI组件库&#xff08;内部使用&#xff09;&#xff0c;其中重要的一步就是发布npm包到GitLab。中间踩了很多坑&#xff0c;在这里记录一下整个流程方便大家快速上手。不足之处欢迎指出&#x1f64f; 1. 获取Token 在gitlab中打开access tokens申请页面&am…

鲲鹏服务器之ARM探知

什么叫arm架构 ARM架构过去称作进阶精简指令集机器&#xff08;Advanced RISC Machine&#xff0c;更早称作&#xff1a;Acorn RISC Machine&#xff09;&#xff0c;是一个32位精简指令集&#xff08;RISC&#xff09;处理器架构&#xff0c;其广泛地使用在许多嵌入式系统设计…

CSS系列之详解overflow(四)

一、什么是溢出 CSS 的 overflow 属性用于控制元素内容溢出时的表现方式。当元素的内容超出其指定的尺寸范围时&#xff0c;就会出现溢出现象。比如&#xff0c;一个元素的高度设置是 80px&#xff0c;但内容高度不只是 80px&#xff0c;内容此时就叫做溢出了。 那需要注意的…

【QT学习】1-2 Liunx环境下QT5.12.9软件安装1——VMware17.0.0虚拟机安装

注意&#xff1a;如果电脑已经安装低版本的VMware&#xff0c;千万不要卸载&#xff0c;直接覆盖安装&#xff0c;更新到新的安装版本 1.点击.exe文件&#xff0c;右键以管理员身份运行&#xff0c;点击下一步&#xff0c;下一步 2.选择软件安装位置后&#xff0c;点击下一步。…

Datawhale X 李宏毅苹果书 AI夏令营(深度学习进阶)task3

批量归一化 其实归一化简单一点理解就类似于我们学过的数学中的每个数值减去平均值除以标准差。 神经网络中的批量归一化&#xff08;Batch Normalization&#xff0c;BN&#xff09;就是其中一个“把山铲平”的想法。不要小看优化这个问题&#xff0c;有时候就算误差表面是凸…

面试基本内容

1.类加载器 类加载器加载过程: 加载:&#xff08;将字节码文件加载到运行时数据区的方法区中/元空间&#xff09; 链接:&#xff08;验证:检查字节码文件是否合法—>准备:静态类变量赋值为默认值&#xff0c;不会实例变量分配初始化—>解析:将常量池引用&#xff0c;转化…

Java | Leetcode Java题解之第382题链表随机节点

题目&#xff1a; 题解&#xff1a; class Solution {ListNode head;Random random;public Solution(ListNode head) {this.head head;random new Random();}public int getRandom() {int i 1, ans 0;for (ListNode node head; node ! null; node node.next) {if (rando…

14.神经网络的基本骨架 - nn.Module 的使用

神经网络的基本骨架 - nn.Module 的使用 Pytorch官网左侧&#xff1a;Python API&#xff08;相当于package&#xff0c;提供了一些不同的工具&#xff09; 关于神经网络的工具主要在torch.nn里 网站地址&#xff1a;torch.nn — PyTorch 1.8.1 documentation Containers C…

【Linux】CodeServer:云IDE部署

Code-server 是一个开源项目&#xff0c;它允许你在任何地方通过浏览器访问 Visual Studio Code&#xff08;VS Code&#xff09;编辑器。这意味着你可以在远程服务器或云端运行 VS Code&#xff0c;并通过浏览器进行编码、调试和开发&#xff0c;而不需要在本地安装 VS Code。…

EtherCAT 转 ModbusTCP 网关

设备简介 本产品是 EtherCAT 和 Modbus TCP 网关&#xff0c;使用数据映射方式工作。 本产品在 EtherCAT 侧作为 EtherCAT 从站&#xff0c;接 TwinCAT 、 CodeSYS 、 PLC等&#xff1b;在 ModbusTCP 侧做为 ModbusTCP 主站&#xff08; Client &#xff09;或从站…

<数据集>无人机识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;9229张 标注数量(xml文件个数)&#xff1a;9229 标注数量(txt文件个数)&#xff1a;9229 标注类别数&#xff1a;1 标注类别名称&#xff1a;[UAV] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;对类别…

我如何解决 java.lang.ClassNotFoundException:javax.xml.bind.DatatypeConverter

优质博文&#xff1a;IT-BLOG-CN 问题 我如何解决java.lang.ClassNotFoundException&#xff1a;javax.xml.bind.DatatypeConverter 2024-08-25T02:31:25.46202:00 ERROR 21868 --- [fintonic-oauth] [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet…

springAI框架学习总结

springAI 1.springAI基本介绍 springAI是一个AI工程应用框架&#xff0c;其目标是将 Spring 生态系统设计原则&#xff08;例如可移植性和模块化设计&#xff09;应用于 AI 领域&#xff0c;并推广使用 POJO 作为 AI 领域应用程序的构建块。 2.特性 灵活的AIP支持chat,text…

Matlab R2022b使用Camera Calibrator工具箱张正友标定法进行相机标定附带标定前后对比代码

打开Camera Calibrator 在这添加你拍摄的图片 根据你每个方块的实际边长填写&#xff0c;我是15mm。 通俗一点&#xff0c;要k3就选3 Coefficients&#xff0c;否则为0&#xff1b;要p1、p2就选Tangential Distortion。然后进行计算。 可以点击右侧误差高的选中图像进行移…

【计算机网络】计算机网络的分层结构

为什么要分层&#xff1f;为什么要制定协议&#xff1f; 计算机网络功能复杂→采用分层结构&#xff0c;将诸多功能合理地划分在不同层次→对等层之间制定协议&#xff0c;以实现功能。

探索Scratch编程:重温《西游记-大战蜘蛛精》

小虎鲸Scratch资源站-免费Scratch作品源码,素材,教程分享平台! 在编程教育的浪潮中&#xff0c;Scratch以其简单易用的特点&#xff0c;成为了孩子们学习编程的热门选择。今天&#xff0c;我们很高兴向大家介绍一款精彩的Scratch教学案例作品——《西游记-大战蜘蛛精》。这不仅…