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 符号服务器。分析和调试将更快更容易。

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

阅读原文

相关推荐
万俟淋曦2 小时前
NVIDIA DriveOS 推动新一代智能汽车实现突破
人工智能·ai·汽车·nvidia·智能汽车·driveos·driveworks
安全二次方security²1 天前
CUDA C++编程指南(1)——简介
nvidia·cuda·c/c++·device·cuda编程·architecture·compute unified
算家计算6 天前
英伟达亮出最强AI芯片!性能暴增3倍,算力竞赛迎来新节点
人工智能·nvidia·芯片
扫地的小何尚9 天前
AI创新的火花:NVIDIA DGX Spark开箱与深度解析
大数据·人工智能·spark·llm·gpu·nvidia·dgx
扫地的小何尚10 天前
一小时内使用NVIDIA Nemotron创建你自己的Bash计算机使用智能体
开发语言·人工智能·chrome·bash·gpu·nvidia
安全二次方security²11 天前
CUDA-GDB(11)——调试示例演练
gdb·nvidia·cuda·调试·cuda-gdb·autostep·mpi cuda
BothSavage18 天前
Ubuntu-8卡H20服务器升级nvidia驱动+cuda版本
linux·服务器·ubuntu·gpu·nvidia·cuda·nvcc
mortimer23 天前
在 Windows 上部署 NVIDIA Parakeet-TDT 遇到的坑
python·github·nvidia
扫地的小何尚23 天前
Isaac Lab 2.3深度解析:全身控制与增强遥操作如何重塑机器人学习
arm开发·人工智能·学习·自然语言处理·机器人·gpu·nvidia
攻城狮7号1 个月前
NVIDIA开源Audio2Face模型与SDK,数字人表情迎来“灵魂”时刻
人工智能·nvidia·开源模型·audio2face