获取cuda的运行状态

我们可以获取cuda的运行状态来判断cuda程序的运行情况,这是我们唯一判断cuda程序是否发生运行错误的方式。

因为:

1. cuda程序不能做中间运行调试变量的打印输出,
2. cuda也不能做与程序返回值不兼容的状态回传
	注意:如果与程序返回值的状态量是兼容的,我们可以将状态量放到放回值中,这也是一种调试手段。

无所不用其极,这次调试,我能用的方法都用了,哈哈

先说获取cuda运行方法的理想方法,先定义如下宏。 <这个宏是我cuda例程中截取的,如果每一个cuda调用语句都加一个if判断,cuda程序会变得老长,影响程序的美观和后期调试>

// This will output the proper CUDA error strings in the event that a CUDA host call returns an error
#ifndef checkCudaErrors
#define checkCudaErrors(err)  __checkCudaErrors (err, __FILE__, __LINE__)

// These are the inline versions for all of the SDK helper functions
inline void __checkCudaErrors(cudaError_t err, const char *file, const int line)
{
    if (cudaSuccess != err)
    {
        fprintf(stderr, "checkCudaErrors() Driver API error = %04d \"%s\" from file <%s>, line %i.\n",
                err, cudaGetErrorString(err), file, line);//getCudaDrvErrorString
        exit(EXIT_FAILURE);
    }
}
#endif

程序运行直接使用上面的定义即可。
比如我们要创建一块显存空间,我们可以用如下方式加上宏定义进行安全判定:

	void *data;
    checkCudaErrors(cudaMalloc( (void**)&data,  data_size));

刚才我也提到了,可以用些小技巧获取程序的运行状态,比如说使用程序结构现有的输出来做状态的传递,但是切记不要对cuda中的状态变量的指针产生想法,指针和主机的指针是两个村的门牌号,传出来也是没有意义的。

使用返回值来查看cuda程序的状态,好处就是可以详细的看到每一个线程的运行状况,不会如上面checkCudaErrors这么笼统的返回一个状态量,根据每个线程的状态可以更好的跟踪程序运行。

有啥不懂的可以留言交流,一起探讨。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值