首页 > 其他分享 >cuda错误检查函数

cuda错误检查函数

时间:2023-03-07 17:44:52浏览次数:35  
标签:__ code 函数 错误 error Error call cuda printf

cuda大部分库函数的返回值都是cudaError_t,所以可以用一个函数来接收其他库函数的返回值,从而判断该库函数是否正常执行

这个函数可以用宏来实现

#define CHECK(call)                                                     \
do                                                                      \
{                                                                       \
    const cudaError_t error_code = call;                                \
    if (error_code != cudaSuccess)                                      \
    {                                                                   \
        printf("CUDA Error:\n");                                        \
        printf("    File:   %s\n", __FILE__);                           \
        printf("    Line:   %d\n", __LINE__);                           \
        printf("    Error code: %d\n", error_code);                     \
        printf("    Error text: %s\n", cudaGetErrorString(error_code)); \
        exit(1);                                                        \
    }                                                                   \
}                                                                       \
while(0);                                                               \

为什么要用do{} while(0);,这是一种宏的常用初始化方法,do的{}何以很好的限定宏里面变量的作用域

为什么要用宏呢,因为CHECK函数要报出错误所在的文件和行号,因此需要用到__FILE__和__LINE__两个宏,如果使用函数的话,就需要把这两个宏作为参数传进去,如下面程序

void check_function(cudaError_t call, const char* file_macro, const int line_macro)
{
    const cudaError_t error_code = call;
    if (error_code != cudaSuccess)
    {
        printf("CUDA Error:\n");
        printf("    File:   %s\n", file_macro);
        printf("    Line:   %d\n", line_macro);
        printf("    Error code: %d\n", error_code);
        printf("    Error text: %s\n", cudaGetErrorString(error_code));
        exit(1);
    }
}

// call function
check_function(cudaFree(d_x), __FILE__, __LINE__);

这样传参很不方便,所以还有另一种写法,把宏和普通函数结合起来,在上面check_function的外面再嵌套一层宏,可读性更好

#define CHECK(err) (check_function(err, __FILE__, __LINE__))

 

标签:__,code,函数,错误,error,Error,call,cuda,printf
From: https://www.cnblogs.com/wangtianning1223/p/17188926.html

相关文章

  • 阿里云函数计算 FC 助力高德 RTA 广告投放系统架构升级
    作者:赵庆杰(阿里云函数计算)、林雪清(阿里云函数计算)、杜玲玲(高德)、王壁成(高德)导言2023年春节,经历了三年的疫情后,我们终于在春天迎来了曙光。国人的出行热情空前高涨:......
  • 阿里云函数计算 FC 助力高德 RTA 广告投放系统架构升级
    作者:赵庆杰(阿里云函数计算)、林雪清(阿里云函数计算)、杜玲玲(高德)、王壁成(高德)导言2023年春节,经历了三年的疫情后,我们终于在春天迎来了曙光。国人的出行热情空前高涨:回家看......
  • 生成函数相关
    P6295有标号DAG计数考虑不一定弱联通的DAG的EGF,ln一下得到答案。\(F[i]\):\(i\)个点的有标号DAG数量\(F[i]=\sum_{j=1}^{i}(-1)^{j-1}\dbinom......
  • 从青铜到王者,揭秘 Serverless 自动化函数最佳配置
    作者:丛霄背景介绍全托管的Serverless计算平台能给用户带来更少的运维代价、更强的稳定性和更快的弹性能力。Serverless的目标之一是免运维,但仍旧存在一些障碍,在Serv......
  • C++笔记-函数指针
    函数指针语法://fcnPtrisapointertoafunctionthattakesnoargumentsandreturnsanintegerint(*fcnPtr)();特点:函数指针的类型(参数和返回值)都必须和......
  • Java函数(方法)的默认值问题
    Java函数(方法)的默认值问题 Java不能为函数(方法)设置默认参数。原因是“默认参数”和“方法重载”同时支持的话有二义性的问题,但使用“方法重载”可以间接地实现”默认......
  • vba 内置函数
    一.测试函数IsNumeric(x)‘是否为数字,返回Boolean结果,TrueorFalseIsDate(x)‘是否是日期,返回Boolean结果,TrueorFalseIsEmpty(x)‘是否为Empty,返回Boolean结果......
  • WIN11无法访问win7的共享打印机,(操作不能完成(错误0x00000709)),WIN10能正常访问该共享打
    1、问题描述:WIN11无法访问win7的共享打印机(操作不能完成(错误0x00000709)),win10可以访问。三台电脑都在同一个局域网内,分别为win7,win10,win11。WIN7系统为旗舰版,作为共......
  • 指针与函数
    指针变量作为函数的参数如果想再函数内部修改外部变量的值,需要将外部变量的地址传递给函数  函数内部想要操作(读或写)外部数组元素,将数组名传递给函数  ......
  • Python 内置函数装饰器 classmethod staticmethod
    使用官方的说法:classmethod(function)中文说明:classmethod是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法,使用方法如下:classC:@classmetho......