我使用 Nvidia 视觉分析器 (nvvp) 在 cublas 内核上执行内核分析。这个链接Latency Distribution是延迟分布的结果。
该文件以这种方式解释了“指令发出”一词 - “指令发出 - 经线发出”,这让我感到困惑。它实际上是什么意思?
我使用 Nvidia 视觉分析器 (nvvp) 在 cublas 内核上执行内核分析。这个链接Latency Distribution是延迟分布的结果。
该文件以这种方式解释了“指令发出”一词 - “指令发出 - 经线发出”,这让我感到困惑。它实际上是什么意思?
首先是关于CUDA 执行模型的一些背景知识。
CUDA warp是 CUDA GPU 上调度和执行的基本单元。warp 是一起执行的 32 个线程的固定集合。
因此,在任何给定的时钟周期内,由 warp 中的一个线程执行的指令总是由 warp 中的所有其他线程执行(尽管它们可能被断言为关闭或被屏蔽为不活动,并且在此讨论中忽略 Volta)。
CUDA 流式多处理器 (SM) 具有调度程序,它查看属于可用 warp 的各种执行线程,并从那些准备好的执行线程中选择指令,以将这些指令调度到 SM 内的各个执行单元上。
然后发出的指令,意味着warp调度器选择了一条指令,并将其发布(调度)到一组执行单元上,以进行处理。说“指令已发出”实际上意味着,由于 CUDA 执行模型,该指令是在整个 warp 范围内发出的,这意味着它被调度到 32 个相关执行单元上,以便为 warp 中的所有 32 个线程服务该指令。我们可以说“已发出该经线”意味着已为经线中的所有 32 个线程发出指令。
现在,关于分布饼图,您可能需要参考这里。
分析器使用PC 采样来确定采样点处的扭曲状态,然后将如此采样的扭曲状态放入饼图分布图中,以显示特定状态被采样的时间百分比。
经线可以处于多种状态,我不会尝试对它们进行定义和总结。但是许多状态将对应于“停顿”状态,这意味着处于该状态的扭曲不能从它发出指令(例如,可能是因为下一条指令对先前发出的尚未完成的指令具有执行依赖性然而)。“不失速”状态,是“指令下达”。(扭曲状态在这里定义。从技术上讲,“未选中”是“停顿”状态,但我将在下面讨论)。
“指令下达”大概是亚空间的“最佳”状态吧。在对 warp 进行采样的时钟周期,它有一条指令准备好被调度,实际上一条或多条指令实际上是从该 warp 发出的。
相比之下,“未选择”(技术上也是“停顿”状态)是“准备好”发布的经线,但由于某种原因,经线调度程序选择从另一个经线中选择指令以在时钟中发布采样的周期。