首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CUDA编程的错误处理

1.Linux 中的错误处理

#include voidperror (constchar*str);

//该函数会向stderr打印以str指向的字符串为前缀,后紧跟一个冒号,最后是errno表示的错误信息。举个栗子:

FILE *fd;

fd = fopen("file.txt","r");

if(NULL == fd) {

perror("fopen");

exit();

}

#include

char* strerror (interrnum);intstrerror_t (interrnum,char*buf, size_t len);

//这两个函数就是将errno作为输入实参,来将错误信息以字符串的形式返回或者写入buf里面。举个例子

FILE *fd;

fd = fopen("file.txt","r");

if(NULL == fd) {

fprintf(stderr,"fopen : %s\n", strerror(errno));exit();

}

2. CUDA中的错误处理

和errno变量类似,在CUDA编程中,也定义了错误类型 cudaError_t ,只不过这个错误值一般是runtime API的返回值。当且仅当这个API返回值为cudaSuccess时,才说明这个API调用正确。

当发生了API调用错误,我们如何知道错误信息呢

__host____device__cudaError_t cudaGetLastError ( void )__host____device__cudaError_t cudaPeekAtLastError ( void )

这两个函数获取最后的错误信息,返回值是一个cudaError_t类型。

不同的是,cudaGetLastError()函数将重新将系统的全局错误信息变量重置为cudaSuccess,而cudaPeekAtLastError() 函数不会有这样的操作。

注意事项:

任何CUDA API调用都会可能出错。因此,假如你要定位是否是API 1调用错误,要保证这个API之前的所有API调用都没有错误,然后在API 1调用后面加上cudaGetLastError();

Kernel的启动是异步的,为了定位它是否出错,记得加上cudaDeviceSynchronize()函数进行同步,然后再调用cudaGetLastError();

Ok, 同样的,我们得到了错误类型的值,如果知道它代表的错误信息含义呢?去参考手册上查找错误信息映射就太麻烦了,CUDA提供了如下的两个API来显示对应的错误信息:

__host__ __device__constchar* cudaGetErrorName ( cudaError_terror)__host__ __device__constchar* cudaGetErrorString ( cudaError_terror)

//可以类似下面这样来处理。

int cudaUtil::reportCudaErrorGPU(const char *message,const char *file,const char *function, int line)

{

cudaError_t cuda_err = cudaGetLastError();

if(cudaSuccess != cuda_err)

{

fprintf(stderr,"%s:(%s:%s:%d)\n",message,file,function,line);

fprintf(stderr,"%s\n", cudaGetErrorString(cuda_err));

//exit(1);

return -1;

}

return 0;

}

//调用的时候这样就可以了

ret = cudaUtil::reportCudaErrorGPU("cudaSetDevice error",__FILE__,__FUNCTION__,__LINE__);

if(ret

{

ret = -2;

break;

}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181221G07XMA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券