我使用Nvidia visual profiler(nvvp)在cublas内核上执行内核分析。此链接Latency Distribution是延迟分发结果。
该文件解释了发出的"指令"这样的术语 - "指令发布 - Warp发布",这让我感到困惑。 它究竟意味着什么?
答案 0 :(得分:1)
首先介绍the CUDA execution model的背景信息。
CUDA warp是CUDA GPU上调度和执行的基本单位。 warp是32个线程的固定集合,它们一起执行。
因此,在任何给定的时钟周期内,warp中的一个线程执行的指令总是由warp中的所有其他线程执行(尽管它们可以被断言或屏蔽为非活动状态,并且忽略Volta用于此讨论)。 p>
CUDA流多处理器(SM)具有调度器,其查看属于可用warp的各种执行线程,并从准备好的那些执行线程中选择指令,以在SM内的各种执行单元上调度这些指令。
然后发出指令 ,意味着warp调度程序选择了一条指令,并将其发送(调度它)到一组执行单元上进行处理。由于CUDA执行模型,有效地表示“发出指令”意味着该指令是在整个warp范围内发出的,这意味着它被调度到32个相关的执行单元,以便为warp中的所有32个线程提供该指令。我们可以说“发出warp”意味着为warp中的所有32个线程发出了指令。
现在,关于分发饼图,您可能需要参考here。
探查器使用PC-sampling确定采样点处的扭曲状态,然后将经过采样的扭曲状态放入饼图分布图中,以显示时间百分比一个特定的州被抽样。
warp可以处于各种状态,我不打算尝试定义和总结它们。但是许多状态将对应于“失速”状态,这意味着该状态的变形不能从其发出指令(例如,可能因为下一条指令具有执行依赖性以前发布的指令尚未完成)。 “非停顿”状态是“发出指令”。 (经线状态定义为here。从技术上讲,“未选择”是一种“失速”状态,但我将在下面讨论它。
从经纱的角度来看,“发出的指令”可能是“最佳”状态。在对warp进行采样的时钟周期中,它有一条准备好的指令,实际上一条或多条指令实际上是从该warp 发出的。相比之下,“未选择”(技术上也是“失速”状态)是一个“准备好”发布的warp,但由于某种原因,warp调度程序选择从另一个warp中选择指令来发布在采样的时钟周期中。