线程块网格和多处理器
Posted
技术标签:
【中文标题】线程块网格和多处理器【英文标题】:Grid of thread blocks and Multiprocessor 【发布时间】:2013-05-09 03:07:17 【问题描述】:CUDA programing guide 声明:
CUDA 架构是围绕可扩展的多线程流式多处理器 (SM) 阵列构建的。当主机 CPU 上的 CUDA 程序调用内核网格时,网格的块被枚举并分发到具有可用执行能力的多处理器。一个线程块的线程在一个多处理器上并发执行,多个线程块可以在一个多处理器上并发执行。当线程块终止时,新的块会在空出的多处理器上启动。
这是否意味着如果我有 2 个多处理器 x n-cuda 内核的视频卡,并且如果启动类似的内核
MyKernel<<<1,N>>>(sth);
其中一个多处理器将处于空闲状态,因为我正在启动一个包含 N 个线程的块?
【问题讨论】:
就是这个意思。 【参考方案1】:你是对的。
在所有当前的 CUDA 架构中,一个块只能在单个多处理器上调度和运行。如果您在具有多个多处理器的设备上运行一个块,则除了其中一个多处理器之外的所有多处理器都将处于空闲状态。
【讨论】:
如果我想避免任何一个SM闲置,网格大小的执行配置至少应该等于SM个数吗? @FelixXu:不,这还不够。您需要至少运行每个 SM 的最大驻留块数乘以 SM 计数以上是关于线程块网格和多处理器的主要内容,如果未能解决你的问题,请参考以下文章