CUDA线程模型

转载 2015年11月21日 10:00:24


线程格:

gridDim.x 个线程块组成

线程块:

blockDim.x 个线程组成

下面线程格就是由 4 个线程块组成,其中每个线程块有4个线程。


定位某个线程的方法:

threadIdx.x 表示该线程于所在线程块的索引

blockIdx.x 表示线程块于线程格的索引

根据 blockIdx.x 找到线程块,再根据 threadIdx.x 找到对应的线程。

----------------------------------------------------------------------------------------------------------------------

二维形式的线程格和二维形式的线程块

线程格:

gridDim.x*gridDim.y 个线程块组成

线程块:

blockDim.x*blockDim.y 个线程组成


每个小矩形表示线程块,小矩形下面的圈表示线程。

定位某个线程的方法:

根据线程块的索引( blockIdx.x blockIdx.y )找到线程块,就是上图每个小矩形的左上角的坐标。

然后根据线程的索引( threadIdx.x threadIdx.y )找到线程。

代码表示举例:

一维 形式:

kernel<<<N,1>>>( );

为该函数启用 N 个线程块,每个线程块启用 1 个线程。

kernel<<<1,N>>>( );

为该函数启用 1 个线程块,每个线程块启用 N 个线程。

二维形式:

dim3 grid(DIM,DIM);

kernel<<<grid,1>>>();

为该函数启用 DIM*DIM 个线程块,每个线程块启用一个线程。

dim3 blocks(DIM/16,DIM/16);

dim3 threads(16,16);

kernel<<<blocks,threads>>>( );

为该函数启用 blocks 个线程块, threads 个线程。

内存共享和同步 :

所谓的共享内存,是指同一线程块中,里面线程共享。

线程同步(通过 syncthreads 实现)也是。块与块之间不影响。

当某些线程需要执行一条指令,而其他线程不需要执行时,这种情况就成为线程发散。

cuda 架构规定,除非线程块中的每个线程都执行了 syncthreads(), 否则没有任何线程

能执行 syncthreads 之后的指令。



相关文章推荐

CUDA二维网格模型下线程索引的计算

 用于线程索引计算的CUDA运行时库提供的变量 gridDim.x —— 线程网格X维度上线程块的数量 gridDim.y —— 线程网格Y维度上线程块的数量 blockDim.x...

深入理解CUDA线程层次以及关于设置线程数的思考

GPU线程以网格(grid)的方式组织,而每个网格中又包含若干个线程块,在G80/GT200系列中,每一个线程块最多可包含512个线程,Fermi架构中每个线程块支持高达1536个线程。同一线程块中的...

CUDA总结:线程网络和线程分配

线程网络 cuda将线程抽象为grid、block、thread三个层次,构成两种视图: 视图1:一个device就是一个grid,grid的最小元素是block,一个grid由若干个block组...

线程网络的分配

转载自 从0开始学习《GPU高性能运算之CUDA》——25 GPU也不允许偏心并行的事情多了,我们作为 GPU 的指令分配者,不能偏心了——给甲做的事情多,而乙没事做,个么甲肯定不爽的来。所以,在 G...

【CUDA并行程序设计系列(3)】CUDA线程模型

CUDA并行程序设计系列是本人在学习CUDA时整理的资料,内容大都来源于对《CUDA并行程序设计:GPU编程指南》、《GPU高性能编程CUDA实战》和CUDA Toolkit Documentatio...

CUDA一维线程

自己敲的第一个并行计算程序/**实现线程的显示*/#include #include #include // For the CUDA runtime routines (prefixed wit...

CUDA线程协作之共享存储器“__shared__”&&“__syncthreads()”

在GPU并行编程中,一般情况下,各个处理器都需要了解其他处理器的执行状态,在各个并行副本之间进行通信和协作,这涉及到不同线程间的通信机制和并行执行线程的同步机制。 共享内存“__share__” ...
  • dcrmg
  • dcrmg
  • 2017-02-05 12:29
  • 777

CUDA笔记二线程模型

一个grid中的所有线程执行相同的内核函数,通过坐标进行区分。这些线程有两级的坐标,blockId和threadId,由CUDA runtime system指定。grimDim.x标识block在x...

CUDA入门(三) 初探线程与块

在配置GPU时一般都看重其的架构,流处理器数,以及显存数。 以英伟达的GPU为例架构一般以科学家的名字来命名,如Fermi(费米),Kepler(开普勒),现在主流的Maxwell(麦克斯韦),Pa...

(二)了解CPU、GPU、进程、线程、CUDA

GPU和CPU的区别是什么?
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)