内建变量:

threadIdx(.x/.y/.z代表几维索引):线程所在block中各个维度上的线程号

blockIdx(.x/.y/.z代表几维索引):块所在grid中各个维度上的块号

blockDim(.x/.y/.z代表各维度上block的大小):block的大小即block中线程的数量,blockDim.x代表块中x轴上的线程数量,blockDim.y代表块中y轴上的线程数量,blockDim.z代表块中z轴上的线程数量

gridDim(.x/.y/.z代表个维度上grid的大小):grid的大小即grid中block的数量,gridDim.x代表grid中x轴上块的数量,gridDim.y代表grid中y轴上块的数量,gridDim.z代表grid中z轴上块的数量

定义grid、block大小:

dim3 numBlock(m,n)

dim3 threadPerBlock(i,j)

则blockDim.x=i;blockDim.y=j;gridDim.x=m;gridDim.y=n

kernel调用:

kernel<<<numBlock,threadPerBlock>>>(a,b)

这是调用kernel时的参数,尖括号<<<>>>中第一个参数代表启动的线程块的数量,第二个参数代表每个线程块中线程的数量.

总的线程号:

设线程号为tid,以下讨论几种调用情况下的tid的值,这里只讨论一维/二维的情况

一维:

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

block和thread都是一维的,启动一个block,里面有N个thread,1维的。

tid=threadIdx.x

2.kernel<<<N,1>>>()

启动N个一维的block,每个block里面1个thread

tid=blockIdx.x

3.kernel<<<M,N>>>()

启动M个一维的block,每个block里面N个一维的thread

tid=threadIdx.x+blockIdx.x * blockDim.x

二维:

4.dim grid(m,n)

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

启动一个二维的m*n个block,每个block里面一个thread

tid=blockIdx.x+blockIdx.y * gridDimx.x

5.dim grid(m,n)

kernel<<<grid,N>>>()

启动一个二维的m*n大小的block,每个block里面N个thread

tid=

6.dim block(m,n)

kernel<<<1,block>>>()

7.dim block(m,n)

kernel<<<N,block>>>()

8.dim grid(m,n)

dim block(i,j)

kernel<<<grid,block>>>()

cuda线程/线程块索引小结的更多相关文章

  1. CUDA并行计算 | 线程模型与内存模型

    文章目录 前言 CUDA线程模型(如何组织线程) CUDA内存模型(了解不同内存优缺点,合理使用) 前言   CUDA(Compute Unified Device Architecture)是显卡厂 ...

  2. C# CLR via 对象内存中堆的存储【类型对象指针、同步块索引】

    最近在看书,看到了对象在内存中的存储方式. 讲到了对象存储在内存堆中,分配的空间除了类型对象的成员所需的内存量,还有额外的成员(类型对象指针. 同步块索引 ),看到这个我就有点不懂了,不知道类型对象指 ...

  3. 揭示同步块索引(上):从lock开始

    转自:http://www.cnblogs.com/yuyijq/archive/2009/03/13/1410071.html 大家都知道引用类型对象除实例字段的开销外,还有两个字段的开销:类型指针 ...

  4. 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq

    常量,字段,构造方法   常量 1.什么是常量 ​ 常量是值从不变化的符号,在编译之前值就必须确定.编译后,常量值会保存到程序集元数据中.所以,常量必须是编译器识别的基元类型的常量,如:Boolean ...

  5. python 进程和线程-线程和线程变量ThreadLocal

    线程 线程是由若干个进程组成的,所以一个进程至少包含一个线程:并且线程是操作系统直接支持的执行单元.多任务可以由多进程完成,也可由一个进程的多个线程来完成 Python的线程是真正的Posix Thr ...

  6. C#线程 线程进阶

    第四部分:高级线程 非阻塞同步 前面我们说过,即使在分配或增加字段的简单情况下,也需要同步.尽管锁定始终可以满足此需求,但是竞争性锁定意味着线程必须阻塞,从而遭受上下文切换的开销和调度的延迟,这在高度 ...

  7. Linux线程的实现 & LinuxThread vs. NPTL & 用户级内核级线程 & 线程与信号处理

    另,线程的资源占用可见:http://www.cnblogs.com/charlesblc/p/6242111.html 进程 & 线程的很多知识可以看这里:http://www.cnblog ...

  8. Linux线程 之 线程 线程组 进程 轻量级进程(LWP)

    Thread Local Storage,线程本地存储,大神Ulrich Drepper有篇PDF文档是讲TLS的,我曾经努力过三次尝试搞清楚TLS的原理,均没有彻底搞清楚.这一次是第三次,我沉浸gl ...

  9. JAVA之旅(十五)——多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止

    JAVA之旅(十五)--多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止 我们接着多线程讲 一.生产者和消费者 什么是生产者和消费者?我们 ...

随机推荐

  1. 《JAVASCRIPT高级程序设计》错误处理与调试

    一.错误处理 错误处理在程序设计中的重要性是毋庸置疑的,任何有影响力的web应用程序都需要一套完善的错误处理机制.良好的错误机制可以让用户得到提醒,知道发生了什么事. 1.try-catch语句 tr ...

  2. 从jvm的角度来看java的多线程

    最近在学习jvm,发现随着对虚拟机底层的了解,对java的多线程也有了全新的认识,原来一个小小的synchronized关键字里别有洞天.决定把自己关于java多线程的所学整理成一篇文章,从最基础的为 ...

  3. java中函数是值传递还是引用传递?

    相信有些同学跟我一样,曾经对这个问题很疑惑.在网上也看了一些别人说的观点,评论不一.有说有值传递和引用传递两种,也有说只有值传递的,这里只说下个人见解 先看一个例子 public class Test ...

  4. Webappbuilder开发快速预览

    Webappbuilder开发快速预览 by 李远祥 Webappbuilder for ArcGIS 是由ArcGIS JavaScripit API和dojo创建的,它允许通过创建自己的widge ...

  5. iOS Paros 连接在同一WIFI下的网络抓包

    图文详解: 说说网络抓包,几天前的事了,想抓个包看看 某爱网(全名自己脑补)的数据,就上网找了一下抓包,以前经常抓接口,时间长了忘了.那时候也不是用苹果手机抓取的,前几天试着抓了一下,今天不适合敲代码 ...

  6. iOS 开发之Block

    iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1.     按钮事件 target action 机制. 它是将一 ...

  7. HTML5部分元素

    Document HTML4文档声明 : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &qu ...

  8. C:\Users\用户名\AppData里面的文件可以删除吗

    很多人发现电脑中C:\Users\用户名\AppData 占据了很大的空间,那么可以将其删除吗?下面为大家详细介绍相关知识! C:\Users\用户名\AppData里面一般有三个文件夹,分别是Loc ...

  9. PrefixHeader.pch' file not found 以及 Xcode 中如何添加pch文件

    在开发的过程中,有时候接触到旧项目,会报: 'PrefixHeader.pch' file not found 的错误! 在Xcode6之前,新建一个工程的时候,系统会帮我们自动新建一个以工程名为名字 ...

  10. 用CSS3 做的星体

    制作原理:在我的上一篇随笔中有详细的说明,由于这个方法制作的球,比较耗性能,就只做了3个小球,效果大家可以试验. <!DOCTYPE html><html><head l ...