每个块的最大线程数

9
我有以下信息:

Maximum number of threads per block:           512
Maximum sizes of each dimension of a block:    512 x 512 x 64

这是否意味着2D线程块中的最大线程数为512x512,从而每个块中有262144个线程?
如果是的话,那么在至少256个块的内核中拥有这么多的线程数量是否是一个好的实践方式?


是的,他们使用512x512x64这样的术语确实令人困惑,如果以[512,512,64]的形式说明最大尺寸会少得多! - ejectamenta
2个回答

12

不,这意味着每个块的最大线程数为512,

您可以决定如何在[1 ... 512] x [1 ... 512] x [1 ... 64]上布置它们。

例如,在2D中16x16就可以使用。

至于确定块的大小,需要考虑许多因素,比如块需要的内存量以及硬件上一半warp的大小(我不记得Nvidia硬件上是否总是16)。


谢谢您的澄清。所以,如果考虑我有一个大小为1024的数组,但只有512个线程,我需要循环遍历数组的其余部分。类似这样: - lina
@lina:你所说的“loop over”具体是什么意思?你的代码是做什么的?通常情况下,你会将代码设置为在多个块中运行。 - Martin Kristiansen
@lina,那样做可以……但我认为你想要不止一个代码块。 - Martin Kristiansen

1
不,这意味着您的块可以具有最大512个X/Y或64个Z,但不能同时具备。实际上,您的信息已经表明了最大块大小为512个线程。 现在,没有最优块,因为它取决于您的代码运行的硬件以及您特定的算法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接