检测到Cuda API错误时如何查找程序在哪里崩溃:cudaMemcpy返回(0xb)

Xin*_*Shi 5 c++ cuda cuda-gdb

我正在调试cuda程序,并收到以下警告:

warning: Cuda API error detected: cudaMemcpy returned (0xb)

warning: Cuda API error detected: cudaMemcpy returned (0xb)

warning: Cuda API error detected: cudaGetLastError returned (0xb)

Error in kernel
GPUassert: invalid argument
Run Code Online (Sandbox Code Playgroud)

当我在cuda-gdb中键入“ where”时,它显示“ no stack”。

(cuda-gdb) where
No stack.
Run Code Online (Sandbox Code Playgroud)

如何找到我的程序崩溃的地方?

Xin*_*Shi 6

在这里找到答案:http : //on-demand.gputechconf.com/gtc/2012/presentations/S0027A-Monday-Debugging-Experience-CUDA.pdf @ page 27。

你首先需要:

(cuda-gdb) set cuda api_failures stop
Run Code Online (Sandbox Code Playgroud)

然后当发生错误时,它会停止:

Cuda API error detected: cudaMemcpy returned (0xb)
(cuda-gdb) where
#0  0x00007fffea6a06d0 in cudbgReportDriverApiError () from       /usr/lib64/nvidia/libcuda.so.1
#1  0x00007fffea6a2c36 in cudbgReportDriverInternalError () from /usr/lib64/nvidia/libcuda.so.1
#2  0x00007fffea6eed93 in cudbgGetAPIVersion () from /usr/lib64/nvidia/libcuda.so.1
...
Run Code Online (Sandbox Code Playgroud)