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线程模型二

一个grid中的所有线程执行相同的内核函数,通过坐标进行区分。这些线程有两级的坐标,blockId和threadId,由CUDA runtime system指定。grimDim.x标识block在x...
  • a925907195
  • a925907195
  • 2014年09月26日 22:08
  • 1468

cuda的线程模型

cuda中所有的线程由一个线程格表示,线程格分为若干个线程块,每个线程块有若干个线程。还有,线程格和线程块都有一维形式和二维形式的表示。刚开始看代码觉得有点乱, 干脆自己整理一下,清晰自己的思路。 ...
  • linger2012liu
  • linger2012liu
  • 2014年03月10日 16:59
  • 2318

CUDA编程(三):线程模型

一.CUDA线程模型概览首先要搞清楚的就是线程网格(grid),线程块(block)和线程(thread)之间的关系. 在前面的文章里面就已经看到了核函数kernel但是并不知道这个核函数启动的...
  • xierhacker
  • xierhacker
  • 2016年10月06日 20:47
  • 943

cuda线程模型

。。。
  • ddl2111
  • ddl2111
  • 2014年09月12日 15:05
  • 331

CUDA笔记二线程模型

一个grid中的所有线程执行相同的内核函数,通过坐标进行区分。这些线程有两级的坐标,blockId和threadId,由CUDA runtime system指定。grimDim.x标识block在x...
  • u014800094
  • u014800094
  • 2016年04月08日 22:29
  • 305

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

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

Netty系列三:netty线程模型

netty使用reactor反应堆线程模型。一、Reactor模型单线程模型如下: 用户发起IO操作到事件分离器 事件分离器调用相应的处理器处理事件 事件处理完成,事件分离器获得控制权,继续相应处理...
  • cj2580
  • cj2580
  • 2017年09月28日 16:09
  • 168

Java线程模型、线程状态 - 线程(1)

1. 概述众所周知,线程 - Thread 是比进程 - Progress 更轻量级的调度单位。简单来说,引入线程带来的好处是: 可以把一个进程 的资源分配和执行调度分开,各个线程 既可以共享进程...
  • u010297957
  • u010297957
  • 2016年05月06日 15:26
  • 2126

tomcat 线程模型

最近看到了内网ATA上的一篇断网故障时Mtop触发tomcat高并发场景下的BUG排查和修复(已被apache采纳),引起了我的好奇,感觉原作者对应底层十分了解,写的很复杂。原来对于tomcat的线程...
  • qq_16681169
  • qq_16681169
  • 2017年07月12日 09:01
  • 1520

Linux线程模型比较

转载自https://www.ibm.com/developerworks/cn/linux/l-threading.html 进行移植的开发人员需要了解的关键区别摘要LinuxThreads 项目...
  • derkampf
  • derkampf
  • 2017年03月03日 21:39
  • 727
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CUDA线程模型
举报原因:
原因补充:

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