什么是“长”和“短”记分牌 w.r.t. MIO/L1TEX?

问题描述

在最近的 NVIDIA 微架构中,出现了新的 (?) taxonomy 扭曲停顿原因/扭曲调度程序状态。

分类法中的两个项目是:

  • 短记分板 - 记分板依赖于 MIO 队列操作。
  • 长记分牌 - 记分牌依赖于 L1TEX 操作。

我认为,“记分板”用于无序执行数据依赖性跟踪的意义(参见例如 here)。

我的问题:

  • 形容词“短”或“长”描述什么?它是单个记分牌的长度吗?两种不同类型的操作有两种不同的记分牌?
  • MIO 之间这种有点不直观的二分法是什么意思 - 一些,但不是全部都是内存操作;和 L1TEX 操作,哪些都是内存操作?这是一个二分法 w.r.t.只是停顿原因还是与实际硬件有关?

解决方法

NVIDIA GPU 有两种指令分类:

  1. 固定延迟 - 数学、按位、寄存器移动
  2. 可变延迟 - ld/st 到共享、本地、全局和纹理以及缓慢的数学运算

Short ScoreboardLong Scoreboard 是根据指令报告的,这些指令依赖于从可变延迟指令返回的数据。对于不会离开 SM 的可变延迟指令的依赖项(例如缓慢的数学运算,例如倒数 sqrt 或共享内存),会报告短记分板。对于可能离开 SM 的依赖项(例如全局/本地内存访问和纹理获取),会报告长记分板。

来自Nsight Cmpute v2020.3.1 Kernel Profiling Guide的详细说明

长记分牌

Warp 在等待记分板对 L1TEX(局部、全局、表面、tex)操作的依赖时停止。为了减少等待 L1TEX 数据访问的周期数,请验证内存访问模式是否适合目标架构,尝试通过增加数据局部性或更改缓存配置来提高缓存命中率,并考虑将常用数据移至共享内存.

短记分牌

Warp 停止等待记分板依赖于 MIO(内存输入/输出)操作(不是 L1TEX)。由于记分板短而导致大量停顿的主要原因通常是对共享内存的内存操作。其他原因包括频繁执行特殊数学指令(例如 MUFU)或动态分支(例如 BRX、JMX)。验证是否存在共享内存操作并减少组冲突(如果适用)。

MIO 与 L1TEX

MIO 和 L1TEX 是 NVIDIA SM 中的分区。 MIO 单元负责共享执行单元(由 1 个或多个 SM 子分区共享),包括低速率数学单元(例如 GeForce 芯片上的双精度)和内存输入/输出。内存子系统包含 L1、TEX 单元、共享内存单元和其他特定于 SM 的域(例如图形)接口。 MIO 子系统(包括 L1、TEX 和共享内存)的实现在 Kepler、Maxwell-Pascal 和 Volta-Ampere 之间差异很大。 SM 子分区(warp 调度器)通过指令队列与直接调度向共享执行单元发出指令。对于 SM 7.0+,如果这些单元的指令队列已满,则会出现停顿原因(mio_throttle、lg_throttle 和 tex_throttle)。

MIO 定义中包含的内容因架构而异。 L1TEX 在技术上是在 MIO 分区中。 L1TEX 有两个输入接口,很复杂:

  1. LSU 接口用于共享内存、本地/全局内存(标记)以及特殊操作,例如随机播放和特殊用途寄存器。
  2. TEX 接口用于获取纹理,并且在 7.0-8.x 上是慢速数学运算的子集(例如 GeForce 卡上的 FP64)。后者有点混乱。慢速数学单元是为了二进制兼容性而存在的,预计不会与纹理提取同时使用。

术语 MIO 可能会令人困惑。 给定两个不同的接口,术语 L1TEX 也可能令人困惑。虽然有两个接口本地/全局和纹理/表面共享相同的缓存查找阶段、相同的缓存 RAM 和相同的 SM 到 L2 接口,因此对于许多指标,术语 L1TEX 用于指代单元。