CUDA编程注意事项(一)


 这段时间负责使用CUDA优化LBP算法,因为刚开始学习使用CUDA,所以走了很多弯路,挖了很多坑,现在对在这段时间学习到的经验进行总结,以备后续开发时参考。至于CUDA优化LBP部分,因为还没有确定不采用,所以还不敢发到网上,或许过段时间会写个blog介绍一下思路。

注意下载的CUDA版本与驱动版本相符

 如果版本不符,你运行cuda程序的时候,会报找不到GPU的错误(好像时这么个错,记不太清了)。驱动版本在cmd中使用nvidia-smi查看,如下图可以看到我的驱动版本是441.22。在这里插入图片描述
和驱动版本对应的CUDA版本如下图,或者请查验 CUDA文档
在这里插入图片描述

关于CUDA报错

 CUDA报错不像C或者C++那样精确且及时。在第1000行报的错,问题可能出在500行。再比如函数A先后调用函数B和函数C,如果函数C的位置报错,那真正出现问题的可能是B。所以当某一变量或者函数出错时,不仅仅应检查当前位置,也应检查之前相关的内容。
 另外CUDA是不会主动报错的,应主动使用*cudaGetLastError()函数捕获错误,然后使用cudaGetErrorString(cudaError_t cudaErrorCode)*对错误进行描述。

应进行充分的单元测试

 CUDA不像Python没有try{}except{}语句,发生异常无法跳过。而且在运行时,如果一个线程出现问题,被同一kernel函数启动的其它所有线程也会被终止。甚至在本次开发中常常出现一个线程出现问题进而导致kernel函数被终止,进而后续所有的kernel函数被终止的情况。
 在进行开发时,应对尽可能糟糕的情况,尽可能大的数据量进行测试,以保证程序的正确性。

GPU上进行的操作应尽可能简单

 这个要统筹考虑,如果要效率高,那就应该把并行的操作尽可能的安排到GPU上进行,但那样有会有一些莫名其妙的报错(真的莫名其妙,无法理解)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值