我一直在使用CUDA一个月,现在我试图说清楚需要多少warp / block来隐藏内存访问的延迟。我认为它与多处理器上驻留warp的最大值有关。
根据CUDA_C_Programming_Guide(v-7.5)中的表13,每个多处理器的驻留warp的最大值为64。 然后,我的问题是:驻地经线是什么?它是指从GPU的内存中读取数据并准备好由SP处理的那些warp?或者参考可以读取数据的warw或者准备由SP处理的warp的warp,这意味着除了那些64之外的其他warp既不能读取内存也不能被SP处理,直到64个常驻warp中的一些完成。
答案 0 :(得分:2)
驻留扭曲的最大数量是可在多处理器上并行处理的最大扭曲数。 当warp调度程序调度并已分配寄存器时,warp处于活动状态。
如果您实现了并行运行此数量的经线,则理论最大占用率(100%或1:1)。 如果没有,则占用率较低。
其他经线将不得不等待。
可能与this question on SO有关。
针对进一步问题编辑回答:
关于可以处理的最大扭曲量:SM(流式多处理器)具有最多处理核心,并且GPU具有有限数量的SM。即使this webinar与新架构不是最新的,它也提供了一些很好的例子:
SM - 具有多个处理核心的流式多处理器
每个SM包含32个处理核心
以单指令多线程(SIMT)方式执行
卡上最多16个SM,最多512个计算核心
并且:
Fermi每个SM最多可以有48个活动经线(1536个线程)
首先,对于某些术语,它们并不总是明确正式,例如参见this topic from Nvidia DevTalk。
正如本主题所解释的那样,一旦给定的warp在其SM上分配资源,它就会处于活动状态。 然后它可以是:
这是可能的,因为我们在那里有一个SIMT架构,意思是单指令多线程。如果您计划调整入住率,您会发现有关此主题的大量阅读材料非常有用。