做CUDA项目的一些心路历程

做CUDA项目时的一些坑

1)要注意数据类型,在进行cudaMemcpy()的时候,要注意数据类型的统一,即使你float的数组里存的是数据是没有小数的整数类型,但当你想要把数据从设备端拷贝回主机端的时候,一定要new一个float类型的数组去存放。
2)要注意核函数里,数组的索引一定不要超过范围,否则会出现全是0的情况。特别要注意当一个数组用于存储坐标,另一个数组存放数据。用该存储坐标的数组去索引存放数据的数组时,要确保存储的坐标值不会超过数组的索引大小。
3)在进行数组从设备端到宿主端的copy时,内存大小一定要小于等于所申请的大小,不能比申请的内存大小大,不然也会出现全是0的情况,一定要谨慎。不然找一个错误就要找好久。。。

做CUDA项目时的一些小习惯

1)在做算法的CUDA加速时,一定要先熟悉算法,而不是根据别人的C++\C 代码去直接翻译成CUDA,最好的话可以看该算法的matlab版本(个人认为matlab的代码更直观,而且在数据处理方面可视化程度较高),在了解清楚该算法后,再用并行的思想去思考该如何编写CUDA代码。
2)在规划线程块大小时,可以根据算法的内容,选择 ‘’少线程,多寄存‘’ 或者 “多线程,少寄存器”。这完全取决于你的算法内容。
3)共享内存多用于 某些数据需要被频繁访问,或者数组的某些位置需要被频繁索引到 。比如:归约算法,同时要注意存储体冲突(bank confilt)
若只是简单的赋值操作,或者读写操作,可以直接在全局内存上操作
4)当项目里需要插入一些固定的数据,比如一些矫正矩阵,空气参考矩阵,可以使用页锁定内存,快速复制到设备端,在不使用的时候释放页锁定内存,把虚拟内存放出来。
5)在利用CUDA的一些高级库时,比如cublas,cusolver,cufft。可以去官网的工具手册找对应的例子,还有关于函数的参数解释,能帮助你快速的了解并掌握。

最后

我感觉CUDA在做一些有序的算法问题时,会很难写(可能本人能力有限。。),但是总是会有解决的方法的,只要你对算法足够的了解,人是活的嘛!
总之,你要对你要写的东西十分熟悉,然后多利用并行思想去思考。如果可以的话,去了解GPU.CPU的硬件构成,会对你写代码有很大的帮助,因为代码最后都是要在硬件上去执行的。我对GPU的硬件感触最深的一点就是流水化的程度很高。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值