理解线程(Thread)、线程块(Block)、网格(Grid),线程块数(BlockDim)、网格数(GridDim)以及核函数(Kernel)的概念,是CUDA学习的一个难点。本文会详细介绍如何在CUDA中使用一维、二维核函数,并索引其下标。
Dim3类型的数据
这是CUDA自定义的一种数据结构,一般为三维的无符号整型,其定义及引用方式如下;
Dim3 BlockSize(16, 16, 1)
// BlockSize.x = 16; BlockSize.y = 16; BlockSize.z = 1;
// 也可以写为 Dim3 BlockSize(16, 16),最后一维默认为1;
一维的CUDA核函数
- blockIdx.x代表x方向上的线程块序号;
- blockDim.x代表x方向上单个线程块内最大的线程数;
- threadIdx.x代表x方向上的线程序号;
所以要索引第三个Block(序号2)中第4个线程(序号3)的下标index,其过程如图所示:
一维结构及一维下标索引二维的CUDA核函数
- blockDim.x代表x方向上单个线程块包含的线程数
- blockDim.y代表y方向上单个线程块包含的线程数
而x、y的方向如下图所示:
二维结构及二维下标索引以上就是两种最常见的索引方式,在大部分任务中应该已经够用了。
网友评论