Ash*_*ppa 11 cuda gpu gpu-warp
注意:此问题特定于nVIDIA Compute Capability 2.1设备.以下信息可从CUDA编程指南v4.1获得:
在计算能力2.1设备中,每个SM具有48个SP(核心),用于整数和浮点运算.每个warp由32个连续的线程组成.每个SM都有2个warp调度程序.在每个指令发布时,一个warp调度程序选择一个准备好的线程warp并发出2个内核上的warp 指令.
我的疑惑:
har*_*ism 21
这是指令级并行(ILP).同时从经线发出的指令必须彼此独立.它们由SM指令调度程序发出,用于分离SM中的功能单元.
例如,如果warp的指令流中有两个独立的FMAD指令准备发布,并且SM有两组可用的FMAD单元,则可以在同一周期内发出它们.(说明可以各种组合一起发布,但我没有记住它们,所以我不会在这里提供详细信息.)
SM 2.1中的FMAD/IMAD执行单元为16 SP宽.这意味着向16个宽的执行单元之一发出warp(32线程)指令需要2个周期.每个SM有多个(3个)这16个宽的执行单元(总共48个SP),以及特殊功能单元.每个warp调度程序可以在每个周期发出两个warp调度程序.
假设FMAD执行单元是pipe_A,pipe_B和pipe_C.让我们说,在周期135,有两个独立的FMAD指令fmad_1和fmad_2正在等待:
fmad_1,以FMAD pipe_A,和上半年经fmad_2向FMAD pipe_B. fmad_1将进入FMAD的下一阶段pipe_A,同样地,上半场经线fmad_2将进入FMAD的下一阶段pipe_B.warp调度程序现在发出fmad_1对FMAD pipe_A的下半部分warp,以及fmad_2对FMAD的下半部分warp pipe_B. 因此,从同一个warp发出2个指令需要2个周期.但是,正如OP提到的那样,有两个warp调度程序,这意味着整个过程可以同时完成另一个warp的指令(假设有足够的功能单元).因此,最大发布率是每个周期2个扭曲指令.注意,这是程序员视角的抽象视图 - 实际的低级体系结构细节可能不同.
至于你关于接下来什么时候准备就绪的问题,如果有更多的指令不依赖于任何未完成的(已经发布但未退休的)指令,那么它们可以在下一个周期发布.但是,只有可用的指令依赖于飞行中的指令,经线将无法发出.然而,这是其他warp进入的地方 - SM可以为任何具有可用(非阻塞)指令的驻留warp发出指令.warps之间的这种任意切换提供了GPU依赖于高吞吐量的"延迟隐藏".