3

根据此链接https://docs.nvidia.com/nsight-compute/ProfilingGuide/index.html

Warp 在等待 MIO(内存输入/输出)指令队列未满时停止。在极端使用 MIO 流水线(包括特殊数学指令、动态分支以及共享内存指令)的情况下,这种停顿的原因很高。

根据这一https://docs.nvidia.com/drive/drive_os_5.1.12.0L/nsight-graphics/activities/index.html

可能由本地、全局、共享、属性、IPA、索引恒定负载 (LDC) 和解耦数学触发。

我的理解是所有的内存操作都是在 LSU 上执行的,所以我会想象它们一起存储在同一个指令队列中,然后由 LSU 单元执行。由于它们都排在一起,因此第二种解释(包括全局内存访问)对我来说更有意义。问题是,如果是这样的话,LG Throttle 就没有必要了。

MIO Throttle 究竟意味着什么?所有内存指令是否都存储在同一个队列中?

4

1 回答 1

1

MIO 是 NVIDIA SM 中的一个分区(从 Maxwell 开始),它包含在 4 个 warp 调度程序或较慢的数学执行单元(例如 XU 管道)之间共享的执行单元。

发布到这些执行单元的指令首先被发布到指令队列中,从而允许 warp 调度程序继续从 warp 发出独立的指令。如果 warp 的下一条指令是到已满的指令队列,则 warp 将停止,直到队列未满并且可以将指令排入队列。当这种停顿发生时,warp 将根据指令队列类型报告节流原因。指令队列到管道的映射因芯片而异。这是一般映射。

  • mio_throttle (ADU, CBU, LSU, XU)
  • lg_throttle (LSU)
    • 如果 MIO 指令队列达到本地/全局指令的水印,则使用 lg_throttle。尽早节流本地/全局指令允许 SM 在由于本地/全局 L1 未命中导致的 L1 背压时继续发出共享内存指令。
  • tex_throttle(TEX,非*100芯片上的FP64,TU11x上的Tensor)

如果 warp 的下一条指令是针对特定子分区的执行单元(FMA、ALU、Tensor、FP64(*100 GPU)),那么停顿的原因是 math_throttle。

于 2021-03-10T16:58:34.703 回答