拓展知识:了解grid、block、thread 关系

CUDA编程之Grid、Block、Thread线程模型 ‌Grid和Block均支持一维、二维或三维结构。例如,处理图像时常用二维Block(如16x16线程)‌魔方图。 阅读详情

拓展知识:了解grid、block、thread 关系

如何理解呢?
实际上这个角标的计算也是虚拟地址,只不过为了底层寻址方便设计的,就跟c/c++概念中的虚拟地址一样。
一个三维的东西,grid最顶层,其次是block,最底层是thread。

1. 三者的概念关系

名称含义层次关系示例
Grid(网格)启动一次 kernel(GPU 函数)时的整体线程集合最外层一个 grid 中包含多个 block
Block(线程块)一组可以共享共享内存、可同步的线程grid 的组成单元一个 block 中包含多个 thread
Thread(线程)最基本的执行单元block 的组成单元每个 thread 执行相同 kernel 代码,不同数据

2. 三者的维度

名称含义类型范围
threadIdx.{x,y,z}当前线程在 block 内的索引局部索引[0, blockDim.{x,y,z}-1]
blockIdx.{x,y,z}当前 block 在 grid 内的索引全局块索引[0, gridDim.{x,y,z}-1]
blockDim.{x,y,z}每个 block 的线程数结构体常量固定值
gridDim.{x,y,z}grid 中 block 的数量结构体常量固定值

3.常见的维度

3.1 . 1D(一维)

#define M 32
#define N 64
dim3 block(N) //一个block有N个线程
dim3 grid(M) //一个grid 有 32个block
//1. blockIdx.x 范围是啥? 0~31
//2. threadIdx.x 范围是啥 0~63
//3. blockDim.x = 64 
//如何求取一维的线程标号呢?
int global_id = threadIdx.x (当前线程在这个block的偏移) + blockIdx.x(第几个block) * blockDim.x(恒定的值,为64)

3.2 . 2D(二维)

#define GM 16
#define GN 32
#define BM 64
#define BN 128
dim3 block(BM,BN);
dim3 grid(GM,GN)
//gridDim.x	grid 在 X 方向上的 block 数	16
//gridDim.y	grid 在 Y 方向上的 block 数	32
//blockDim.x	每个 block 在 X 方向的 thread 数	64
//blockDim.y	每个 block 在 Y 方向的 thread 数	128
//blockIdx.x 范围是啥?当前 block 在 grid 中 X 方向的索引 0~15
//blockIdx.y  当前 block 在 grid 中 Y 方向的索引 0~31
// threadIdx.x 当前线程在 block 内 X 方向索引 0~63
// threadIdx.y 当前线程在block内y方向的索引 0~127

//二维索引:
int global_x = threadIdx.x + blockIdx.x * blockDim.x; //x方向的全局索引
int global_y = threadIdx.y + blockIdx.y * blockDim.y;//y方向上的索引

//全局唯一索引
int g_id = global_y  * (gridDim.x * blockDim.x) + global_x;



3.3 三维情况

只做了解,用的少

int global_x = blockIdx.x * blockDim.x + threadIdx.x;
int global_y = blockIdx.y * blockDim.y + threadIdx.y;
int global_z = blockIdx.z * blockDim.z + threadIdx.z;

int global_id = 
    (global_z * gridDim.y * blockDim.y + global_y) * (gridDim.x * blockDim.x) + global_x;
GPU概念:Thread, Block, Grid, Warp, SP, SM Stream(流)   流是一系列顺序执行的命令,流之间相对无序或并发的执行他们的命令。 Streaming Processor(SP)   最基本的处理单元, 具体的指令和任务都是在SP上处理的。GPU进行并行计算,也就是很多个SP同时做处理。现在SP的术语已经有点弱化了,而是直接使用thread来代替。一个SP对应一个thread。 Streaming Multiprocessor(SM)   多个sp加上其他的一些资源组成一个SM。其他资源包括存储资源,共享内存,寄储器等。一个SM中的所有.. 阅读详情

相关推荐

CUDA 编程(一)--grid、block、thread

正常程序执行在host(CPU)端,当需要到device(GPU)执行时,启动kernel(核函数,一个kernel对应一个线程)调用GPU。(K-G-B-T)

sinat_25267157的博客 1670

CUDA软件架构—网格(Grid)、线程块(Block)和线程(Thread)的组织关系以及线程索引的计算公式

网格(Grid)、线程块(Block)和线程(Thread)的组织关系 CUDA的软件架构由网格(Grid)、线程块(Block)和线程(Thread)组成,相当于把GPU上的计算单元分为若干(2~3)个网格,每个网格内包含若干(65535)个线程块,每个线程块包含若干(512)个线程,三者的关系如下图: Thread,block,grid是CUDA编程上的概念,为了方便程序员软件

