我在我的 K20 上运行了一个关于并发内核执行资源的问题。我的流只有一点重叠,然后我认为这可能是因为资源限制。所以我参考了手册,我发现:每个多处理器的最大驻留块数为16,每个多处理器的最大驻留线程数为2048。
所以我的问题是:如果我在每个块中有 1024 个线程的 96 个块的内核。该内核将并行使用多少个 SM?
答案 1:96/16 = 6
答案 2:1024/2048*96 = 48(K20 只有 13 个 SM,那么这个内核会如何表现?)
或者也许你有另一个答案?
每个 SM 使用的块数取决于以下内容。
假设共享内存和寄存器不是限制因素,让我们看几个案例。
案例 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 提供较少块数的约束是限制约束。
| 归档时间: |
|
| 查看次数: |
5630 次 |
| 最近记录: |