我正在使用 Visual Studio 2008 在 Windows 上工作。我的 Cuda 程序在运行期间崩溃,即屏幕变黑,我想操作系统会杀死内核,因为由于看门狗超时,执行时间太长(大约 10 秒)。但是,我不明白为什么同一个程序不会崩溃,或者为什么我调试内核时操作系统不会杀死?内核在调试期间仍然需要大约 10 秒(或更长)来执行。
谢谢
我正在使用 Visual Studio 2008 在 Windows 上工作。我的 Cuda 程序在运行期间崩溃,即屏幕变黑,我想操作系统会杀死内核,因为由于看门狗超时,执行时间太长(大约 10 秒)。但是,我不明白为什么同一个程序不会崩溃,或者为什么我调试内核时操作系统不会杀死?内核在调试期间仍然需要大约 10 秒(或更长)来执行。
谢谢
我刚遇到这个问题;
就我而言,当我通过 NSight CUDA 调试器(Visual Studio 2012)执行我的程序时,它执行得很好。但是,如果我在 NSight 之外运行它,或者使用 Visual Studios 内部调试器,或者单独运行,调用cudaGLMapBufferObject(void** devPtr, GLuint bufObj)
将失败,返回cuda_status
未知错误的枚举,并且如果我在此之后没有退出,其他调用将失败并出现相同的错误。
这是因为我忘记在我使用动态大小的共享内存的内核中传递第三个参数(定义运行时大小的共享内存的大小)。
以防万一它帮助别人。
我遇到了同样的问题(但在 VS 2013 和 cuda 7.5 上工作),当我在属性的 CUDA C/C++ -> Device 部分关闭 Generate GPU Debug Information 和 Generate Line Number Information 时解决了这个问题。
通常,当存在竞争条件问题时,就会出现这些问题。由于调试运行较慢,因此不会出现错误,但当调试关闭时,指令处理顺序不同,程序崩溃。
通常,这可能发生在调试初始化值为零时,而发布不会初始化这些值。首先,我会确保一切都已初始化。另一张海报提到的比赛条件也可能发生。您可能还想尝试在发布版本中禁用优化。偶尔,但不经常,编译器会执行破坏代码的不安全优化。请记住,通常如果您认为编译器有问题,那您就错了,尤其是对于没有几年经验的人。