目录
一、初步认识
warp 是 SM 的基本执行单元。一个 warp 包含 32 个并行 thread,这32个 thread 执行于 SMIT模式。即所有 thread 执行同一条指令,并且每个 thread 会使用各自的 data 执行该指令
- 线程调度:GPU 的调度单元以 warp 为单位进行调度,而不是单个线程。即整个 warp 被分配到一个流多处理器(SM)上并一起执行
- 分支处理:若 warp 中的所有线程都采取相同的分支路径(如:都满足某个条件语句),则其会继续同步执行。但是,若线程在分支上有不同的路径(即分歧),则 warp 会执行每个路径,但不是所有线程都会在每个路径上活跃。这可能导致效率下降,因为即使某些线程在特定路径上没有工作,整个 warp 也必须等待该路径完成
- 性能优化:了解 warp 的行为对于优化 CUDA 程序的性能至关重要。如:为了确保高效执行,开发人员可能需要确保他们的代码减少 warp 分歧。
- 占用率:在 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,则执行预测为真的分支

最低0.47元/天 解锁文章
663

被折叠的 条评论
为什么被折叠?



