如何在应用程序结束时获取CUDA运行时错误摘要

如何在应用程序结束时获取CUDA运行时错误摘要,cuda,Cuda,我发现为每一段代码(cudamaloc、cudaMemCpy、内核代码……)获取cuda状态报告很有用,但很无聊。是否在代码结束时只执行一次(如果我不关心错误来自何处)?您可以使用宏检查错误,因此几乎没有额外的代码要编写。我在下面提供了几个函数,允许您编写CUDA调用,例如: cudaCheck(cudaMalloc(&my_array, 10)); 在调用内核之后: cudaCheckLastError("MyKernel failed"); 这种方法的优点是,您可以获得有关失败的

我发现为每一段代码(cudamaloc、cudaMemCpy、内核代码……)获取cuda状态报告很有用,但很无聊。是否在代码结束时只执行一次(如果我不关心错误来自何处)?

您可以使用宏检查错误,因此几乎没有额外的代码要编写。我在下面提供了几个函数,允许您编写CUDA调用,例如:

cudaCheck(cudaMalloc(&my_array, 10));
在调用内核之后:

cudaCheckLastError("MyKernel failed");
这种方法的优点是,您可以获得有关失败的确切信息,并且您的程序不会试图继续运行。我建议您使用这种方法,因为从长远来看,它将为您节省大量的工作

在学术方面,您可以使用异步CUDA调用,然后在最后检查错误。例如:

cudaMemcpyAsync(...);
然后,您可以运行
cudaDeviceSynchronize(),它将返回发生的最新错误(如果有)

但这确实不被推荐。有关更多信息,请参阅CUDA C编程指南4.2中的第3.2.8章“错误检查”

用于检查错误的宏。如果发生错误,这些将打印错误并退出程序:

.h:

.cpp:


您可以使用宏来检查错误,因此几乎不需要编写额外的代码。我在下面提供了几个函数,允许您编写CUDA调用,例如:

cudaCheck(cudaMalloc(&my_array, 10));
在调用内核之后:

cudaCheckLastError("MyKernel failed");
这种方法的优点是,您可以获得有关失败的确切信息,并且您的程序不会试图继续运行。我建议您使用这种方法,因为从长远来看,它将为您节省大量的工作

在学术方面,您可以使用异步CUDA调用,然后在最后检查错误。例如:

cudaMemcpyAsync(...);
然后,您可以运行
cudaDeviceSynchronize(),它将返回发生的最新错误(如果有)

但这确实不被推荐。有关更多信息,请参阅CUDA C编程指南4.2中的第3.2.8章“错误检查”

用于检查错误的宏。如果发生错误,这些将打印错误并退出程序:

.h:

.cpp: