CUDA 线程索引公式
一、线程(thread)、线程块(block)、线程格(grid)
二、threadIdx、blockIdx、blockDim 和 gridDim 索引分析
1、先找到当前线程位于线程格中的哪一个线程块blockId
blockId = blockIdx.x + blockIdx.y*gridDim.x + blockIdx.z*gridDim.x*gridDim.y;
2、找到当前线程位于线程块中的哪一个线程threadId
threadId = threadIdx.x + threadIdx.y*blockDim.x + threadIdx.z*blockDim.x*blockDim.y;
3、计算一个线程块中一共有多少个线程M
M = blockDim.x*blockDim.y*blockDim.z
4、求得当前的线程序列号idx
idx = threadId + M*blockId;
三、全三维情况一般公式:
int blockId = blockIdx.z * (gridDim.x*gridDim.y)
+ blockIdx.y * gridDim.x
+ blockIdx.x;
int threadId = blockId * (blockDim.x * blockDim.y * blockDim.z)
+ threadIdx.z * (blockDim.x * blockDim.y)
+ threadIdx.y * blockDim.x
+ threadIdx.x;
四、不同维度的 kernel 调用
kernel调用:
kernel<<<numBlock,threadPerBlock>>>(a,b)
这是调用kernel时的参数,尖括号<<<>>>中第一个参数代表启动的线程块的数量,第二个参数代表每个线程块中线程的数量.
总的线程号:
设线程号为tid,以下讨论几种调用情况下的tid的值,这里只讨论一维/二维的情况
一维:
1.kernel<<<1,N>>>()
block和thread都是一维的,启动一个block,里面有N个thread,1维的。
tid=threadIdx.x
2.kernel<<<N,1>>>()
启动N个一维的block,每个block里面1个thread
tid=blockIdx.x
3.kernel<<<M,N>>>()
启动M个一维的block,每个block里面N个一维的thread
tid=threadIdx.x+blockIdx.x * blockDim.x
二维:
4.dim grid(m,n)
kernel<<<grid,1>>>()
启动一个二维的m*n个block,每个block里面一个thread
tid=blockIdx.x+blockIdx.y * gridDimx.x
5.dim grid(m,n)
kernel<<<grid,N>>>()
启动一个二维的m*n大小的block,每个block里面N个thread
tid=
6.dim block(m,n)
kernel<<<1,block>>>()
7.dim block(m,n)
kernel<<<N,block>>>()
8.dim grid(m,n)
dim block(i,j)
kernel<<<grid,block>>>()
CUDA 线程索引公式相关推荐
- CUDA软件架构—网格(Grid)、线程块(Block)和线程(Thread)的组织关系以及线程索引的计算公式
网格(Grid).线程块(Block)和线程(Thread)的组织关系 CUDA的软件架构由网格(Grid).线程块(Block)和线程(Thread)组成,相当于把GPU上的计算单元分为若干(2~3 ...
- 深入理解CUDA线程层次以及关于设置线程数的思考
深入理解CUDA线程层次以及关于设置线程数的思考 2015-09-16 08:45 215人阅读 评论(0) 收藏 举报 分类: cuda(24) GPU线程以网格(grid)的方式组织,而每个网格中 ...
- 最优的cuda线程配置
最优的cuda线程配置 1 每个SM上面失少要有192个激活线程,寄存器写后读的数据依赖才能被掩盖 2 将 寄存器 的bank冲突降到最低,应尽量使每个block含有的线程数是64的倍数 3 ...
- GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考
GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...
- CUDA——线程配置
前言 线程的组织形式对程序的性能影响是至关重要的,本篇博文主要以下面一种情况来介绍线程组织形式: 2D grid 2D block 线程索引 矩阵在memory中是row-major线性存储的: 在k ...
- (CUDA 编程1).CUDA 线程执行模型分析(一)招兵 ------ GPU的革命
(CUDA 编程1).CUDA 线程执行模型分析(一)招兵 ------ GPU的革命 作者:赵开勇 来源:http://www.hpctech.com/2009/0818/198.html 序:或许 ...
- cuda线程束原语 __shfl_xor、__shfl、__shfl_up()、__shfl_down()
在CC3.0以上,支持了shuffle指令,允许thread直接读其他thread的寄存器值,只要两个thread在 同一个warp中,这种比通过shared Memory进行thread间的通讯效果 ...
- CUDA线程、线程块、线程束、流多处理器、流处理器、网格概念的深入理解
一.与CUDA相关的几个概念:thread,block,grid,warp,sp,sm. sp: 最基本的处理单元,streaming processor 最后具体的指令和任务都是在sp上处理的.G ...
- CUDA——线程束分化
本文是阅读<CUDA C 编程权威指南>所做的笔记 1. 线程束分化 线程束是SM中基本的执行单元. 当一个线程块的网格被启动后, 网格中的线程块分布在SM中. 一旦线程块被调度到一个SM ...
最新文章
- bzoj2020[Usaco2010 Jan]Buying Feed, II*
- windows下cd无法切换到指定目录下
- 获取以逗号分隔的多个数据输入成列表,计算基本统计值(平均值、标准差、中位数)
- Swift 协议protocol
- resque java_php-resque :基于Redis的后台任务系统
- 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
- 走进COM组件系列(三)
- trueOS能装linux软件,GhostBSD 19.09 发布,使用来自TrueOS软件包
- 通俗易懂理解几何光学(三)平面与平面系统
- 转载 elm中文手册
- chm提示 已取消到该网页的导航的解决方法
- 计算机知网期刊排名,中国知网网络首发期刊榜单发布,《重庆医学》进入高发文量TOP50(科技类)...
- Linux下的32位C程序,linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件...
- asp.net 是什么?
- 激动!!!他用脚拆开研究生录取通知书
- 蜗牛君漫聊设计模式---建造者模式
- 如何去掉行首行尾的空格
- map什么意思java_map的意思是什么,java中Maplt;?,?gt;是什么意思
- 如何在OC类里 调用swift类
- safari保存视频_如何使用Safari的“阅读列表”保存文章供以后使用