首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有相当于perror()的CUDA?

是否有相当于perror()的CUDA?
EN

Stack Overflow用户
提问于 2013-04-29 23:09:29
回答 1查看 690关注 0票数 1

是否有一个CUDA函数用于打印调用者提供的错误消息和描述当前cudaStatus (或调用者提供的cudaStatus)的错误消息,a-la-perror()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-30 00:05:55

我不认为有一个内置的cuda API函数可以做到这一点。

此宏将执行您所描述的操作:

代码语言:javascript
复制
#define cudaCheckErrors(msg) \
    do { \
        cudaError_t __err = cudaGetLastError(); \
        if (__err != cudaSuccess) { \
            fprintf(stderr, "Fatal error: %s (%s at %s:%d)\n", \
                msg, cudaGetErrorString(__err), \
                __FILE__, __LINE__); \
            fprintf(stderr, "*** FAILED - ABORTING\n"); \
            exit(1); \
        } \
    } while (0)

上面宏的用法只是将其插入到任何cuda API调用或任何cuda内核调用之后。建议在每次cuda API调用和内核调用后插入,例如:

代码语言:javascript
复制
cudaMemcpy(d_A, A, sizeof(A), cudaMemcpyHostToDevice);
cudaCheckErrors("cudaMemcpy fail");
my_kernel<<<blocks, threads>>>(d_A);
cudaCheckErrors("kernel launch fail");
cudaDeviceSynchronize();
cudaCheckErrors("cudaDeviceSynchronize fail");

它打印用户定义的消息(msg),还解码cuda API错误并打印相应的错误字符串消息:

代码语言:javascript
复制
Fatal error: kernel launch fail (invalid configuration argument at t128.cu:44)
*** FAILED - ABORTING

您可能还会对错误处理here的讨论感兴趣。

为了回答下面的问题,您可以轻松地创建一个函数调用版本:

代码语言:javascript
复制
void cudaCheckErrors(char *msg){
        cudaError_t __err = cudaGetLastError(); \
        if (__err != cudaSuccess) { fprintf(stderr, "Fatal error: %s (%s at %s:%d)\n", msg, cudaGetErrorString(__err),  __FILE__, __LINE__);
            fprintf(stderr, "*** FAILED - ABORTING\n");
            exit(1);
        }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16282136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档