CUDA nvvp提供的报告中"Instruction Issued"是什么意思?

What does "Instruction Issued" mean in the report provided by CUDA nvvp?

我使用 Nvidia 可视化分析器 (nvvp) 对 cublas 内核进行内核分析。这个linkLatency Distribution就是延迟分配结果

文档以这种方式解释 "instruction issued" 术语 - "Instruction Issued - Warp was issued",这让我很困惑。 它究竟是什么意思?

首先介绍一些关于 the CUDA execution model 的背景知识。

CUDA warp 是 CUDA GPU 上调度和执行的基本单元。 warp 是 32 个一起执行的线程的固定集合。

因此,在任何给定的时钟周期中,由 warp 中的一个线程执行的指令总是由 warp 中的所有其他线程执行(尽管它们可能被断言或屏蔽为不活动,并且在本讨论中忽略 Volta)。

CUDA 流式多处理器 (SM) 具有调度程序,它查看属于可用 warp 的各种执行线程,以及来自准备好的执行线程的 select 指令,以将这些指令调度到各种SM内的执行单位。

一条指令发出然后,意味着warp调度程序select编辑了一条指令,并将其发出(调度)到一组执行单元上,以进行处理.说 "instruction was issued" 实际上意味着,由于 CUDA 执行模型,该指令是在 warp 范围内发出的,这意味着它被调度到 32 个相关的执行单元上,以便为 warp 中的所有 32 个线程提供该指令。我们可以说 "that warp was issued" 意味着为 warp 中的所有 32 个线程发出了指令。

现在,关于分布饼图,您可能需要参考 here

profiler是通过PC-sampling确定采样点处的warp状态,然后将采样后的warp状态放入饼图分布图中,以显示采样特定状态的时间百分比。

扭曲可以处于多种状态,我不打算尝试对它们进行定义和总结。但是许多状态将对应于 "stall" 状态,这意味着处于该状态的扭曲不能从中发出指令(例如,可能是因为下一条指令具有 执行依赖性 之前发布的尚未完成的指令)。 "not stall"状态,是"instruction issued"。 (扭曲状态定义为 here。从技术上讲,"not selected" 是 "stall" 状态,但我将在下面讨论)。

"instruction issued"从warp的角度来看大概就是"best"状态。在 warp 被采样的时钟周期,它有一条指令准备好被调度 ,实际上一条或多条指令实际上是从那个 warp.

发出的

相比之下,"not selected"(技术上也是 "stall" 状态)是一个要发出 "ready" 的 warp,但出于某种原因,warp 调度程序选择了 select 来自另一个 warp 的指令在被采样的时钟周期中发出。