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并行程序设计系列(3)】CUDA线程模型

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

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

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

CUDA 学习(七)、线程束

一、概述        线程束是GPU的基本执行单元。GPU是一组SIMD 向量处理器的集合。每一组线程或线程束中的线程同时执行。在理想状态下,获取当前指令只需要一次访存,然后将指令广播到这个线程所...

CUDA 学习(六)、线程网格

一、概述        一个线程网格是由若干线程块组成的,每个线程块是二维、三维的,拥有X轴、Y轴、Z轴。此时,每次最多能开启Y*X*Z*T 个线程。        通常线程块中线程数量最好是一个...

CUDA性能优化----线程配置

CUDA性能优化----线程配置   2017-01-12 14:19:29|  分类: HPC&CUDA优化 |  标签:cuda  gpu  hpc   |举报 |字号 订阅 ...

CUDA的线程块size

前面扯了很多,不过大多都是在讲CUDA 在软体层面的东西;接下来,虽然Heresy 自己也不熟,不过还是来研究一下硬体的部分吧~毕竟要最佳化的时候,好像还是要大概知道一下相关的东西的。这部分主要参考资...
  • DSQ_17
  • DSQ_17
  • 2014年03月18日 14:21
  • 451

CUDA一维线程

自己敲的第一个并行计算程序/**实现线程的显示*/#include #include #include // For the CUDA runtime routines (prefixed wit...
  • NYG8945
  • NYG8945
  • 2016年10月18日 18:03
  • 168

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

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

CUDA下的GPU编程--线程和变量

CUDA的线程是多维的,启动一个线程格,线程格可以是多维的,线程格中分为线程块,线程块也可以是多维的,线程块中包含线程,对于GPU来说,同时启动200万个线程是很轻易的事情。 blockIdx ...

CUDA下的GPU编程--线程和变量

CUDA的线程是多维的,启动一个线程格,线程格可以是多维的,线程格中分为线程块,线程块也可以是多维的,线程块中包含线程,对于GPU来说,同时启动200万个线程是很轻易的事情。 blockIdx :当...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CUDA线程模型
举报原因:
原因补充:

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