【CUDA】Warp解析

目录

一、初步认识

二、Warps and Thread Blocks

三、Warp Divergence 

四、资源分区

五、延迟隐藏

六、占有率

七、Synchronize


一、初步认识

warp 是 SM 的基本执行单元。一个 warp 包含 32 个并行 thread,这32个 thread 执行于 SMIT模式。即所有 thread 执行同一条指令,并且每个 thread 会使用各自的 data 执行该指令

  1. 线程调度:GPU 的调度单元以 warp 为单位进行调度,而不是单个线程。即整个 warp 被分配到一个流多处理器(SM)上并一起执行
  2. 分支处理:若 warp 中的所有线程都采取相同的分支路径(如:都满足某个条件语句),则其会继续同步执行。但是,若线程在分支上有不同的路径(即分歧),则 warp 会执行每个路径,但不是所有线程都会在每个路径上活跃。这可能导致效率下降,因为即使某些线程在特定路径上没有工作,整个 warp 也必须等待该路径完成
  3. 性能优化:了解 warp 的行为对于优化 CUDA 程序的性能至关重要。如:为了确保高效执行,开发人员可能需要确保他们的代码减少 warp 分歧。
  4. 占用率:在 CUDA 中,占用率是一个重要的性能指标,表示每个 SM 上激活的 warps 与 SM 可以支持的最大 warp 数量的比例。更高的占用率通常意味着更好的硬件利用率

即 warp 是 NVIDIA GPU 中执行并行操作的基本单位

二、Warps and Thread Blocks

block可以是一维二维或者三维的,但是,从硬件角度看,所有的thread都被组织成一维,每个thread都有个唯一的index

每个block的warp数量可以由下面的公式计算获得:

一个warp中的线程必然在同一个block中,若block所含线程数目不是warp大小的整数倍,即使凑不够warp整数倍的thread,硬件也会为warp凑足,只不过那些thread是闲置状态。注意:即使这部分thread是闲置的,也会消耗SM资源 

三、Warp Divergence 

同一个 warp 中的 thread 必须执行相同的指令,若这些线程在遇到控制流语句时,进入了不同的分支,那么同一时刻除了正在执行的分支外,其余分支都会被阻塞,十分影响性能。如下图: 

当代码较为简单时,GPU会自动进行代码优化,即进行分支预测

在GPU编程中,预测变量是一个用于指示分支执行路径的变量,其值为1或0。当条件状态少于某个阈值时,编译器会将一个分支指令替换为预测指令。若预测变量为1,则执行预测为真的分支

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GG_Bond21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值