Vulkan子组教程提到:
如果您指定的工作组大小小于子组大小,则保证子组内有非活动调用。
现在假设您的 maxComputeWorkGroupSize为1024,subGroupSize为 64。如果您想对图像应用过滤器,您可能会进行 2D 调用。因此,您最终的工作组大小将为 32,因为 32 * 32 * 1 = 1024。现在您的工作组大小小于子组大小。
所以我的问题是,是否最好使用 64 的 1D 工作组大小(并从现在“更大”的 GlobalInitationID.x 中提取相应的 x 和 y 坐标)?
maxComputeWorkGroupSize
是有维度的;subGroupSize
不是。_ 后者是调用的固定计数。它不关心工作组中这些调用的安排。多维工作组如何划分为子组是由实现定义的。在您的情况下,实现可以将工作组中的每个 32x2 调用置于同一子组中。但它也可以将其分割为 2x32。或者每个 8x8 块。或者是其他东西。