NVIDIA CUDA 工具包符号服务器

这篇文章最初发表在 NVIDIA 技术博客上。

NVIDIA 已经提供了 Windows 系统的 GPU 驱动程序二进制符号服务器。现在,NVIDIA 也开始提供 Linux 系统的 CUDA Toolkit 符号

我们提供什么?

NVIDIA 正在为 Linux 引入 CUDA Toolkit 符号,以增强应用程序开发功能。在应用程序开发过程中,您现在可以下载正在应用程序中调试或分析的 NVIDIA 库的模糊符号。这是 CUDA 驱动程序的初始装运(lib CUDA .so)和 CUDA 运行时(libcudart.so),将添加更多库。

例如,当问题似乎与 CUDA neneneba API 有关时,可能并不总是能够向 NVIDIA 提供具有所有库加载信息的再现示例、核心转储或未同步堆栈跟踪。提供符号化的调用堆栈可以帮助加快调试过程。

我们只是托管符号文件,所以调试数据不会被分发。符号文件包含模糊的符号名称。

快速启动指南

对于每个库,有两种推荐的使用模糊符号的方法:

  • 通过解开库
  • 通过将.sym 文件部署为库的符号文件
bash 复制代码
# Determine the symbol file to fetch and obtain it
$ readelf -n /usr/local/cuda/lib64/libcudart.so

# ... Build ID: 70f26eb93e24216ffc0e93ccd8da31612d277030
# Browse to https://cudatoolkit-symbols.nvidia.com/libcudart.so/70f26eb93e24216ffc0e93ccd8da31612d277030/index.html to determine filename to download
$ wget https://cudatoolkit-symbols.nvidia.com/libcudart.so/70f26eb93e24216ffc0e93ccd8da31612d277030/libcudart.so.12.2.128.sym

# Then with appropriate permissions, either unstrip,
$ eu-unstrip /usr/local/cuda-12.2/targets/x86_64-linux/lib/libcudart.so.12.2.128 libcudart.so.12.2.128.sym --o /usr/local/cuda-12.2/targets/x86_64-linux/lib/libcudart.so.12.2.128

# Or, with appropriate permissions, deploy as symbol file
# By splitting the Build ID into first two characters as directory, then remaining with ".debug" extension
$ cp libcudart.so.12.2.128.sym /usr/lib/debug/.build-id/70/f26eb93e24216ffc0e93ccd8da31612d277030.debug

示例:符号化

这里有一个简化的例子来展示象征的用途。示例应用程序 test_shared 的数据损坏导致将无效句柄传递给 CUDA Runtime API cudaStreamDestroy。默认安装 CUDA Toolkit,并且没有混淆符号,gdb 中的输出可能如下所示:

shell 复制代码
Thread 1 "test_shared" received signal SIGSEGV, Segmentation fault.
0x00007ffff65f9468 in ?? () from /lib/x86_64-linux-gnu/libcuda.so.1
(gdb) bt
#0  0x00007ffff65f9468 in ?? () from /lib/x86_64-linux-gnu/libcuda.so.1
#1  0x00007ffff6657e1f in ?? () from /lib/x86_64-linux-gnu/libcuda.so.1
#2  0x00007ffff6013845 in ?? () from /usr/local/cuda/lib64/libcudart.so.12
#3  0x00007ffff604e698 in cudaStreamDestroy () from /usr/local/cuda/lib64/libcudart.so.12
#4  0x00005555555554e3 in main ()

在以前面描述的方式之一应用模糊符号后,它将提供堆栈跟踪,如以下示例所示:

shell 复制代码
Thread 1 "test_shared" received signal SIGSEGV, Segmentation fault.
0x00007ffff65f9468 in libcuda_8e2eae48ba8eb68460582f76460557784d48a71a () from /lib/x86_64-linux-gnu/libcuda.so.1
(gdb) bt
#0  0x00007ffff65f9468 in libcuda_8e2eae48ba8eb68460582f76460557784d48a71a () from /lib/x86_64-linux-gnu/libcuda.so.1
#1  0x00007ffff6657e1f in libcuda_10c0735c5053f532d0a8bdb0959e754c2e7a4e3d () from /lib/x86_64-linux-gnu/libcuda.so.1
#2  0x00007ffff6013845 in libcudart_43d9a0d553511aed66b6c644856e24b360d81d0c () from /usr/local/cuda/lib64/libcudart.so.12
#3  0x00007ffff604e698 in cudaStreamDestroy () from /usr/local/cuda/lib64/libcudart.so.12
#4  0x00005555555554e3 in main ()

符号化的调用堆栈可以作为提供给 NVIDIA 进行分析的错误描述的一部分进行记录。

结论

当您必须使用 CUDA 来评测和调试应用程序,并且希望与 NVIDIA 共享一个调用堆栈进行分析时,请使用 CUDA 符号服务器。分析和调试将更快更容易。

如果您有任何疑问,请访问 开发者工具论坛

阅读原文

相关推荐
放羊郎3 天前
配置Nvidia JETSON AGX Xavier
nvidia·虚拟机·jetson·刷机·重装系统·xavier
free-xx10 天前
AGX Orin平台RTC驱动导致reboot系统卡住问题调试
nvidia·jetson·orin
AndrewHZ17 天前
【三维渲染技术讨论】Blender输出的三维文件里的透明贴图在Isaac Sim里会丢失, 是什么原因?
算法·3d·blender·nvidia·贴图·具身智能·isaac sim
荔枝吻21 天前
【沉浸式解决问题】NVIDIA 显示设置不可用。 您当前未使用连接到NVIDIA GPU 的显示器。
nvidia·英伟达
算家计算21 天前
算力暴增!英伟达发布新一代机器人超级计算机,巨量算力驱动物理AI革命
人工智能·云计算·nvidia
可期不折腾23 天前
NVIDIA Nsight Systems性能分析工具
ubuntu·nvidia·nsight systems·性能分析工具
量子位1 个月前
黄仁勋子女成长路径曝光:一个学烘焙一个开酒吧,从基层做到英伟达高管
ai编程·nvidia
Ray Song1 个月前
CUDA杂记--nvcc使用介绍
nvidia·cuda·nvcc
吾鳴1 个月前
网信办约谈英伟达,H20芯片后门风波震动中国AI产业
人工智能·nvidia·芯片
mpr0xy2 个月前
编译支持cuda硬件加速的ffmpeg
ai·ffmpeg·nvidia·cuda