为什么CUDA中网格中的所有块的Blockdim都应相同?

为什么CUDA中网格中的所有块的Blockdim都应相同?,cuda,Cuda,为什么CUDA程序中网格中的所有块的blockDim(块中的线程总数)相同?我知道,如果所有块的块大小都相同,索引将非常容易,但是如果我有大小倍数为32的块(对于扭曲),但以递增的顺序,可能AP或GP索引非常容易 使网格中的所有块具有相同大小的原因是什么?如果有多个大小不同的块都运行相同的内核,则SM上较大的块很可能比较小的块花费更长的时间。与均匀分布的工作负载相比,这会显著降低代码的速度。在某种程度上,他们阻止你射中自己的脚 我还想猜测一下,它极大地简化了内存管理——使用统一的块大小,每个块需

为什么CUDA程序中网格中的所有块的
blockDim
(块中的线程总数)相同?我知道,如果所有块的块大小都相同,索引将非常容易,但是如果我有大小倍数为32的块(对于扭曲),但以递增的顺序,可能AP或GP索引非常容易


使网格中的所有块具有相同大小的原因是什么?

如果有多个大小不同的块都运行相同的内核,则SM上较大的块很可能比较小的块花费更长的时间。与均匀分布的工作负载相比,这会显著降低代码的速度。在某种程度上,他们阻止你射中自己的脚

我还想猜测一下,它极大地简化了内存管理——使用统一的块大小,每个块需要在SM上分配固定数量的共享内存/寄存器等


可变块大小似乎是可能的,但没有根据。如果你担心在街区做无用的工作,不要担心。如果您不在网格范围内,只需提前退出,性能影响很小。

什么AP和GP索引?这是CUDA的一个限制。这里是否有适当的SO编码问题?