CUDA网格(Grid)、线程块(Block) 和线程 (Thread)

CUDA 的软件架构由网格 (Grid), 线程块 (Block) 和线程 (Thread) 相关, 相当于把 GPU 上的计算单元分为若干网格,每个网格内包含若干个线程块,每个线程块包含若干的线程.

在这里插入图片描述

下面介绍 Thread, Block, Grid 的概念
  • thread: 一个 CUDA 的并行程序会被许多个threads 来执行.
  • block: 数个 threads 会被群组成一个 block, 同一个 block 中的 threads 可以同步,也可以通过 shared memory 通讯.
  • grid: 多个blocks 则会构成 grid.

一个 Grid 可以包含多个Blocks, Blocks 的组织方式可以是一维的,二维或者三维, Bolock 包含多个 threads 这些thread 的组织方式也是一维二维三维的。

  • CUDA 每个线程都有唯一的标识, ID——threadIdx

  • grid 划分成1维,block 划分成 1 维
    int threadId = blockIdx.x *blockDim.x + threadIdx.x;

  • grid划分成1维,block划分为2维
    int threadId = blockIdx.x * blockDim.x * blockDim.y+ threadIdx.y * blockDim.x + threadIdx.x;

  • grid划分成1维,block划分为3维
    int threadId = blockIdx.x * blockDim.x * blockDim.y * blockDim.z + threadIdx.z * blockDim.y * blockDim.x + threadIdx.y * blockDim.x + threadIdx.x;

  • grid划分成2维,block划分为1维
    int blockId = blockIdx.y * gridDim.x + blockIdx.x;
    int threadId = blockId * blockDim.x + threadIdx.x;

  • grid划分成2维,block划分为2维
    int blockId = blockIdx.x + blockIdx.y * gridDim.x;
    int threadId = blockId * (blockDim.x * blockDim.y) + (threadIdx.y * blockDim.x) + threadIdx.x;

  • grid划分成2维,block划分为3维
    int blockId = blockIdx.x + blockIdx.y * gridDim.x; int threadId = blockId * (blockDim.x * blockDim.y * blockDim.z) + (threadIdx.z * (blockDim.x * blockDim.y)) + (threadIdx.y * blockDim.x) + threadIdx.x;

  • grid划分成3维,block划分为1维
    int blockId = blockIdx.x + blockIdx.y * gridDim.x + gridDim.x * gridDim.y * blockIdx.z; int threadId = blockId * blockDim.x + threadIdx.x;

  • grid划分成3维,block划分为2维
    int blockId = blockIdx.x + blockIdx.y * gridDim.x + gridDim.x * gridDim.y * blockIdx.z; int threadId = blockId * (blockDim.x * blockDim.y) + (threadIdx.y * blockDim.x) + threadIdx.x;

  • grid划分成3维,block划分为3维
    int blockId = blockIdx.x + blockIdx.y * gridDim.x + gridDim.x * gridDim.y * blockIdx.z; int threadId = blockId * (blockDim.x * blockDim.y * blockDim.z) + (threadIdx.z * (blockDim.x * blockDim.y)) + (threadIdx.y * blockDim.x) + threadIdx.x;

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值