线程组织
来源:互联网 发布:淘宝客服有发展前景吗 编辑:程序博客网 时间:2024/04/30 12:15
CUDA内置变量
uint3 gridDim; //单个网格中每一维度上的块数uint3 blockIdx; //块在网格中的索引uint3 blockDim; //单个块中每一维度上的线程数uint3 threadIdx; //线程在块中的索引
调用kernek函数
dim3 gridDims , blockDims; //对应device端的gridDim和blockDimkernelFunc <<<gridDims,blockDims>>> (args);
从硬件角度考虑线程的连续性,维度从低到高的顺序是blockIdx.x,blockIdx.y,blockIdx.z。由于不同块可能在不同的SM上执行,所以其相邻性不确定。计算线程绝对索引的方式为
uint numThreadsPerBlockLine = blockDim.x;uint numThreadsPerBlockPlane = numThreadsPerBlockLine.x * blockDim.y;uint numThreadsPerBlock = numThreadsPerBlockPlane * blockDim.z;uint numThreadsPerGridLine = numThreadsPerBlock * gridDim.x;uint numThreadsPerGridPlane = numThreadsPerGridLine * gridDim.y;uint id = numThreadsPerGridPlane * blockIdx.z + numThreadsPerGridLine * blockIdx.y + numThreadsPerBlock * blockIdx.x + numThreadsPerBlockPlane * threadIdx.z + numThreadsPerBlockLine * threadIdx.y + threadIdx.x;uint ix = blockIdx.x * blockDim.x + threadIdx.x;uint iy = blockIdx.y * blockDim.y + threadIdx.y;uint iz = blockIdx.z * blockDim.z + threadIdx.z;uint threadsPerLine = gridDim.x * blockDim.x;uint threadPerColumn = gridDim.y * blockDim.y;uint threadsPerPlane = threadsPerLine * threadsPerColumn;uint id = threadsPerPlane * iz + threadsPerLine * iy + ix;
- 将二维线程索引和块索引转换为二维内存索引时,通常是为了处理图像,所以同一块中的线程对应的像素数据应该具备空间局部性。此时的解决方法是使用共享内存缓存块对应的像素内存,或使用纹理内存。不论使用哪一种方法,二维内存索引的计算方式都不能使用计算线程绝对索引的方法,因为该方法得到的索引在内存上连续(连续内存和空间局部性冲突)。
0 0
- 线程组织
- cuda中线程的组织
- 线程的组织方式:流水线结构
- 组织
- 组织
- 黑马程序员_Java中的多线程(创建和组织线程)
- Linux内核进程和线程组织模型 (基于Kernel 4.3-rc3)
- 组织看电影
- 组织概况
- 2. 组织
- 2.组织
- 三叶草组织
- 组织宣言
- CPU 组织
- 诗情组织
- 组织结构图
- 内存组织
- 加入组织
- if-else和try-catch
- ATEN推出全新NRGence™ 绿能产品线 打造高效节能数据中心
- 让我们来谈谈分工
- 解读Android之Service(2)Bound Service
- Android传感器介绍
- 线程组织
- elgnairT.120
- 特性001
- 基于Qunee for html5的流程图设计
- C++ operator关键字(操作符重载)
- c#版三层登录
- mysql复制表的操作
- 慕课网----大话PHP设计模式 二(数据结构的php实现,链式操作,php魔方方法的使用)
- 程序员必定会爱上的十款软件