使用 cuda-gdb 启动带有 CUPTI 调用的程序失败

failed using cuda-gdb to launch program with CUPTI calls

我遇到了这个奇怪的问题:我有一个程序使用 CUPTI callbackAPI 来监视程序中的内核。 运行直接启动就好了;但是当我把它放在 cuda-gdb 和 运行 下时,它失败并出现以下错误:

错误:函数 cuptiSubscribe(&subscriber, CUpti_CallbackFunc)my_callback, NULL) 失败,错误为 CUPTI_ERROR_NOT_INITIALIZED

我已经尝试了CUPTI/samples中的所有示例并得出结论,使用callbackAPI 和activityAPI 的程序在cuda-gdb 下会失败。 (它们在没有 cuda-gdb 的情况下都表现良好)但失败原因不同: 如果我有来自 activityAPI 的调用,那么一旦 运行 它在 cuda-gdb 下,它会挂起一分钟然后退出并出现错误:

CUDA 驱动程序遇到内部错误。错误代码:0x100ff00000001c 进一步执行或调试不可靠。请确保您的临时目录挂载了写入和执行权限。

如果我像我自己的程序一样从 callbackAPI 调用,那么它会更快地失败并出现相同的错误:

CUPTI_ERROR_NOT_INITIALIZED

在这个问题上有经验吗?非常感谢!

根据 NVIDIA 论坛发帖 here and also referred to here,必须单独使用 CUDA "tools"。这些工具包括:

  • CUPTI
  • 任何分析器
  • cuda-memcheck
  • 调试器

一个代码一次只能"in use"其中之一。开发人员独立使用分析器或 cuda-memcheck 或调试器应该相当容易,但对于那些使用 CUPTI 的人来说可能是一个收获,他们也希望能够在相同的代码,将提供一种编码方法,以便在他们希望使用其他工具时能够在他们的应用程序中禁用 CUPTI。