【GPU 算子工程】GPU 执行模型:SM、warp、线程层次与 occupancy

💡 原文中文,约4700字,阅读约需12分钟。
📝

内容提要

本文介绍了GPU的执行模型,包括线程层次结构、物理映射和SIMT执行模型。CUDA的并行模型分为grid、block和thread,block在SM上调度,warp是32个线程的执行单位。分支发散会导致性能下降,occupancy是SM上驻留warp的比率,影响延迟隐藏。高occupancy并不总是意味着高性能,需要综合考虑寄存器和共享内存的使用。

🎯

关键要点

  • CUDA的并行模型分为grid、block和thread,block在SM上调度,warp是32个线程的执行单位。

  • 分支发散会导致性能下降,warp内的线程在不同分支时会串行化执行。

  • occupancy是SM上驻留warp的比率,影响延迟隐藏,但高occupancy不一定意味着高性能。

  • 寄存器和共享内存的使用会影响occupancy,寄存器溢出可能导致性能下降。

🔎

延伸解读

CUDA的并行模型解析

CUDA的并行模型由grid、block和thread三层结构组成,理解这一层次关系对于优化GPU性能至关重要。每个block在SM上调度,且block之间相互独立,这使得GPU能够在不同硬件上灵活扩展。掌握这些概念有助于开发者更有效地利用GPU资源。

occupancy与性能的关系

occupancy是指SM上驻留warp的比率,虽然高occupancy有助于隐藏延迟,但并不总是意味着高性能。寄存器和共享内存的使用会影响occupancy,寄存器溢出可能导致性能下降。因此,在优化时需综合考虑资源的使用情况,而非单纯追求高occupancy。

分支发散的影响

分支发散会导致warp内线程的串行化执行,从而影响性能。实测表明,warp内的分支发散会使执行时间增加约1.74倍。为了避免发散,开发者应尽量使分支条件按warp对齐,这样可以显著提高执行效率。

延伸问答

CUDA的并行模型是如何分层的?

CUDA的并行模型分为grid、block和thread三层,grid由多个block组成,每个block又由多个thread组成。

什么是warp,它在GPU执行中扮演什么角色?

warp是32个连续线程的执行单位,是GPU内部调度的基本单位,负责隐藏延迟。

分支发散对GPU性能有什么影响?

分支发散会导致warp内的线程串行化执行,从而增加执行时间,降低性能。

occupancy是什么,它如何影响GPU性能?

occupancy是SM上实际驻留的warp数与硬件上限的比值,高occupancy有助于隐藏延迟,但不一定意味着高性能。

如何优化GPU的occupancy?

优化occupancy可以通过合理配置每线程的寄存器数、共享内存使用和block大小来实现。

在GPU中,如何实现线程的独立调度?

从Volta架构开始,NVIDIA引入了独立线程调度,使得warp内的线程可以各自维护程序计数器,支持更复杂的同步模式。

🏷️

标签

➡️

继续阅读