当前位置: 首页 > 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 中线程块的数量(一维)/

http://www.xdnf.cn/news/132013.html

相关文章:

  • 用 ESP32 模拟 Wiegand 刷卡器:开发门禁系统必备的小工具
  • 【CODEMATE】进制转换(transform) 粤港澳青少年信息学创新大赛 C/C++/Python 解题思路
  • WebUI可视化:第2章:技术基础准备
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(11): てあります。
  • 《拆掉思维里的墙》 古典-摘抄
  • k8s(9) — zookeeper集群部署(亲和性、污点与容忍测试)
  • Xmind快捷键大全
  • 【Dify系列教程重置精品版】第1课 相关概念介绍
  • android jatpack Compose 多数据源依赖处理:从状态管理到精准更新的架构设计
  • const(C++)
  • Modbus主从通信功能码与报文格式
  • C++初窥门径
  • 一文读懂 Redis 主从、哨兵、集群模式:工作机制、优缺点全梳理
  • 2025年C/C++基础面试题全解析 | 突破技术盲区,直击大厂核心考点
  • 代码随想录从子序列到编辑距离
  • vue3中nextTick的作用及示例
  • UML 类图基础和类关系辨析
  • 【AI平台】n8n入门2:第一个工作流,调用本地大模型
  • 【C/C++】深入理解指针(五)
  • inline小知识
  • vue3项目中eslint.config.ts配置rules
  • 天机学堂day10作业,完善兑换优惠券功能
  • Python编程的真谛:超越语法,理解编程本质
  • version `GLIBCXX_3.4.32‘ not found 解决方法
  • Linux操作系统从入门到实战(三)Linux基础指令(上)
  • 基于风力推进器控制的小球实验装置设计与研究
  • 推荐一些实用的慢SQL优化方案
  • 2款常用文字提取软件
  • BGE-M3模型深度技术分析
  • Linux NIO 原理深度解析:从内核到应用的高性能 I/O 之道