什么"指令发布"在CUDA nvvp提供的报告中是什么意思?

时间:2018-04-19 13:17:08

标签: cuda profiling nvvp

我使用Nvidia visual profiler(nvvp)在cublas内核上执行内核分析。此链接Latency Distribution是延迟分发结果。

该文件解释了发出的"指令"这样的术语 - "指令发布 - Warp发布",这让我感到困惑。 它究竟意味着什么?

1 个答案:

答案 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中选择指令来发布在采样的时钟周期中。