为什么blockDim
,一个块中的线程总数,对于CUDA程序中网格中的所有块都相同?我知道如果所有块的块大小相同,索引将非常容易,但如果我的块大小为32(对于warp),但是按顺序增加,可能AP或GP索引非常容易。
使网格的所有块大小相同的原因是什么?
答案 0 :(得分:1)
如果你有多个不同大小的块都在运行相同的内核,那么SM上的较大块很可能比较小的块需要更长的时间。与均匀分布的工作负载相比,这会显着降低代码速度。在某种程度上,他们阻止你在脚下射击自己。
我还猜测它会极大地简化它们的内存管理 - 使用统一的块大小,每个块需要在SM上分配固定数量的共享内存/寄存器等。
可变块大小似乎是可能的,但是没有根据。如果你担心在一块街区做无用的工作,不要这样做。如果你在网格之外,只需提前退出街区 - 性能损失微乎其微。