CUDA 编程 之 基本概念理解

本文深入浅出地介绍了CUDA的基本概念,包括grid、block和thread等关键组成部分,详细解释了它们之间的关系及其在GPU编程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CUDA 基本概念理解

grid

  • 分配给每个kernel总的线程资源,可以是一维二维三维的,其中包含许多block。
  • 共享global memory

block

  • grid 的组成单位,线程块嘛,分配到 GPU SM上的基本单位,不能将其拆开分到不同的SM上。
  • block内的所有线程共享 shared memory,L1 cache 。

thread

  • GPU线程,每个线程都有自己私有 资源,例如寄存器,local memory 等等

常出现在代码中几个内部变量

维度
  • 维度表示的总是一个方向上的总数,比如说 blockdim.x 就表示 在block 中,x方向上,thread的总个数。

  • blockDim.x,y,z gives the number of threads in a block, in the particular direction

  • gridDim.x,y,z gives the number of blocks in a grid, in the particular direction
  • blockDim.x * gridDim.x gives the number of threads in a grid (in the x direction, in this case)
索引
  • 索引,简单的说就是编号。比如threadIdx.x 这个线程在 block 中x 方向(维度)上的,一个编号,排第几

  • threadIdx.x,y,z

  • blockIdx.x,y,z

那么根据上边两个概念,我们就可以计算 在grid 中全局的 blockIdx 和 threadIdx,以及在 block 中的 threadIdx了。

比如常用的 就是在 block 中的全局threadIdx,我们假如block是三维的;

tid_in_block = threadInx.x + threadIdx.y * threadDim.x + threadIdx.z *(threadDim.x * threadDim.y);
//我們可以將其想象他是一個三维数组,正好对应 xyz三维,我们想访问其中的元素的话,除了利用索引如
//a[]][][]这样的形式之外,我们也可以利用其全局的 id,就可以了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值