【问题标题】:maximum number of threads on gpugpu上的最大线程数
【发布时间】:2013-11-16 13:47:27
【问题描述】:

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

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

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

【问题讨论】:

  • 也许最后两个超过限制的块进入全局同步区,所以前 30 个块首先完成,然后最后两个块在另一个执行队列中。也许吧。
  • 这意味着我们可以启动任何线程块,每个块中的最大线程数为 512,因此首先运行 30*512 将执行然后下一个 30*512 等等
  • 但是你不能确定之前执行的是哪个大块。

标签: cuda gpu tesla


【解决方案1】:

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

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

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

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

【讨论】:

  • 这意味着对于我的机器,我们可以启动的最大线程块是 65535,每个线程最多可以有 512 个线程,我理解对吗?由于硬件限制,只有 (maxnoofmultiprocessor * maxthreadblocksize) 会同时运行,对吗?
  • 是的,这基本上是正确的。关于在任何给定时刻可能正在运行的线程的确切数量有更多详细信息,但您的陈述很好地描述了这种情况。
【解决方案2】:

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

【讨论】:

  • 当然。随意对您感兴趣的任何答案进行投票并接受您喜欢的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2016-09-14
  • 1970-01-01
  • 2020-11-02
相关资源
最近更新 更多