【发布时间】:2021-05-13 23:12:28
【问题描述】:
假设我有 8 个线程块需要执行,我的 GPU 上有 8 个 SM(流式多处理器),8 个线程块可以放入一个 SM。我想知道线程块是如何分配给 SM 的。会不会把所有的线程块都分配给一个SM,而其他7个都是空的?还是将每个线程块分配给单独的 SM?
【问题讨论】:
假设我有 8 个线程块需要执行,我的 GPU 上有 8 个 SM(流式多处理器),8 个线程块可以放入一个 SM。我想知道线程块是如何分配给 SM 的。会不会把所有的线程块都分配给一个SM,而其他7个都是空的?还是将每个线程块分配给单独的 SM?
【问题讨论】:
CUDA 基本上未指定此信息。没有描述块调度程序将遵循的规则。
根据经验,不难证明 CUDA 块调度程序会优先将块存放在空的 SM 上,然后再将块存放在已经存在一个或多个块的 SM 上。
这种优先行为的原因很清楚。这是充分利用分布在设备上的 GPU 资源的方式;对于任何给定的 GPU,它可以在一系列网格大小上实现最高性能。
【讨论】: