当我使用错误的参数调用内核时(例如,每个块超过512个线程)或者当它内部的操作需要的数量超过我的设备所提供的数量时(例如,寄存器太多),内核就不会被执行。没有例外或返回值来表明发生了什么。
我想知道是否有办法验证内核是否已执行。
答案 0 :(得分:21)
试试这个
kernel<<<blocks, threads>>>(params);
cudaError_t err = cudaGetLastError();
if (err != cudaSuccess)
printf("Error: %s\n", cudaGetErrorString(err));
这应该会给你一个关于出错的详细错误。
编辑:以下是有关如何正确检查CUDA错误的更详细解答:
答案 1 :(得分:1)
你也可以从内核打印一些内容。这可能对调试很有用。