什么是" warp分配粒度",它在CUDA寄存器分配中的用途是什么?

时间:2014-07-24 17:40:28

标签: cuda nvidia

在CUDA中,注册页面是基于每个线程组分配的。这些组单元可以是sm_1x设备上的块,也可以是sm_2x和sm_3x设备上的warp。寄存器分配在寄存器页面中,因此总是分配给寄存器页面大小的倍数--CUDA占用计算器将其称为"寄存器分配粒度"。

我明白这一点。我不明白的是,如果这些组中的warp数是" warp分配粒度"的倍数,为什么寄存器页面只能分配给线程组单元。编程指南和更广泛的互联网几乎没有提到这种技术性。

除了寄存器页面大小粒度之外,强制执行此其他级别的寄存器分配粒度的目的是什么?它可能与设备的warp调度程序数量有关吗?我不清楚为什么,如果确实如此。

祝你好运, 詹姆斯。

1 个答案:

答案 0 :(得分:4)

Warp Allocation粒度是硬件资源分配中的一个约束。

在SM1.x-2.x资源上一次分配2个warp。

在SM3.x-5.x资源上一次分配4个warp。

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

此限制减少了控制逻辑和分配表大小,从而减少了面积和功耗。