CUDA编程——Warp Divergence

本文介绍了CUDA编程中的Warp概念,每个Warp包含32个Threads,并阐述了Warp调度和Block组织方式。Warp Divergence是当Warp中的Threads在执行分支语句时进入不同路径,导致性能下降的问题,是CUDA编程中需要避免的现象。
摘要由CSDN通过智能技术生成

Warp

  回顾一下CUDA的线程层次
  CUDA编程中,warp是调度和运行的基本单元,目前,每个warp包含32个threads。软件逻辑上,程序员的所有thread是并行的,但是,从硬件的角度来说,实际上并不是所有的thread能够在同一时刻执行。

  例如:一个block 有128个thread,那么可以分为warp0~warp3,SM同时只执行一个warp,其他warp以就绪,挂起等状态存在。这点类似CPU的线程调度。从这角度看,SM相当于CPU核心,warp相当于CPU中一个线程。

  Q:一个SM中可能有128或者192个SP(根据compute capability不同),一个thread需要SP中运行,一个SM同时执行的只有一个warp也就是32个thread,那么这个SM中的其他SP都在空闲?


Warps & Blocks

  Warp是GPU运行调度的单位,由SM的warp scheduler负责调度,对程序员来说warp是透明的,我们可以设置的是block。Blocks中包含很多threads,CUDA会将它们组成成warps,如果block所含线程数目不是32(warp size)的整数倍,硬件也会为warp凑足,那么多出的threads所在的warp中,会存在一些inactive的threadsÿ

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值