如何快速理解CUDA GPU并行编程?

理解线程(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的方向如下图所示:

二维结构及二维下标索引

以上就是两种最常见的索引方式,在大部分任务中应该已经够用了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。