实际的warp顺序执行还是并行执行?

时间:2012-11-21 00:29:47

标签: cuda

如果我们为SM配置了256个线程/块,那么总计将是3个块/ SM(考虑最大768个线程/ SM)。现在总warp / block将是256/32 = 8,因此8 * 3 = 24 warps / SM。那么块中的这8个warp将是顺序执行还是并行执行,SM中的24个warp将顺序执行还是并行执行? 由于已经清除,因此SM可以在任何时间执行3个块(并行)。

1 个答案:

答案 0 :(得分:1)

@robot,为了更好的可读性,我将讨论转移到答案。如果你愿意,你也可以接受它。

不同的块可以映射到不同的SM,因此可以并行执行。但是,在内部,块由warp组成,这些warp被安排在一个SM上执行(在1.x设备上)。但是,图形硬件可以在0开销之间切换不同的warp(由于静态寄存器分配)。因此,通常来自不同阶段的SM管道中存在来自不同warp(以及可能来自不同块)的指令。

活动warp是那些准备好执行的warpi,即不等待屏障,内存访问并且没有寄存器依赖(如read-after-write)。我不确定硬件如何选择下一个warp来执行。可预见的经线优先于“年龄”(等待时间)和其他因素来防止饥饿。

关于你的问题:

  1. 在1.x设备上,每个SM最多可以有768个线程,即24个warps / SM。在2.x及更高版本上,每个SM最多有1536个线程/ 48个warp(取决于寄存器的使用情况)
  2. 如果每个GPU有10个SM,并且你有足够的寄存器/共享内存来为每个SM运行24个warp,则每个GPU最多可以有24 * 10个有效warp。但是,很少会出现所有warp同时处于活动状态的情况,因为大多数warp将等待内存访问/寄存器依赖性或障碍,具体取决于您的程序逻辑。注意,指令的实际执行(不是调度!)在1.x设备上最多可能需要22个周期,因此在指令完成之前,warp将处于非活动状态。