(Caffe)编程小技巧

1. Cuda中要处理单位数据N大于可用的线程数量N’时

以向量乘函数为例,mul_kernel(n,a,b,y)对长为n的a,b求内积,结果放入y

template <typename Dtype>
__global__ void mul_kernel(const int n, const Dtype* a,
    const Dtype* b, Dtype* y) {

  CUDA_KERNEL_LOOP(index, n) {
    y[index] = a[index] * b[index];
  }

}

展开CUDA_KERNEL_LOOP(index, n)得

template <typename Dtype>
__global__ void mul_kernel(const int n, const Dtype* a,

  for (int i = blockIdx.x * blockDim.x + threadIdx.x; \
       i < (n); \
       i += blockDim.x * gridDim.x)

    y[i] = a[i] * b[i];

  }
}

说明:

  • Caffe中,Grid、Block都是一维的,其中Block的维度为512(也就是一个Block有512个Thread)
  • n为单位总数
  • blockDim.x* gridDim.x为该Grid所有线程的数量
  • 可见,一个线程可能处理了多个单位

[1]. http://blog.youkuaiyun.com/lingerlanlan/article/details/24379465?utm_source=tuicool&utm_medium=referral

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值