我有以下信息:
Maximum number of threads per block: 512
Maximum sizes of each dimension of a block: 512 x 512 x 64
这是否意味着2d线程块中的最大线程数为512x512,这使得每个块中有262144个线程?
如果是,那么在一个至少256个块的内核中拥有这么多线程是一个好习惯吗?
答案 0 :(得分:12)
不,这意味着每个块的最大线程数为512,
您可以决定如何在[1 ... 512] x [1 ... 512] x [1 ... 64]之间进行布局。
例如16x16可以在2D中使用。
至于块的大小决定,需要考虑很多事情,例如块需要的内存量以及硬件上的半翘曲有多大(我不记得它是否总是16在Nvidia硬件上)。
答案 1 :(得分:1)
不,这意味着您的区块可以有512个最大X / Y或64个Z,但不能同时具有所有区域。实际上,您的信息已经表示最大块大小为512个线程。 现在,没有最佳块,因为它取决于运行代码的硬件,还取决于您的特定算法。