内建变量与线程索引
2016-06-08 22:05
141 查看
****执行配置运算符<<< >>>,用来传递内核函数的执行参数:
执行配置有四个参数,
第 一个参数声明网格的大小,
第二个参数声明块的大小,
第三个参数声明动态分配的 共享存储器大小,默认为 0,
最后一个参数声明执行的流,默认为 0。
****五个内建变量,用于在运行时获得网格和块的尺寸及线程索引等信息:
1. gridDim, gridDim 是一个包含三个元素 x,y,z 的结构体,分别表示网格在 x,y,z 三个方向上的尺寸,虽然其有三维,但是目前只能使用二维; 线程格的维度
2, blockDim, blockDim 也是一个包含三个元素 x,y,z 的结构体,分别表示块在 x,y,z 三个方向上的尺寸(blockDim.x,blockDim.y,blockDim.z)
对应于执行配置中的第一个参数,对应于执行配置 的第二个参数; 线程块的维度
3, blockIdx, blockIdx 也是一个包含三个元素 x,y,z 的结构体,分别表示当前线 程所在块在网格中 x,y,z 三个方向上的索引(blockIdx.x,blockIdx.y,blockIdx.z); 线程块的ID索引(block在grid中的位置)
4, threadIdx, threadIdx 也是一个包含三个元素 x,y,z 的结构体,分别表示线程在其所在块中 x,y,z 三个方向上的索引; 线程ID的索引(即线程在block中的位置)
5, warpSize,warpSize 表明 warp 的尺寸,在计算能力为 1.0 的设备中,这个值是 24,在 1.0 以上的设备中,这个值是 32。
6. 对于一维的block,线程的 threadID
= threadIdx.x
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/qqC833D5CF28F6A2173333D44D14C25340/3595e1afbc184680bad035a1fe4cbd6c/clipboard.png)
7. 对于大小为(blockDim.x,
blockDim.y)的 二维 block,线程的 threadID=threadIdx.x+threadIdx.y*blockDim.x
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/qqC833D5CF28F6A2173333D44D14C25340/2f54365200554e42a33404e150d8e28f/clipboard.png)
比如thread(1,1)的相对位置为: 1+ 1*16=17
8. 对于大小为(blockDim.x, blockDim.y, blockDim.z)的 三维 block,线程的 threadID=threadIdx.x+threadIdx.y*blockDim.x+threadIdx.z*blockDim.x*blockDim.y
![](http://img.blog.csdn.net/20160608220554604?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
实例:
__global__ void matrixAddition(float *a, float *b, float *c)
{
int x = blockIdx.x * blockDim.x + threadIdx.x ;
int y = blockIdx.y * blockDim.y + threadIdx.y ;
int dimGx = gridDim.x;
int dimGy = gridDim.y;
int offset = y * dimGx * blockDim.x + x;
c[offset] = a[offset] + b[offset];
}
// 4个Block ,每个Block为20*20个thread
// float a[N * N], b[N * N], c[N * N];//40*40
int gridSize = 2*2;
dim3 blockSize(N/2, N/2);//20 * 20
matrixAddition<<<gridSize, blockSize>>>(dev_a, dev_b, dev_c);
执行配置有四个参数,
第 一个参数声明网格的大小,
第二个参数声明块的大小,
第三个参数声明动态分配的 共享存储器大小,默认为 0,
最后一个参数声明执行的流,默认为 0。
****五个内建变量,用于在运行时获得网格和块的尺寸及线程索引等信息:
1. gridDim, gridDim 是一个包含三个元素 x,y,z 的结构体,分别表示网格在 x,y,z 三个方向上的尺寸,虽然其有三维,但是目前只能使用二维; 线程格的维度
2, blockDim, blockDim 也是一个包含三个元素 x,y,z 的结构体,分别表示块在 x,y,z 三个方向上的尺寸(blockDim.x,blockDim.y,blockDim.z)
对应于执行配置中的第一个参数,对应于执行配置 的第二个参数; 线程块的维度
3, blockIdx, blockIdx 也是一个包含三个元素 x,y,z 的结构体,分别表示当前线 程所在块在网格中 x,y,z 三个方向上的索引(blockIdx.x,blockIdx.y,blockIdx.z); 线程块的ID索引(block在grid中的位置)
4, threadIdx, threadIdx 也是一个包含三个元素 x,y,z 的结构体,分别表示线程在其所在块中 x,y,z 三个方向上的索引; 线程ID的索引(即线程在block中的位置)
5, warpSize,warpSize 表明 warp 的尺寸,在计算能力为 1.0 的设备中,这个值是 24,在 1.0 以上的设备中,这个值是 32。
6. 对于一维的block,线程的 threadID
= threadIdx.x
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/qqC833D5CF28F6A2173333D44D14C25340/3595e1afbc184680bad035a1fe4cbd6c/clipboard.png)
7. 对于大小为(blockDim.x,
blockDim.y)的 二维 block,线程的 threadID=threadIdx.x+threadIdx.y*blockDim.x
![](file:///C:/Users/Administrator/AppData/Local/YNote/data/qqC833D5CF28F6A2173333D44D14C25340/2f54365200554e42a33404e150d8e28f/clipboard.png)
比如thread(1,1)的相对位置为: 1+ 1*16=17
8. 对于大小为(blockDim.x, blockDim.y, blockDim.z)的 三维 block,线程的 threadID=threadIdx.x+threadIdx.y*blockDim.x+threadIdx.z*blockDim.x*blockDim.y
实例:
__global__ void matrixAddition(float *a, float *b, float *c)
{
int x = blockIdx.x * blockDim.x + threadIdx.x ;
int y = blockIdx.y * blockDim.y + threadIdx.y ;
int dimGx = gridDim.x;
int dimGy = gridDim.y;
int offset = y * dimGx * blockDim.x + x;
c[offset] = a[offset] + b[offset];
}
// 4个Block ,每个Block为20*20个thread
// float a[N * N], b[N * N], c[N * N];//40*40
int gridSize = 2*2;
dim3 blockSize(N/2, N/2);//20 * 20
matrixAddition<<<gridSize, blockSize>>>(dev_a, dev_b, dev_c);
相关文章推荐
- 299.[leetcode]Bulls and Cows
- 使用Brackets编写Sass代码
- 云原生应用程序架构的五大特性(上)- 12要素应用
- 第14章 抽象类和接口
- 0608 (用户故事)任务-具体工作流程安排
- 把一个内容为16进制 的文本文件,转换成10进制的文本文件
- 机器学习、自然语言处理、大数据和keras学习资料
- java图形和文本学习
- 张小军:象征资本的再生产——从阳村宗族论民国基层社会
- EditText设置IME动作问题
- 折半插入排序
- Ubuntu 14.04+Opencv-2.4.9+Qt配置
- 2016-6-8
- 梦断代码阅读笔记01
- Appium+Robotframework实现手机应用的自动化测试-1:Appium简介
- 用Redis存储Tomcat集群实现Session共享
- 第15周阅读程序(1)
- 【HTML笔记三】认识标签二
- .典型用户 - 场景
- C++第二次上机5-5