GPU概念:Thread, Block, Grid, Warp, SP, SM

  • Stream(流)
      流是一系列顺序执行的命令,流之间相对无序或并发的执行他们的命令。

  • Streaming Processor(SP)
      最基本的处理单元, 具体的指令和任务都是在SP上处理的。GPU进行并行计算,也就是很多个SP同时做处理。现在SP的术语已经有点弱化了,而是直接使用thread来代替。一个SP对应一个thread。

  • Streaming Multiprocessor(SM)
      多个sp加上其他的一些资源组成一个SM。其他资源包括存储资源,共享内存,寄储器等。一个SM中的所有SP是先分成warp,共享同一个memory和instruction unit。
      每个SM通过使用两个特殊函数(Special Function Unit,SFU)单元进行超越函数和属性插值函数(根据顶点属性来对像素进行插值)计算。SFU用来执行超越函数、插值以及其他特殊运算。

  • Warp
      warp是SM调度和执行的基础概念,同时warp实际上是一个和硬件相关的概念,通常一个SM中的SP(thread)会分成几个warp(SP在SM中是进行物理上的分组),每一个wrap中在Tegra中是32个thread。这个wrap中的32个thread(SP)是一起工作的,执行相同的指令,如果没有这么多thread需要工作,那么这个wrap中的一些thread(SP)是不工作的。
      P.S. 每一个线程都有自己的寄存器内存和local memory,一个warp中的线程是同时执行的,也就是当进行并行计算时,线程数尽量为32的倍数,如果线程数不上32的倍数的话;假如是1,则warp会生成一个掩码,当一个指令控制器对一个warp单位的线程发送指令时,32个线程中只有一个线程在真正执行,其他31个 进程会进入静默状态。

  • Grid、Block与Thread
      在利用CUDA进行编程时,一个grid分为多个block,而一个block分为多个thread。划分的依据是任务特性和GPU本身的硬件特性。grid、block和thread是软件概念,而非硬件的概念。

  从硬件角度讲,一个GPU由多个SM组成(当然还有其他部分),一个SM包含有多个SP(以及还有寄存器资源,shared memory资源,一级缓存(L1 cache),scheduler(调度器),SPU,LD/ST单元(读取单元)等等),1.x硬件,一个SM包含8个SP,2.0是32个,2.1是48个,3.0和3.5是192个。以及SP目前也称为CUDA CORE,而SM目前也称为MP,在KEPLER架构(SM3.0和3.5)下也称为SMX。

  从软件角度讲,CUDA因为是SIMT的形式,grid和block是thread的组织形式。thread是最小的逻辑单位,wrap是最小的硬件执行单位,若干个thread(典型值是128~512个)组成一个block,block被加载到SM上运行,多个block组成整体的grid。

  P.S. SIMT: SIMT中文译为单指令多线程,英文全称为Single Instruction Multiple Threads。GPU中的SIMT体系结构相对于CPU的SIMD中的概念。为了有效地管理和执行多个单线程,多处理器采用了SIMT架构。此架构在第一个unified computing GPU中由NVIDIA公司生产的GPU引入。不同于CPU中通过SIMD(单指令多数据)来处理矢量数据;GPU则使用SIMT,SIMT的好处是无需开发者费力把数据凑成合适的矢量长度,并且SIMT允许每个线程有不同的分支。 纯粹使用SIMD不能并行的执行有条件跳转的函数,很显然条件跳转会根据输入数据不同在不同的线程中有不同表现,这个只有利用SIMT才能做到。

  总的来说,在GPU中最小的硬件单元是SP(这个术语通常使用thread来代替),而硬件上一个SM中的所有SP在物理上是分成了几个wrap,每一个warp包含一些thread,warp中的SP是可以同时工作的,但是执行相同的指令,也就是说取指令单元取一条指令同时发射给WARP中的所有的SP(假设SP都需要工作,否则有些是空闲的)。可见,在硬件上一个SM > WARPS > SP(thread)。从软件thread组织方面来看,因为一个SM中是分WARP的,而一个WARP包含一定数目(比如Tegra的32个)的SP(thread),因此最好按照这个数目来组织thread,否则硬件该warp上有些SP是不工作的。

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这些术语都是与 NVIDIA GPU 相关的概念,下面我简单介绍一下它们的含义: 1. CUDA Context:CUDA 上下文,是 CUDA 程序与 GPU 之间通信的桥梁,用于管理 GPU 资源的分配和释放。 2. CUDA Stream:CUDA 流,是一组 CUDA 操作的序列,可以在 GPU 上异步执行。通过使用多个流,可以在 GPU 上实现并行计算,从而提高计算效率。 3. Hyper-Q:Hyper-Q 技术是 NVIDIA GPU 上的一种并行计算技术,可以让多个 CPU 核心同时访问 GPU,并实现更高的并发度。 4. Multi Stream:多流技术是指在一个 CUDA 上下文中同时使用多个 CUDA 流,以实现更高的并行度。 5. MPS:MPS 技术是 NVIDIA GPU 上的一种并行计算技术,可以让多个 CUDA 上下文共享同一个 GPU,从而实现更高的计算效率。 6. SM:Streaming Multiprocessor,是 NVIDIA GPU 中的一个处理器单元,用于执行 CUDA 程序中的 kernel。 7. SP:Streaming Processor,是 SM 中的一个计算单元,用于执行 CUDA 程序中的指令。 8. Warp调度:Warp 调度是指将多个线程组成一个 warp,由 SM 中的 SP 统一调度执行。在一个 warp 中的线程可以并行执行,从而提高计算效率。 9. Kernel:Kernel 是 CUDA 程序中的一个函数,用于在 GPU 上执行计算任务。 10. GridGrid 是 CUDA 程序中的一个概念,用于描述线程块的组织方式。 11. BlockBlock 是 CUDA 程序中的一个概念,用于描述线程的组织方式。每个 Block 包含多个线程,可以在 SM 中并行执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值