牧野的博客 5万+

第二天:CUDA编程之thread/block/grid概念

一、CUDA C++对标准C++的扩展 1.允许用户定义C++函数,并用__global__前缀修饰,并且这类函数有个专用名字:kernel 2.调用kennel的时候需要在kernel名字和参数之间加<<<....>>>修饰,用来限定并行执行该kernel的thread个数。 3.每一个执行该kernel的thread都有一个特定的thread ID,程序中可以通过CUDA C++内建变量threadIdx来获取。 下面举个例子:两个(1,N)向量(向量A和向量

2676

CUDA中grid、block、thread、warp与SM、SP的关系

首先概括一下这几个概念。其中SM(Streaming Multiprocessor)和SP(streaming Processor)是硬件层次的,其中一个SM可以包含多个SP。thread是一个线程,多个thread组成一个线程块block,多个block又组成一个线程网格grid。 现在就说一下一个kenerl函数是怎么执行的。一个kernel程式会有一个grid,grid底下又有数个block,每个block...

ambition_zhou的博客 4980

1. CUDA中的grid和block

/ 确保内核完成后才继续执行主机代码 }

bobchen1017的博客 3480

LK32T102 单片机 操作GPIO实现流水灯(1)

前言: LK32T10232(32位)单片机是一款专为电机控制器和数字电源开发的高性能 MCU。采Cortex-M0 内核,最高工作频率可达 72Mhz,ADC 采样速率 达 1Msps。同时具备协处理器单元可满足各种乘法、除法、移位以及各种 复杂函数运算。 LK32T102(32位)支持单电源供电,且内嵌高精度高速及低速振荡器,以及具备 多种低功耗工作模式。同时,集成了多路增强型 PWM,多通道模拟比较 器和高速运算放大器,可满足多种电机及功率控制应用,并简化系统成本。...

qq_58676187的博客 3189

CUDA中grid、block、thread、warp、SM、SP

