验证CUDA中内核是否执行的方法

22

当我使用不正确的参数(例如每个块超过512个线程)或者操作需要超出设备性能的资源(例如太多寄存器)时,调用内核将不会被执行。虽然没有任何异常或返回值来指示发生了什么。

我想知道是否有一种方法来验证内核是否已执行。

2个回答

34

试试这个

kernel<<<blocks, threads>>>(params);
cudaError_t err = cudaGetLastError();
if (err != cudaSuccess) 
    printf("Error: %s\n", cudaGetErrorString(err));
这应该会提供有关出错原因的详细信息。 编辑:这里是有关如何正确检查CUDA错误的更详细的答案:

谢谢,这正是我的问题! - nirvanaswap

2

你也可以从内核中打印一些东西。这对于调试可能是有用的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接