0

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

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

4

1 回答 1

1

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

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

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

于 2013-08-21T22:56:16.590 回答