【问题标题】:CUDA device seems to be blockedCUDA 设备似乎被阻止
【发布时间】:2012-12-30 21:00:52
【问题描述】:

我正在运行一个小型 CUDA 应用程序:QuickSort 基准算法(请参阅here)。我有一个带有 NVIDIA 660GTX(设备 0)和 8600GTS(设备 1)的双系统。

在 Windows 8 和 Visual Studio 下,应用程序在设备 0 上编译和运行完美无缺。在 Linux(Ubuntu 12.04 LTS)下,应用程序使用 nvcc 和 gcc 编译,但突然停止运行,返回 (unspecified launch failure)

我有两个问题:

  1. 出现此错误后,我的 GPU 无法执行其他一些操作,例如,在执行第一次数据传输时运行 SDK 示例 bandwidhtTest 会阻塞,但运行 deviceQuery 继续执行良好。 如何重置我的 GPU? 我已经尝试过 cudaDeviceReset() 方法,但没有帮助
  2. 如何在 linux 下找到问题所在?有人知道或以前见过这个吗?

提前感谢您的帮助!

【问题讨论】:

  • dmesg 中搜索 NVRM 消息通常可以更深入地了解正在发生的事情。你能附上来自sudo nvidia-bug-report.sh的日志吗?
  • 'dmesg' 给出 'NVRM: Xid (0000:01:00): 31, Ch 00000005, engmask 00000101, intr 10000000'。我如何/在哪里可以附加错误报告? (抱歉对 Stackoverflow 很陌生)
  • 谢谢!堆栈溢出不允许附件。您需要使用其中一种外部文件/文本托管服务。 nvidia-bug-report.sh 的输出只是一个压缩文本,因此您可以例如发布到pastebin.com

标签: linux cuda nvidia hpc


【解决方案1】:
  1. 如果 GPU 兼容,您可以使用 nvidia-smi 实用程序重置它

  2. 根据我的知识和经验,(unspecified launch failure) 通常会导致分段错误。您是否指定了要使用的正确 GPU?尝试使用 cuda-memcheck 查看是否有任何内存超出范围的情况。

【讨论】:

  • 感谢您的提示,但 nvidia-smi 无法重置 GeForce 设备(尽管它正确报告了两个设备的内存使用情况)。还有其他想法如何实现这样的重置(无需关闭/打开整个桌面)?还尝试了 cuda-memcheck,但由于应用程序被阻止,我没有得到任何有用的信息。
  • 您是否检查过该进程是否仍在运行?从而挡住了卡!?
  • 已检查 - 进程未运行(它以错误代码 1 退出)。
  • 嗯,不知道如何解锁 GPU。关于应用,我的猜测是windows和linux下编译的不一样,如果可以的话,看看windows下传给nvcc的参数是什么,或者只是尝试在nvcc所在的Makefile中添加-arch=compute_xx -code=sm_xx展示。其中 xx 代表您的计算能力
  • 谢谢,也许其他人会给出“重置”的答案。对于该应用程序,我将继续深入研究它以了解哪里出了问题。一件事:我的 Linux 是 x64,而我的 Win 8 是 x86 - 这可能是问题的根源(可能是错误的内存对齐)。
【解决方案2】:

根据我的经验,XID 31 总是由访问错误指针(又名内存访问冲突)引起的。

我会先走这条路。使用cuda memcheck 运行您的应用程序。就像cuda-memcheck you_app args to your app 一样,看看它是否发现任何错误的内存访问。 还可以尝试使用cuda-gdbNsight Eclipse Edition 单步执行代码。

【讨论】:

    【解决方案3】:

    我发现使用

    cuda-memcheck -b ...

    防止设备锁定。

    【讨论】:

      猜你喜欢
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多