CUDA 的 resident warp 问题

Posted

技术标签:

【中文标题】CUDA 的 resident warp 问题【英文标题】:Questions of resident warps of CUDA 【发布时间】:2017-05-27 05:47:05 【问题描述】:

我已经使用 CUDA 一个月了,现在我想弄清楚需要多少扭曲/块来隐藏内存访问的延迟。我认为这与多处理器上的最大常驻扭曲有关。

根据 CUDA_C_Programming_Guide (v-7.5) 中的 Table.13,每个多处理器的驻留扭曲的最大值为 64。 然后,我的问题是:什么是常驻经线?它是指那些从 GPU 内存读取的数据并准备好由 SP 处理的扭曲吗?或者指可以为数据读取内存的warp或准备由SP处理的warp,这意味着除了这64个warp之外的其余warp既不能读取内存也不能被SP处理,直到这64个驻留warp中的一些完成.

【问题讨论】:

【参考方案1】:

驻留扭曲的最大数量是可以在多处理器上并行处理的最大扭曲数。 当 warp 调度程序调度并分配寄存器时,warp 处于活动状态。

如果您实现了并行运行这个数量的扭曲,这就是理论上的最大占用率(100% 或 1:1)。 如果不是,则入住率较低。

其他经线将不得不等待。

可能与this question on SO有关。


为更多问题编辑了答案:

    扭曲

关于可以处理的最大warp数量:SM(流式多处理器)具有最大的处理核心,而GPU的SM数量有限。即使this webinar 不是最新的新架构,它也提供了一些很好的例子:

SM – 具有多个处理核心的流式多处理器

每个 SM 包含 32 个处理核心

以单指令多线程 (SIMT) 方式执行

一张卡上最多 16 个 SM,最多支持 512 个计算核心

还有:

每个 SM(1536 个线程)Fermi 最多可以有 48 个活动经纱

    处理扭曲

首先,对于某些术语,它们并不总是很正式,例如,请参阅this topic from Nvidia DevTalk。

正如在本主题中所解释的,给定的 warp 一旦在 SM 上分配了它的资源,它就会处于活动状态。 那么就可以了:

合格:可以发出操作 停滞不前:由于资源/数据依赖性,它不能

这是可能的,因为我们在那里有一个 SIMT 架构,这意味着 单指令多线程。如果您计划调整入住率,您会发现很多关于此主题的阅读材料非常有用。

【讨论】:

我很困惑。您提到“驻留扭曲的最大数量是可以在多处理器上并行处理的最大扭曲数。当扭曲调度程序调度并分配寄存器时,扭曲是活动的”。我的问题是: 1. 经线被激活时称为居民? 2.“多处理器处理”中的“处理”是什么意思?这是否意味着驻留扭曲已准备好计算其操作数?或者这意味着驻留扭曲被激活以读取操作数或计算操作数?最让我困惑的是:驻留经线是否意味着驻留经线不需要读取操作数,但在此经线被激活为驻留经线之前已准备好操作数?换句话说,一个经线不能成为常驻经线,直到它的操作数准备好? @芋头 我更新了我的答案,做了一些澄清。如果您仍然不想理解所有内容,您应该完整阅读我提供的每个链接作为链接,因为它们回答了(几乎)您可能想知道的关于扭曲可能处于的不同状态的所有内容。 非常感谢您的帮助。没有深入阅读,但是您提供的链接与我的困惑完全相关。我会继续解决的。 很高兴我能帮上忙 :)

以上是关于CUDA 的 resident warp 问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥要费心去了解 CUDA Warps?

为啥 CUDA GPU 只需要 8 个活动 warp?

CUDA 中 warp 调度程序的指令发布时间延迟是多少?

CUDA 中每个 Warp 关系的数据大小到指令

CUDA - 多处理器、Warp 大小和每个块的最大线程数:确切的关系是啥?

cuda-gdb:“CUDA_EXCEPTION_9:Warp Hardware Stack Overflow”的含义/出现