线程块网格和多处理器

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 计数

以上是关于线程块网格和多处理器的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 和多处理内存管理:将 DataFrame 拆分为多个块

操作系统—线程概念和多线程模型

操作系统—线程概念和多线程模型

多处理和多线程

什么是多线程,多进程?

多处理和多线程