cuda 线程索引ID的计算公式(图文)

news2024/10/6 1:38:43

博客中有一部分公式来自:cuda 线程索引ID的计算公式_blockidx.x_奕星星奕的博客-CSDN博客

我做的工作就是加了图更加形象的表示,还有公式的延申。

线程索引的计算公式
一个Grid可以包含多个Blocks,Blocks的组织方式可以是一维的,二维或者三维的。block包含多个Threads,这些Threads的组织方式也可以是一维,二维或者三维的。

CUDA中每一个线程都有一个唯一的标识ID—ThreadIdx,这个ID随着Grid和Block的划分方式的不同而变化,这里给出Grid和Block不同划分方式下线程索引ID的计算公式。

1、 grid划分成1维,block划分为1维

     int threadId = blockIdx.x *blockDim.x + threadIdx.x;  

     特例,当一维的grid值为(1,1,1)时,此时有:

     int threadId = threadIdx.x;
    


2、 grid划分成1维,block划分为2维  

     int threadId = blockIdx.x * blockDim.x * blockDim.y+ threadIdx.y * blockDim.x + threadIdx.x;  
  

2.1、 grid划分成1维,block划分为2维(另一种排列方式)

int x = (blockIdx.x * blockDim.x) + threadIdx.x;

int y = threadIdx.y;

int threadId = y * (gridDim.x * blockDim.x) + x;

 

特例,当一维的grid值为(1,1,1)时,此时有:

int x = threadIdx.x;

int y = threadIdx.y;

int threadId = y * blockDim.x + x;


  
3、 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;  


  
4、 grid划分成2维,block划分为1维  

     int blockId = blockIdx.y * gridDim.x + blockIdx.x;  
    int threadId = blockId * blockDim.x + threadIdx.x;  

4.1、grid划分成2维,block划分为1维(另一种排列方式)

int x = (blockIdx.x * blockDim.x) + threadIdx.x;

int y = blockIdx.y;

int threadId = y * (gridDim.x * blockDim.x) + x;


   
5、 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;  

5.1、grid划分成2维,block划分为2维(另一种排列方式)

int x = (blockIdx.x * blockDim.x) + threadIdx.x;

int y = (blockIdx.y * blockDim.y) + threadIdx.y;

int threadId = y * (gridDim.x * blockDim.x) + x;
    

  
6、 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;  
   
  
7、 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;  
   
  
8、 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;  
   
  
9、 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;   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/748266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot人脸识别基于java的游戏推荐管理平台的设计及实现_0816qvue

表名:messages 功能:留言板 字段名称 类型 长度 字段说明 主键 默认值 id bigint 主键 主键 addtime timestamp 创建时间 CURRENT_TIMESTAMP userid bigint 留言人id username v…

数据结构--绪论

这里写目录标题 前言数据结构研究内容基本概念与术语数据元素与数据对象的区别数据结构逻辑结构存储结构 数据类型和抽象数据类型数据类型抽象数据类型定义格式举例 小结研究内容基础概念 抽象数据类型的表示和实现 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录…

什么是团体标准?

团体标准是由一个特定的组织、团体或行业共同制定的标准。它是一种在特定领域或行业中被广泛认可和采用的标准化文件,旨在规范产品、服务或流程的要求和规范。团体标准通常由行业协会、标准化组织或特定领域的专业团体开发,并经过广泛讨论、协商和验证&a…

【分享】报告!发现一个低代码数据可视化开发平台~

前言: 哈喽,大家好,我是木易巷~ 最近木易巷发现了一个低代码数据可视化开发平台,快来看看吧~ 1、介绍 GoView 是一个拖拽式低代码数据可视化开发平台,旨在帮助用户快速构建数据大屏,同时减少心智负担。通…

【沈阳航空航天大学808】22年真题及解析

哈喽大家好,鉴于真题系列反馈很不错,我决定重启真题系列! 今天分享的是沈阳航空航天大学808信号与系统的试题及解析。本套试题难度中等,题量不多,相关计算复杂程度不大,考察了状态方程以及电路模型和稳态响…

token的验证流程

前端 后台 1.1 登录接口(携带账号和密码(MD5)) -->到后台 需要: 验证(账号密码)生成Token(包含id昵称,不敏感的数据) 1.2 后台需要解析,-->然后在前端显示 解析(解析出前端需要显示的数据)把token放到某一个位置…

2023年Unity面试题大全,共十万字面试题总结【收藏一篇足够面试,持续更新】

🎈前言 为了方便大家可以重点复习某个模块,所以将各方面的知识点进行了拆分并更新整理了新的内容,并对之前的版本中有些模糊的地方进行了纠正。此篇文章为Unity所有面试题模块的目录导航文章,全网最全的 Unity 面试题 都在这里了…

