当前位置: 首页 > news >正文

CUDA编程之Grid、Block、Thread线程模型

一、线程模型:Grid、Block、Thread概念

1. 层级定义
  • Thread(线程)
    CUDA中最基本的执行单元,对应GPU的单个CUDA核心(SP)。每个线程独立执行核函数指令,拥有独立的寄存器和局部内存空间‌。

  • Block(线程块)
    由多个线程组成(通常为32的倍数),是逻辑上的并行单元。同一Block内的线程可通过共享内存(Shared Memory)协作,并支持同步操作(如__syncthreads())。一个Block内的线程会被划分为多个‌Warp‌(32线程为一组,以SIMT方式执行)‌。

  • Grid(网格)
    由多个Block构成,代表完整的核函数执行空间。Grid内的Block可分配到不同SM(流多处理器)上并行执行,但不同Block之间无法直接通信‌。

2. 维度与索引
  • 维度定义
    Grid和Block均支持一维、二维或三维结构。例如,处理图像时常用二维Block(如16x16线程)‌

  • 魔方图

二、索引计算

  • 全局索引‌:通过blockIdx(Block在Grid中的位置)、threadIdx(线程在Block中的位置)和blockDim(Block维度)计算全局位置。例如:
    int global_x = blockIdx.x * blockDim.x + threadIdx.x; // 一维示例
  • // 二维示例(如图像处理)
    int x = blockIdx.x * blockDim.x + threadIdx.x;
    int y = blockIdx.y * blockDim.y + threadIdx.y;

    blockIdx:线程块在对应 grid 中的编号。
    threadIdx:线程在对应线程块中的编号。
    两者都是uint3向量类型,包含 x, y, z 三个 uint 成员。

    gridDim:grid 的维度,即每一维的 block 数量。对应调用 kernel 时的 gridSize。
    blockDim:block 的维度,即每一维的 thread 数量。对应调用 kernel 时的 blockSize。
    两者都是dim3向量类型,包含 x, y, z 三个 uint 成员。

    例:

    gridDim.x:当前 grid 中线程块的数量(一维)/

相关文章:

  • uni-app云开发总结
  • 分布式队列对消息语义的处理
  • 飞机会员日
  • 【金仓数据库征文】金仓数据库KingbaseES:在技术与人文交织中开拓信创未来
  • 面试常问问题:Java基础篇
  • 前端让一个div的高度为屏幕的高度减去其他所有元素的高度(包括它们的margin和padding),并自适应。
  • ubuntu 20.04 编译运行lio-sam,并保存为pcd
  • C#高级语法--接口
  • 前端如何连接tcp 服务,接收数据
  • 服务器集群都有哪些优势?
  • 电子病历高质量语料库构建方法与架构项目(提示词设计篇)
  • OAuth2TokenEndpointFilter类介绍、应用场景和示例代码
  • 89.WPF 中实现便捷的数字输入框:DecimalUpDown 控件的使用 WPF例子 C#例子.
  • 新!在 podman-machine-default 中安装 CUDA、cuDNN、Anaconda、PyTorch 等并验证安装
  • PyCharm 中 FREECAD 二次开发:从基础建模到深度定制
  • fpga系列 HDL:verilog latch在fpga中的作用 避免latch的常见做法
  • 可以在电脑上使用的备忘录记事工具评测
  • 第2讲:R语言中的色彩美学——科研图表配色指南
  • 爬虫练习 js 逆向
  • c++进阶——类与继承
  • 新闻1+1丨应对外部冲击,中央政治局会议释放哪些信号?
  • 一年吸引30多万人次打卡,江苏这个渔村是怎么做到的?
  • 中共中央政治局召开会议,分析研究当前经济形势和经济工作,中共中央总书记习近平主持会议
  • 获公示拟任省辖市委副书记的胡军,已赴南阳履新
  • 证券时报:落实“非禁即入” ,让创新活力充分涌流
  • 小米首次参加上海车展:没有雷军依旧人气爆棚,YU7上市时间未推迟