如何使翘曲导致另一个翘曲处于空闲状态?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使翘曲导致另一个翘曲处于空闲状态?相关的知识,希望对你有一定的参考价值。
正如你在问题的标题中看到的那样,我想知道一个warp如何导致另一个warp进入Idle状态。我在SO中读了很多Q / A,但我找不到答案。在任何时候,只能在一个块中运行一个warp?如果是这样,空闲的warp状态没有任何意义,但如果我们可以同时运行多个warp,则每个warp可以单独执行其他warp。
该论文称:不规则的工作项导致整个经线处于空闲状态(例如,在下图中经线0经线1)。
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将在屏障上停止(不符合条件),直到满足屏障的要求为止。经线在屏障上停滞不前。
以上是关于如何使翘曲导致另一个翘曲处于空闲状态?的主要内容,如果未能解决你的问题,请参考以下文章