CUDA中的占用率定义为
occupancy = active_warps / maximum_active_warps
常驻 CUDA扭曲和活跃之间有什么区别?
根据我对网络的研究,似乎一个块在整个执行期间驻留在SM上(即与其寄存器/共享内存文件一起分配)。与“活跃”有区别吗?
如果我的内核使用很少的寄存器和共享内存..这是否意味着我可以拥有maximum_active_warps
驻留块并实现100%占用率,因为占用率取决于所使用的寄存器/共享内存量?
答案 0 :(得分:2)
常驻CUDA扭曲与活动CUDA扭曲之间有什么区别?
在这种情况下可能没什么。
根据我对网络的研究,似乎一个块在整个执行期间驻留在SM上(即与其寄存器/共享内存文件一起分配)。与"活跃"?
有区别吗?
现在你已经从询问warp转向询问块。但同样,在这种情况下,你可以认为它们是相同的。
如果我的内核使用很少的寄存器和共享内存.. 这是否意味着我可以拥有maximum_active_warps常驻块和 入住率仅取决于入住人数,因此实现100%入住率 注册/共享内存使用?
不,因为经线和块不是一回事。正如你自己引用的那样,占用率是根据经线而不是块来定义的。最大扭曲数固定为48或64,具体取决于您的硬件。最大块数固定为8,16或32,具体取决于硬件。有两个独立的限制是不一样的。两者都可以影响给定内核可以实现的有效占用率。