6.2.7 简单邮件传送协议SMTP

6.2.7 简单邮件传送协议SMTP 我们从一个SMTP发送的示例来了解简单邮件传送协议SMTP。 例:在主机Alpha.ARPA上的Smith发送邮件给在主机Beta.ARPA 的Jones.Green和Brown的过程。这里我们假定主机Alpha直接联系主机Beta。 Sender-SMTP和Receiver-SMTP建立了传输信道…

Hive(27): join连接查询

1 join概念回顾 根据数据库的三范式设计要求和日常工作习惯来说,我们通常不会设计一张大表把所有类型的数据都放在一起,而是不同类型的数据设计不同的表存储。比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系。而不可以在订单表中添加关…

FreeSwitch 1.10.9 在CentOS7.9编译spandsp,V18_MODE_5BIT_4545错误

最近FreeSwitch 1.10.9 在CentOS7.9编译mod_spandsp出问题, making all mod_spandsp make[4]: Entering directory /usr/local/src/freeswitch-1.10.9.-release/src/mod/applications/mod_spandspCC mod_spandsp_la-mod_spandsp.loCC mod_spandsp_la-udptl.loCC …

【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性

目录 一、分布式锁实现原理二、不同的分布式锁实现方案三、Redis 的 setnx 实现互斥锁四、基于 Redis 实现分布式锁初级版五、误删锁问题(业务阻塞导致)六、误删锁(Redis 命令原子性导致)(1) Lua 脚本(2) Redis 编写和执行 Lua 脚…

VSCode LSP 语言服务器协议总结

为什么使用语言服务器协议? LSP(Language Server Protocol)语言服务器是一种特殊的 Visual Studio Code 扩展,可为许多编程语言提供编辑体验。使用语言服务器,您可以实现自动完成、错误检查(诊断)、跳转到定义以及VS …

python绘制二维直方图

文章目录 histscatterhist2d histscatter 如果想描述二维数据的分布特征,那么一个直方图显然是不够用的,为此可使用两个直方图分别代表x和y方向上的分布情况,同时透过散点图查看其整体的分布特征。 下面创建一组二元高斯分布的数据&#xf…

Nature揭秘:足量提供这个营养素可激活免疫细胞对抗肿瘤

圣犹太儿童研究医院(St. Jude Childrens Research Hospital)的科学家们发现,免疫细胞和肿瘤细胞在它们的局部环境中争会夺谷氨酰胺。谷氨酰胺是一种营养物质,对抗癌活性具有重要意义。如果癌细胞垄断谷氨酰胺,则可以阻…

2023年7月广州/东莞/深圳传统行业产品经理NPDP认证招生

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

单例模式:懒汉式和饿汉式

目录 懒汉模式和饿汉模式 区别 示例 懒汉模式线程不安全 懒汉模式线程安全 懒汉模式内部静态变量线程安全 饿汉式线程安全 指的是在系统生命周期内,只产生一个实例。 懒汉模式和饿汉模式 分为懒汉式和饿汉式 区别 创建时机和线程安全 线程安全&#xff1…

密码学入门——单向散列函数

文章目录 参考书一、简介二、术语介绍三、散列函数的应用四、单向散列函数的具体例子 参考书 图解密码技术,第三版 一、简介 单向散列函数(One-way Hash Function)是一种将任意长度的输入数据映射为固定长度输出的函数。该函数通常被用于密…

asyncio.run() cannot be called from a running event loop

这个问题一般在jupyter中出现 搜到的解决方法也不怎么好用 知道看到了这个评论 很感谢 # pip install nest_asyncio首先安装此模块 import nest_asyncio#调用 nest_asyncio.apply()成功解决

如何整合spring cloud常用组件?

目录 一、SpringCloud Alibaba 简介 1、简介 2、为什么使用 3、版本选择 4、项目中的依赖 二、SpringCloud Alibaba-Nacos[作为注册中心] 1、下载 nacos-server 2、启动 nacos-server 3、将微服务注册到 nacos 中 三、SpringCloud Alibaba-Nacos[作为配置中心] 四、…

天猫精灵狄耐克联合研发新品, 携手打造智慧居家新体验

2023年6月28日,以“以Ai相伴,智慧赋能”为主题的2023厦门人工智能产业高峰论坛,在素有“中国软件特色名城”美誉的厦门隆重举行。 2023厦门人工智能产业高峰论坛现场 厦门狄耐克智能科技股份有限公司与阿里巴巴智能互联成为战略合作伙伴&…