【问题标题】:When does MIO Throttle stall happen?MIO 油门失速何时发生?
【发布时间】:2021-05-19 20:11:04
【问题描述】:

根据这个链接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 究竟意味着什么?所有内存指令是否都存储在同一个队列中?

【问题讨论】:

    标签: cuda gpu nvidia nsight-compute


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 2015-02-18
      • 2018-10-12
      • 2021-07-28
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多