CUDA程序的错误检测
这个还蛮关键的,当时看deformable convolution的cuda代码就看到很多CHECK(…),一头雾水。现在学到了感觉还蛮开心的,老朋友了~
基本就和自己实现的一个try catch语句块一样。
书中给出的模板为:https://github.com/brucefan1983/CUDA-Programming/blob/master/src/04-error-check/error.cuh
注意这里的后缀名,是.cuh。
错误检测分为runtime API 错误检测和 核函数错误检测。
首先是runtime API错误检测。
宏的定义。等价于#ifndef …那一套,但这个更简洁。几个知识点:
- #pragma once确保该文件在同一个编译单元只会被编译一次。
- 定义宏时,如果一行写不下,记得要在后面加‘\’
- https://blog.youkuaiyun.com/gjggj/article/details/86531006 这里使用do while(0)的原因
- 这里有几个常用变量类型:cudaError_t 专门捕捉错误信息,call为runtime API的返回值,如果成功了就是cudaSuccess,否则就是异常错误代码。
注意这里__FILE__和__LINE__都是宏,不用传参,用起来很方便。- cudaGetErrorSt