CUDA学习----sp, sm, thread, block, grid, warp概念
CUDA学习----sp, sm, thread, block, grid, warp概念
2017-01-11 17:14:28| 分类: HPC&CUDA优化 | 标签:cuda gpu hpc |举报 |字号 订阅
下载LOFTER 我的照片书 |
从硬件看
- SP:最基本的处理单元,streaming processor,也称为CUDA core。最后具体的指令和任务都是在SP上处理的。GPU进行并行计算,也就是很多个SP同时做处理。
- SM:多个SP加上其他的一些资源组成一个streaming multiprocessor。也叫GPU大核,其他资源如:warp scheduler,register,shared memory等。SM可以看做GPU的心脏(对比CPU核心),register和shared memory是SM的稀缺资源。CUDA将这些资源分配给所有驻留在SM中的threads。因此,这些有限的资源就使每个SM中 active warps有非常严格的限制,也就限制了并行能力。
从软件看
thread,block,grid,warp是CUDA编程上的概念,以方便程序员软件设计,组织线程,同样的我们给出一个示意图来表示。
- thread:一个CUDA的并行程序会被以许多个threads来执行。
- block:数个threads会被群组成一个block,同一个block中的threads可以同步,也可以通过shared memory通信。
- grid:多个blocks则会再构成grid。
- warp:GPU执行程序时的调度单位,目前cuda的warp的大小为32,同在一个warp的线程,以不同数据资源执行相同的指令,这就是所谓 SIMT(单指令多线程)。
对应关系
GPU中每个sm都设计成支持数以百计的线程并行执行,并且每个GPU都包含了很多的SM,所以GPU支持成百上千的线程并行执行。当一个kernel启动后,thread会被分配到这些SM中执行。大量的thread可能会被分配到不同的SM,同一个block中的threads必然在同一个SM中并行(SIMT)执行。每个thread拥有它自己的程序计数器和状态寄存器,并且用该线程自己的数据执行指令,这就是所谓的Single Instruction Multiple Thread。
一个SP可以执行一个thread,但是实际上并不是所有的thread能够在同一时刻执行。Nvidia把32个threads组成一个warp,warp是调度和运行的基本单元。warp中所有threads并行的执行相同的指令。一个warp需要占用一个SM运行,多个warps需要轮流进入SM。由SM的硬件warp scheduler负责调度。目前每个warp包含32个threads(NVIDIA保留修改数量的权利)。所以,一个GPU上resident thread最多只有 SM*warp个。
SIMT和SIMD
CUDA是一种典型的SIMT架构(单指令多线程架构),SIMT和SIMD(Single Instruction, Multiple Data)类似,SIMT应该算是SIMD的升级版(SIMD < SIMT < SMT),更灵活,但效率略低,SIMT是NVIDIA提出的GPU新概念。二者都通过将同样的指令广播给多个执行单元来实现并行。一个主要的不同就是,SIMD要求所有的vector element在一个统一的同步组里同步的执行,而SIMT允许线程们在一个warp中独立的执行。SIMT有三个SIMD没有的主要特征:
- 每个thread拥有自己的instruction address counter
- 每个thread拥有自己的状态寄存器
- 每个thread可以有自己独立的执行路径
CUDA学习----sp, sm, thread, block, grid, warp概念相关推荐
- GPU的硬件结构中与CUDA相关的几个概念:thread block grid warp sp sm
streaming processor(sp): 最基本的处理单元,streaming processor 最后具体的指令和任务都是在sp上处理的.GPU进行并行计算,也就是很多个sp同时做处理.现在 ...
- cuda笔记-初始化矩阵及thread,block,grid概念
thread:一个CUDA的并行程序会被许多threads来执行: block:多个threads组成一个block,同一个block中threads可以使用_syncthreads()同步,也可以通 ...
- GPU软件抽象与硬件映射的理解(Grid、Block、Warp、Thread与SM、SP)
GPU软件抽象与硬件映射的理解 1 从程序到软件抽象: 组成关系: GPU上运行函数kernel对应一个Grid,每个Grid内有多个Block,每个Block由多个Thread组成. 运行方式: B ...
- CUDA学习第三天:Kernel+grid+block关系
1. 理一理前两天学到的概念之间的关系 CUDA && GPU CUDA: NIVID的CPUs上的一个通用并行计算平台和编程模型: GPU: CPU+GPU的异构计算架构,CPU所在 ...
- Cuda学习笔记(一)——sm流处理器簇对blocks的调度策略
由于GPU目前在各行各业的广泛应用,无论是深度学习.大数据.云计算等都离不开GPU的并行加速,前阵子自学了Cuda-c编程,希望将来的研究工作能够用得上. Cuda系列总共有4篇,这里主要用于记录本人 ...
- Nvidia GPU架构 - Cuda Core,SM,SP等等傻傻分不清?
背景 在深度学习大热的年代,并行计算也跟着火热了起来.深度学习变为可能的一个重要原因就是算力的提升.作为并行计算平台的一种,GPU及其架构本身概念是非常多的.下面就进行一个概念阐述,以供参考. G ...
- CUDA学习笔记(LU分解)
最近在学习LU的并行加速,从paper中得到了一些idea,就想着用GPU来实现一下.学习CUDA的过程中踩了不少坑,不过最终还是完成了测试. 一.LU基本算法 1.LU 分解是计算机做矩阵运算过程中 ...
- CUDA学习3-GridBlock
掌握如何组织线程是CUDA编程的重要部分.CUDA线程分成Grid和Block两个层次. 由一个单独的kernel启动的所有线程组成一个grid,grid中所有线程共享global memory.一个 ...
- 【CUDA学习】GPU硬件结构
GPU的硬件结构,也不是具体的硬件结构,就是与CUDA相关的几个概念:thread,block,grid,warp,sp,sm. sp: 最基本的处理单元,streaming processor 最 ...
最新文章
- python使用matplotlib可视化使用subplots子图、subplots绘制子图、并为可视化的每个子图添加标题(title for each subplots)
- 手机息屏后停止_手机息屏还能这样玩?华为这几个隐藏小功能快学起来
- 加州无人车报告出炉,苹果表现垫底,国产车进前五
- HDU2044一只小蜜蜂(递推)
- Java8 LinkedHashMap 源码阅读
- OpenCASCADE绘制测试线束:拓扑命令之扫掠Sweeping
- sessionlistener方法中获取session中存储的值报空指针异常_从Golang实践中得到的教训...
- 继承 :5、程序设计 类:汽车类 属性:排量(outPut),颜色(color) 		行为:驾驶(drive)
- LINUX中使用fdisk对SD卡磁盘进行格式化并重新分区
- 大白话Pyramid Vision Transformer
- 【NOI2002】【Luogu1196】银河英雄传说(并查集带边权)
- Java多线程实现-Thread类
- Multiple commands produce xxxxxxxxxx app/Info.plist':
- android 人脸识别边框_虹软人脸识别 - Android Camera实时人脸追踪画框适配
- 非IE内核浏览器支持activex插件
- linux 中的 usr 是什么含义
- PART 1:基于大数据人才岗位招聘情况对数据进行清洗、初步分析
- 原生JS JavaScript实现懒加载效果
- CCS中调试DM6467高清视频采集(TVP7002输入)
- NumberPicker
热门文章
- 【l转】VS2015下解决:无法解析的外部符号 __imp___vsnprintf 及__iob_func
- WPF无边框拖动、全屏、缩放
- 洛谷 1351 联合权值——树形dp
- 富盛Sbo生产管理简介
- Hadoop入门进阶步步高(一)-环境准备
- Android生成Xml文件
- 网站安全狗V3.0—— .NET安全设置及保护实战教程
- 关于citrix 负载及WI的一些问题
- poj 1584(凸包+点在凸多边形内+圆在凸多边形内)
- hdu 1147(线段相交)