为什么cuda程序在运行期间崩溃而不是在调试期间崩溃

时间:2013-01-30 23:41:23

标签: visual-studio-2008 cuda

我正在使用Visual Studio 2008在Windows上工作。 我的Cuda程序在运行期间崩溃,即屏幕变黑,我认为操作系统杀死了内核,因为由于看门狗超时,执行时间太长(大约10秒)。但是,我不明白为什么同一个程序没有崩溃或为什么操作系统在我调试内核时不会被杀?在调试期间,内核仍然需要大约10秒(或更长时间)才能执行。

谢谢

4 个答案:

答案 0 :(得分:1)

我刚才有这个问题;

就我而言,当我通过NSight CUDA调试器(Visual Studio 2012)执行我的程序时,它执行得很好。但是,如果我在NSight之外运行它,要么使用Visual Studios内部调试器,要么单独运行,对cudaGLMapBufferObject(void** devPtr, GLuint bufObj)的调用将失败,返回cuda_status enum for Unknown Error并且如果我之后没有退出其他调用将因同样的错误而失败。

这是由于我忘记在我使用动态大小的共享内存的内核中传递第3个参数(以定义运行时大小的共享内存的大小)。

答案 1 :(得分:0)

以防它帮助别人。

我遇到了同样的问题(但是在VS 2013和cuda 7.5上工作)当我关闭了CUDA C / C ++中的Generate GPU Debug Information和Generate Line Number Information时,我解决了这个问题 - >属性的设备部分。

答案 2 :(得分:-1)

当存在竞争条件问题时,会发生这些问题。由于调试运行较慢,因此不会发生错误,但是当调试关闭时,指令会以不同的顺序处理并导致程序崩溃。

答案 3 :(得分:-1)

通常,这可能发生在从调试初始化值到零,而release不会初始化值。首先,我会确保所有内容都已初始化。另一张海报提到的种族条件也可能发生。您可能还想尝试在发布版本中禁用优化。偶尔(但不常见),编译器将执行破坏代码的不安全优化。请记住,通常如果您认为编译器有问题,那么您就错了,尤其是对于没有多年经验的人来说。