一、Debugging tools
1. Using ltrace
ltrace 是一个标准的 Linux 工具,它可以在每次动态库调用时向标准错误输出一条消息。由于 ROCr(Radeon Open Compute 的 R 语言支持)和 ROCt(ROC 内核驱动的用户空间接口)都是动态库,使用 ltrace 可以轻松追踪这些库中的活动。追踪可以作为一种强大的方式,快速观察应用程序的流程,然后再使用命令行调试器深入了解细节。ltrace 是一个有助于可视化整个 ROCm 软件栈运行时行为的工具。追踪还可以显示与关键路径上意外调用昂贵 API 调用相关的性能问题(在性能上成本较高,可能是因为这些 API 调用涉及到大量的计算、内存使用、磁盘 I/O 或网络通信等,从而导致程序执行效率降低或响应时间延长)。
举个栗子:


2. Using ROCgdb
ROCgdb 是基于 GDB(GNU 源代码级调试器)开发的,专为 Linux 系统上的 ROCm 环境设计的源代码级调试器。它与 CUDA 开发者使用的 cuda-gdb 类似,都是用来调试 GPU 程序的。
举个栗子:


二、Debugging HIP Applications

三、Useful Environment Variables
HIP (Heterogeneous-compute Interface for Portability) 提供了一些环境变量,这些环境变量允许 HIP、hip-clang(HIP 的 C/C++ 编译器前端)或 HSA(Heterogeneous System Architecture)驱动程序禁用某些特性或优化。这些环境变量不是为了生产环境设计的,但它们在诊断应用程序(或驱动程序)中的同步问题时非常有用。
1. Kernel Enqueue Serialization
在 GPU 编程中,内核(Kernel)排队序列化是一个重要的概念,它可以帮助开发者控制内核命令的执行顺序。通过使用环境变量,开发者可以指定 HIP 运行时在执行内核或数据传输时的同步行为。以下是一些与内核排队序列化相关的环境变量:
-
AMD_SERIALIZE_KERNEL:- 设置为
1:在执行内核之前等待前一个内核命令完成。 <
- 设置为

最低0.47元/天 解锁文章
1018

被折叠的 条评论
为什么被折叠?



