0

我遇到了这个奇怪的问题:我有一个程序使用 CUPTI 回调 API 来监视程序中的内核。直接启动时运行良好;但是当我将它放在 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

对这种问题有任何经验吗?我非常感谢!

4

1 回答 1

0

根据此处的 NVIDIA 论坛发帖和此处引用,CUDA“工具”必须唯一使用。这些工具包括:

  • 库普蒂
  • 任何分析器
  • cuda-memcheck
  • 调试器

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

于 2017-12-09T17:02:45.867 回答