每个多处理器 VS 的最大驻留线程数。每个多处理器的最大驻留块数

Arc*_*rus 4 cuda hpc

我在我的 K20 上运行了一个关于并发内核执行资源的问题。我的流只有一点重叠,然后我认为这可能是因为资源限制。所以我参考了手册,我发现:每个多处理器的最大驻留块数为16,每个多处理器的最大驻留线程数为2048。

所以我的问题是:如果我在每个块中有 1024 个线程的 96 个块的内核。该内核将并行使用多少个 SM?

答案 1:96/16 = 6

答案 2:1024/2048*96 = 48(K20 只有 13 个 SM,那么这个内核会如何表现?)

或者也许你有另一个答案?

Pav*_*ili 5

每个 SM 使用的块数取决于以下内容。

  1. 每个 SM 的块数的硬限制。
  2. 每个块的线程数。
  3. 每个块的共享内存量。
  4. 每个块使用的寄存器数。

假设共享内存和寄存器不是限制因素,让我们看几个案例。

案例 1每块 32 个线程和 64 个块。

仅查看线程数即可得出 64 个块和 1 个 SM 的答案。但是每个 SM 有 16 个块的硬限制。在这种情况下,(2) 不是限制性约束,但 (1) 是。所以每个 SM 有 16 个块,并且使用了 4 个 SM。

案例 2每块 1024 个线程和 32 个块。

在这种情况下,(2) 是限制因素。每个 SM 只能有 2048 个线程,每个 SM 有 2 个块,并且使用了 16 个 SM(显然会涉及一些块切换)。

案例 3每块 1024 个线程,96 个块。如问题中所述。

与上述类似,(2)是限制因素。每个 SM 仅使用 2 个块。理论上需要48个SM 。在任何给定点只有 26 (13x2) 个块是“活动的”。CUDA 应该负责将不活动的块与需要处理的块进行切换。

TL;DR为每个 SM 提供较少块数的约束是限制约束。