4

我正在使用 TESLA T10 设备,它有 2 个 cuda 设备,一个块中的最大线程数是 512,每个维度的最大线程数是 (512,512,64),最大网格大小是 (65535,65535,1),它有 30每个 cuda 设备上的多处理器。

现在我想知道我可以并行运行多少个线程。我阅读了以前的解决方案,但没有一个能解决我的疑问。从以前的读取 =(30)*512 线程我可以并行运行(maxNoOfMultiprocessor * maxThreadBlockSize)

但是当我启动 512 个线程的 32 个块时,它仍然在工作,这怎么可能???我不了解每个维度中的这些最大线程以及最大网格尺寸部分,请举例说明.......提前致谢

4

2 回答 2

5

为了讨论的目的,忘记有多少多处理器。它与您可以在内核(即网格)中启动多少块无关。

您可以并行运行的线程数(即可以同时执行)与您可以启动的线程数或您可以启动的块数不同。

通常,您不想启动在给定时间(maxNoOfMultiprocessor * maxThreadBlockSize)只有机器可以运行的线程数的网格。机器需要比这更多的线程,因此它可以隐藏延迟。

您的机器限制为每个块 512 个线程,但您可以启动最多 65535 个块的一维网格。这并不意味着所有这些块/线程都同时运行,但机器最终会处理它们。

于 2013-11-16T14:03:31.770 回答
4

您可以创建比硬件能够同时处理更多的线程。这被nVidia称为“自动可扩展性”。如果你有一张有 30 个 SMX 的卡,30 个块将并行运行,然后将运行 2 个块。如果您在只有 16 个 SMX(假设存在)的卡上运行具有 32 个块的相同程序,则运行 16 个块,然后运行 ​​16 个其他块。

于 2013-11-16T14:10:57.930 回答