NVIDIA GPU 有两种指令分类:
- 固定延迟 - 数学、按位、寄存器移动
- 可变延迟 - ld/st 到共享、本地、全局和纹理以及缓慢的数学运算
短记分板和长记分板是根据从可变延迟指令返回的数据的指令报告的。短记分板报告了来自变量延迟指令的依赖关系,这些指令不会离开 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 的域(例如图形)接口。包括 L1、TEX 和共享内存在内的 MIO 子系统的实现在 Kepler、Maxwell-Pascal 和 Volta-Ampere 之间差异很大。SM 子分区(warp 调度程序)通过指令队列与直接调度向共享执行单元发出指令。对于 SM 7.0+,如果这些单元的指令队列已满,则会出现停顿原因(mio_throttle、lg_throttle 和 tex_throttle)。
MIO 定义中包含的内容因架构而异。L1TEX 在技术上位于 MIO 分区中。L1TEX 很复杂,因为它有两个输入接口:
- LSU 接口用于共享内存、本地/全局内存(已标记)和特殊操作,例如 shuffle 和专用寄存器。
- TEX 接口用于纹理提取和 7.0-8.xa 的慢速数学运算子集(例如 GeForce 卡上的 FP64)。后者有点混乱。缓慢的数学单元是为了二进制兼容性而存在的,预计不会与纹理提取同时使用。
MIO 一词可能令人困惑。考虑到两个不同的接口,术语 L1TEX 也可能令人困惑。虽然有两个接口本地/全局和纹理/表面共享相同的缓存查找阶段、相同的缓存 RAM 和相同的 SM 到 L2 接口,因此对于许多指标而言,术语 L1TEX 用于指代单元。