博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cuda线程/线程块索引小结
阅读量:6540 次
发布时间:2019-06-24

本文共 1240 字,大约阅读时间需要 4 分钟。

内建变量:

threadIdx(.x/.y/.z代表几维索引):线程所在block中各个维度上的线程号

blockIdx(.x/.y/.z代表几维索引):块所在grid中各个维度上的块号

blockDim(.x/.y/.z代表各维度上block的大小):block的大小即block中线程的数量,blockDim.x代表块中x轴上的线程数量,blockDim.y代表块中y轴上的线程数量,blockDim.z代表块中z轴上的线程数量

gridDim(.x/.y/.z代表个维度上grid的大小):grid的大小即grid中block的数量,gridDim.x代表grid中x轴上块的数量,gridDim.y代表grid中y轴上块的数量,gridDim.z代表grid中z轴上块的数量

定义grid、block大小:

dim3 numBlock(m,n)

dim3 threadPerBlock(i,j)

则blockDim.x=i;blockDim.y=j;gridDim.x=m;gridDim.y=n

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>>>()

 

转载于:https://www.cnblogs.com/shrimp-can/p/5051832.html

你可能感兴趣的文章
ipsec的***在企业网中的经典应用
查看>>
过来人谈《去360还是留在百度?》
查看>>
mysql备份工具innobackupex,xtrabackup-2.1安装,参数详解
查看>>
本地Office Project计划表同步到SharePoint2013任务列表的权限问题
查看>>
Windows2008 R2 GAC权限问题
查看>>
洛谷——P1469 找筷子
查看>>
springboot项目自定义注解实现的多数据源切换
查看>>
特此说明
查看>>
使用flume替代原有的scribe服务
查看>>
Windows Server 2008 启用公共文件夹共享
查看>>
Apple Watch的非“智能手表”卖点
查看>>
函数指针和指针函数
查看>>
Python的函数参数传递:传值?引用?
查看>>
[转]分享2011年8个最新的jQuery Mobile在线教程
查看>>
android call require api level
查看>>
SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第一篇)
查看>>
SilverLigth学习笔记--控制 Silverlight控件样式(转)
查看>>
poj3262
查看>>
4、动态代理
查看>>
轮毂电机光电增量编码器的ABZ信号详解
查看>>