什么是"warp allocation granularity",它在 CUDA 寄存器分配中有什么用途?



在CUDA中,寄存器页是按每个线程组分配的。这些组单元在sm_1x设备上是块,在sm_2x和sm_3x设备上是扭曲。寄存器是在寄存器页中分配的,因此总是以寄存器页大小的倍数分配——CUDA占用计算器称之为"寄存器分配粒度"。

我明白这一点。我不明白的是,如果这些组中的翘曲数量是"翘曲分配粒度"的倍数,为什么注册页面只能分配给线程组单元。编程指南和更广泛的互联网很少提及这种技术性。

除了寄存器页大小粒度之外,强制执行另一个级别的寄存器分配粒度的目的是什么?它可能与设备中存在的曲调度器的数量有关吗?如果情况确实如此,我不清楚其中的原因。

最诚挚的问候,詹姆斯。

Warp Allocation Granularity是硬件资源分配的约束。

SM1.x-2。X资源一次分配2次

SM3.x-5。X资源一次分配4次

如果内核配置为N,则硬件为N分配资源,四舍五入到WarpAllocationGranularity的倍数。

这个限制减少了控制逻辑和分配表的大小,从而减少了面积和功率。

最新更新