写cuda代码的工作记录

记录一下工作中cuda编程遇到的坑

  1. cuda锁内卡死
    cuda编程中共享区间的锁一般会由一个int* 实现,如:
 int* lock;
 cudaMemset(lock,0);
 bool lp = true;
 while( lp ){
 int mark = atomicCAS(lock , 0 , 1);
 if(mark == 0){
 lp = false;
 if(){
 // do ...
 }
 else{
 //do ...
 }
 atomicExch(lock,0);
   }
 }

这段代码里面的do … 后面一定不能写return语句,不然就会卡死。只能continue;然后在函数末尾写return;至于为什么我不知道。。。

  1. 莫名其妙的线程竞争
    如果要用回收和分配id的操作,最好不要使用一个数组同时回收和分配,有时候明明代码看着不会有线程竞争,但他实际就是会有。。。这时候没加锁就出问题了
  2. 局部变量的原子操作
    核函数内的临时变量就不要用atomicExch赋值了,会崩。。。
  3. switch的性能问题
    gpu是没有分支预测的,if语句如果两种情况都会发生,那么一个warp会等第一种线程执行完然后执行第二种,相当于耗了2倍时间。
    同理如果switch里面有10个case,那他就会变成10倍的时间。。。。
  4. _ global _ 函数传参不能传引用,最多传指针
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值