如何使翘曲导致另一个翘曲处于空闲状态?

问题描述 投票:0回答:1

正如你在问题的标题中看到的那样,我想知道一个warp如何导致另一个warp进入Idle状态。我在SO中读了很多Q / A,但我找不到答案。在任何时候,只能在一个块中运行一个warp?如果是这样,空闲的warp状态没有任何意义,但如果我们可以同时运行多个warp,则每个warp可以单独执行其他warp。

该论文称:不规则的工作项导致整个经线处于空闲状态(例如,在下图中经线0经线1)。

enter image description here

cuda gpu block warp-scheduler
1个回答
2
投票

Nsight VSE剖析器用于扭曲状态的术语在http://docs.nvidia.com/gameworks/index.html#developertools/desktop/nsight/analysis/report/cudaexperiments/kernellevel/issueefficiency.htm中定义。这些术语也用于许多GTC演示中的性能分析。

当线程块的所有资源都可用时,计算工作分配器(CWD)将在SM上启动线程块。资源包括:

  • 线程块插槽
  • 经线槽(足够用于块)
  • 每个经线的寄存器
  • 块的共享内存
  • 街区的障碍

当SM具有足够的资源时,线程块在SM上启动。线程块被栅格化为warp。 Warp被分配给warp调度程序。资源分配给每个warp。此时,warp处于活动状态,这意味着warp可以执行指令。

在每个循环中,每个warp调度程序从符合条件的warp列表(活动的,未停止的)中进行选择,并发出1-2个warp指令。由于多种原因,经线可能会停滞不前。请参阅上面的文档。

Kepler - Volta GPU(GP100除外)每个流多处理器(SM)有4个warps调度程序(子分区)。线程块的所有warp必须位于同一SM上。因此,在每个给定周期,线程块可以在线程块中发出最多4个(子分区)warp的指令。

每个warp调度程序可以在每个循环中选择任何符合条件的warp。 SM是流水线的,因此所有最大大小的线程块(1024个线程== 32个warp)的warp都可以在每个周期都有指令。

我可以在没有附加上下文的情况下确定的唯一空闲定义是: - 如果warp调度程序具有2个符合条件的warp而选择1,则另一个定义为未选中的状态。 - 如果线程块中的warp执行屏障(__syncthreads),那么warp将在屏障上停止(不符合条件),直到满足屏障的要求为止。经线在屏障上停滞不前。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.