tensorRT---认识cuda RuntimeAPI(kernel-function)

1. 核函数是 cuda 编程的关键
2. 通过 xxx.cu 创建一个 cudac 程序文件,并把 cu 交给 nvcc 编译,才能识别 cuda 语法
3. __global__ 表示为核函数,由 host 调用。 __device__ 表示为设备函数,由 device 调用
4. __host__ 表示为主机函数,由 host 调用。 __shared__ 表示变量为共享变量
5. host 调用核函数: function<<< gridDim , blockDim , sharedMemorySize , stream>>>( args …);
6. 只有 __global__ 修饰的函数才可以用 <<<>>> 的方式调用
7. 调用核函数是传值的,不能传引用 可以传递类、结构体等 核函数可以是模板
8. 核函数的执行,是异步的,也就是立即返回的
9. 线程 layout 主要用到 blockDim gridDim
10. 核函数内访问线程索引主要用到 threadIdx blockIdx blockDim gridDim 这些内置变量
这里详细解释一下(使用3个维度进行解释),gridDim是网格,,而网格是三维的分别对应x、y、z,假如gridDim(2,3,4),代表总共有2*3*4=24个网格,那么什么是网格呢?网格是对block的多少进行描述的,这里有24个网格,说明有24个block,那么什么是block呢?block是对线程的多少描述的,blockDim三维分别对应着x,y,z三个维度,假如blockDim(5,6,7),那么说明每个blok里有5*6*7=210个线程,此时有24个block,那么对应的总线程数就是210*24=5040。
dim3 gridDim(x,y,z);
dim3 blockDim(x,y,z);
总的线程数如何计算呢?
int nthreads = gridDim.x * gridDim.y * gridDim.z * blockDim.x * blockDim.y * blockDim.z;
那么多的线程,我怎么找到对应的索引的呢?这里就需要使用到cuda的内置变量了,如下:

 其中threadIdx和block相对应,threadIdx.x 对应blockDim.x的索引,threadIdx. 对应blockDim.的索引,threadIdx.z 对应blockDim.z的索引。

blockIdx和grid对应,即索引的是block,因此blockIdx.x对应gridDim.x维度的索引,blockIdx.y对应gridDim.y维度的索引,blockIdx.z对应gridDim.z维度的索引。因此想要获取索引,就要这样:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值