首先概括一下这几个概念。其中SM(Streaming Multiprocessor)和SP(streaming Processor)是硬件层次的,其中一个SM可以包含多个SP。thread是一个线程,多个thread组成一个线程块block,多个block又组成一个线程网格grid。 现在就说一下一个kenerl函数是怎么执行的。一个kernel程式会有一个grid,grid底下又有数个block,每个block是一个thread群组。在同一个block中thread可以通过共享内存(shared mem

1663

OLLAMA_HOST环境变量设置全攻略:从127.0.0.1到局域网共享的完整配置

本文详细解析了OLLAMA_HOST环境变量的核心作用与配置方法,指导用户如何将Ollama服务从仅限本机访问(127.0.0.1)扩展到局域网共享。文章涵盖了macOS、Linux、Windows三大平台的实战配置步骤,并提供了安全加固、性能优化及常见故障排查方案,是解决多设备协作访问本地AI模型的完整指南。

weixin_28455801的博客 1894

【CUDA】grid、block、thread的关系及thread索引的计算

CUDA中grid、block、thread的关系及thread索引的计算

hujingshuang 3万+

快手did did_gt edid的注册过程

接口 https://gdfp.ksapisrv.com/rest/infra/gdfp/report/kuaishou/android did 是本地生成的16进制 或者 获取的 android_id did_gt 是did生成时间戳 1595073601970 public static final Random f16237a = new Random(System.currentTimeMillis()); public static long m19668a() {  &n

HURUWO的技术博客 1万+

使用STM32微控制器实现光电传感器的接口和数据处理

本文将介绍如何使用STM32微控制器实现光电传感器的接口和数据处理的方案,包括硬件设计、引脚配置、数据采集、滤波和阈值判断等关键步骤,并给出相应的代码示例。本文将介绍如何使用STM32微控制器实现光电传感器的接口和数据处理的方案,包括硬件设计、引脚配置、数据采集、滤波和阈值判断等关键步骤,并给出相应的代码示例。在光电传感器的接口和数据处理的实现过程中,要关注系统的性能。在使用STM32微控制器实现光电传感器的接口和数据处理之前,需要设计一个合适的硬件平台。

weixin_66608063的博客 3199

CUDA编程——GPU架构,由sp,sm,thread,block,grid,warp说起

掌握部分硬件知识,有助于程序员编写更好的CUDA程序,提升CUDA程序性能,本文目的是理清sp,sm,thread,block,grid,warp之间的关系。由于作者能力有限,难免有疏漏,肯定读者批评指正。

Zhang Junior 的博客 5万+

Altium Designer 16安装教程(Windows11、小白教程)

Altium Designer 16在Windows11中的超详细安装教程

qq_47003770的博客 1万+

GPU架构,由sp,sm,thread,block,grid,warp说起

掌握部分硬件知识,有助于程序员编写更好的CUDA程序,提升CUDA程序性能,本文目的是理清sp,sm,thread,block,grid,warp之间的关系。由于作者能力有限,难免有疏漏,恳请读者批评指正。   首先我们要明确:SP(streaming Process),SM(streaming multiprocessor)是硬件(GPU hardware)概念。而thread,block,grid,warp是软件上的(CUDA)概念。 1.从硬件看 SP:最基本的处理单元,streamin...

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 8670

Moveit +Gazebo:搭建单臂机械臂仿真平台

Moveit +Gazebo:搭建单臂机械臂仿真平台

magic_invaid的博客 5287

Python学习第32天:Web前端入门

本文介绍了Web前端开发三大核心技术:HTML、CSS和JavaScript。首先概述了HTML的发展历程和HTML5新特性,详细讲解了常用HTML标签如文本、列表、链接、图像、表格、表单等。其次介绍了CSS的基础语法、选择器、颜色字体设置、盒子模型和布局定位方法。最后简要提及JavaScript为网页添加交互功能的作用。文章为Python开发者提供了前端技术的基础知识,帮助理解网页的结构、样式和行为实现原理。

tigerhhzz的博客 1910

CUDA结构之grid block thread SM SP warp 随笔

CUDA的线程模型

weixin_52173987的博客 3248

万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块

YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 14万+

cuda中的thread、block、grid

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.youkuaiyun.com/Tulip_Alice/article/details/135632121。下图中,有两个grid,每个grid中有4个block,每个block又有16个thread。cuda编程本质就是进行并行计算,就是同时用多个计算资源解决一个计算问题。下图左边是软件中的概念,右边则是与之对应的物理概念。

生活需要深度 1420

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SM,SP和GRID,BLOCK,THREAD之间的对应关系是什么?

SM,SP是硬件结构 GRID,BLOCK,THREAD是软件概念 从硬件角度讲,一个GPU由多个SM组成(当然还有其他部分),一个SM包含有多个SP(以及还有寄存器资源,shared memory资源,L1cache,scheduler,SPU,LD/ST单元等等),1.x硬件,一个SM包含8个SP,2.0是32个,2.1是48个,3.0和3.5是192个。以及SP目前也称为CUDA

程序员的自我修养_Will.zhang 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[原]CUDA中grid、block、thread、warp与SM、SP的关系

[原]CUDA中grid、block、thread、warp与SM、SP的关系 2015-3-27阅读209 评论0 首先概括一下这几个概念。其中SM(Streaming Multiprocessor)和SP(streaming Processor)是硬件层次的,其中一个SM可以包含多个SP。thread是一个线程,多个thread组成一个线程块block,多个block又组成一个线程网格

yu132563的专栏 3375

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

CUDA中grid、block、thread的设置简介

本文参考https://blog.youkuaiyun.com/hujingshuang/article/details/53097222上的内容 不同在于,本文将对原文进行补充,同时澄清一些易混淆的概念 CUDA中 grid、block、thread只要在最大值范围内,可以随意设置,最后系统会根据内部算法重新分配。因此grid、block、thread的设置其实只以你的“目的”有关。也就是说这几个值...

alualu628628的博客 2828

【GPU结构与CUDA系列3】GPU软件抽象:Grid,Block,Thread,Warp定义说明与硬件的映射执行细节

1 GPU运行机制总述 市面上有很多GPU厂家,他们产品的架构各不相同,但是核心往往差不多,整明白了一个基本上就可以触类旁通了。 1.0 GPU计算流程(CPU协同GPU计算) 一个典型的计算流程是这样的: 数据从CPU的内存拷贝到GPU的内存 CPU把计算指令传送给GPU GPU把计算任务分配到各个CUDA core并行处理 计算结果写到GPU内存里, 再拷贝到CPU内存里. 1.1 Host与Device 一个CUDA程序的可以分为两个部分(两者拥有各自的存储器): 在CPU上运行的称为Host程

呆呆象呆呆的博客 1万+

CUDA学习3-Grid、Block、Thread剖析

在grid中,从一堆block里面精确定位thread,也是类似的,从单个block的去寻找thread的逻辑 和 从单个grid的去寻找block的逻辑完全一样。在GPU中,为了高效的并行化计算,计算单元分为三个层级,Grid、Block以及Thread,之所以这样划分,是为了能够快速的索引到数据。Grid、Block以及Thread都是在逻辑层面上的概念上的计算单元划分,在物理层面其实不存在这样的划分。我们有个1维数据,长度是8,block的维度计划是4,也就是说threads个数是4,

wanzhong2333的博客 1221
上一篇: 5.共享内存和常量内存
下一篇: 6. cuda流和并发
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值