大家好!这几天写了一个程序,调试执行的时候总会出现一个错误:unspecified launch failure。这个错误提示的信息定位中在Host端的调用内核函数之后的第一个cudaMemcpy(设备端到主机端拷贝)。大家有没有遇到此类问题,解决的方法是什么?在线等!!急!
谢谢!
LZ您好:
这一般是您的kernel的问题,您可以在您的这个kernel后面添加cudaDeviceSynchronize(),并检查cudaDeviceSynchronize()的返回值,如果是kernel的异步错误,那么您可以这样确认。
以及,请检查您的kernel代码。
大致如此,祝您debug顺利~
ICE说的对,以及,具体一点的说:
这往往代表您的kernel中存在越界或者非法访存。
(您可以通过nsight的start cuda debugging + cuda memory check选项,一步定位到实际出错位置)
谢谢ice版主,我加入了cudaDeviceSynchronzie()函数后,返回值是4。这说明什么呢?我在网上没查到相关的资料。
谢谢横扫千军版主!!非法访存主要有哪些呢?哪些情况能造成非法访存呢?
LZ您好:
您可以用cudaGetErrorString()来得到cudaError_t类型的对应的报错字符串。
您的返回值为4对应的即为 unspecified launch failure。
您可以参照3#横扫斑竹的建议检查您代码的问题。
以及请检查您指针的有效性以及寻址行为的正确性。3#就是最快捷的方法,请参考。
祝您好运~