[原]CUDA中grid、block、thread、warp与SM、SP的关系
来源:互联网 发布:英语教科书辅导软件 编辑:程序博客网 时间:2024/05/15 23:48
[原]CUDA中grid、block、thread、warp与SM、SP的关系
2015-3-27阅读209 评论0
首先概括一下这几个概念。其中SM(Streaming Multiprocessor)和SP(streaming Processor)是硬件层次的,其中一个SM可以包含多个SP。thread是一个线程,多个thread组成一个线程块block,多个block又组成一个线程网格grid。
现在就说一下一个kenerl函数是怎么执行的。一个kernel程式会有一个grid,grid底下又有数个block,每个block是一个thread群组。在同一个block中thread可以通过共享内存(shared memory)来通信,同步。而不同block之间的thread是无法通信的。
CUDA的设备在实际执行过程中,会以block为单位。把一个个block分配给SM进行运算;而block中的thread又会以warp(线程束)为单位,对thread进行分组计算。目前CUDA的warp大小都是32,也就是说32个thread会被组成一个warp来一起执行。同一个warp中的thread执行的指令是相同的,只是处理的数据不同。
基本上warp 分组的动作是由SM 自动进行的,会以连续的方式来做分组。比如说如果有一个block 里有128 个thread 的话,就会被分成四组warp,第0-31 个thread 会是warp 1、32-63 是warp 2、64-95是warp 3、96-127 是warp 4。而如果block 里面的thread 数量不是32 的倍数,那他会把剩下的thread独立成一个warp;比如说thread 数目是66 的话,就会有三个warp:0-31、32-63、64-65 。由于最后一个warp 里只剩下两个thread,所以其实在计算时,就相当于浪费了30 个thread 的计算能力;这点是在设定block 中thread 数量一定要注意的事!
一个SM 一次只会执行一个block 里的一个warp,但是SM 不见得会一次就把这个warp 的所有指令都执行完;当遇到正在执行的warp 需要等待的时候(例如存取global memory 就会要等好一段时间),就切换到别的warp来继续做运算,借此避免为了等待而浪费时间。所以理论上效率最好的状况,就是在SM 中有够多的warp 可以切换,让在执行的时候,不会有「所有warp 都要等待」的情形发生;因为当所有的warp 都要等待时,就会变成SM 无事可做的状况了。
- [原]CUDA中grid、block、thread、warp与SM、SP的关系
- CUDA中grid、block、thread、warp与SM、SP的关系
- CUDA中grid、block、thread、warp与SM、SP的关系
- CUDA中grid、block、thread、warp与SM、SP的关系
- CUDA学习----sp, sm, thread, block, grid, warp概念
- CUDA学习笔记08:SM + SP + Grid + Block + Thread 关系
- CUDA编程——GPU架构,由sp,sm,thread,block,grid,warp说起
- CUDA编程系列--GPU架构,由sp,sm,thread,block,grid,warp说起
- Cuda 学习教程(五):GPU架构-Sp,sm,thread,block,grid,warp
- 【并行计算-CUDA开发】CUDA编程——GPU架构,由sp,sm,thread,block,grid,warp说起
- SM,SP和GRID,BLOCK,THREAD之间的对应关系是什么?
- CUDA 的 Threading:Block 和 Grid 的設定與 Warp
- CUDA 的 Threading:Block 和 Grid 的設定與 Warp
- CUDA 的 Threading:Block 和 Grid 的設定與 Warp
- CUDA: Threading的Block和Grid的設定與 Warp
- CUDA: Threading的Block和Grid的設定與 Warp
- CUDA 的 Threading:Block 和 Grid 的設定與 Warp
- GPU中基于CUDA计算SM中active block和active warp及普遍优化流程
- Android:Fragment+ViewPager+FragmentPagerAdapter
- java.util常用类
- Linux内核模块编译与加载
- asp.net中三层架构与mvc之区别?
- 项目开发文档之开发流程控制
- [原]CUDA中grid、block、thread、warp与SM、SP的关系
- 4-4 求自定类型元素的平均
- STM32的输入捕获
- 普通用户之间无法通过ssh协议进行切换(su),即使输入正确的密码
- 06 环形矩阵
- Android内存优化(使用SparseArray和ArrayMap代替HashMap)
- Java 关键字-violate
- 大话设计模式 笔记2——策略模式
- centos 6.7 中文乱码 系统设为gbk