Cuda 什么是「;“长”;及;简称;记分牌w.r.t.MIO/L1TEX?

Cuda 什么是「;“长”;及;简称;记分牌w.r.t.MIO/L1TEX?,cuda,gpu,gpgpu,micro-architecture,nsight-compute,Cuda,Gpu,Gpgpu,Micro Architecture,Nsight Compute,在最近的NVIDIA微体系结构中,出现了新的(?)翘曲暂停原因/翘曲调度程序状态 此分类法中的两个项目是: 短记分板-记分板对MIO队列操作的依赖性 长记分板-记分板对L1TEX操作的依赖性 其中,我认为,“记分板”用于无序执行数据依赖性跟踪(参见示例) 我的问题是: 形容词“短”或“长”描述什么?它是一个记分板的长度吗?两种不同的操作有两个不同的记分牌 MIO之间的这种非直觉的二分法是什么意思?一些,但不是所有的都是记忆操作;和L1TEX操作,它们都是内存操作?这是一种二分法,仅仅是因为

在最近的NVIDIA微体系结构中,出现了新的(?)翘曲暂停原因/翘曲调度程序状态

此分类法中的两个项目是:

  • 短记分板-记分板对MIO队列操作的依赖性
  • 长记分板-记分板对L1TEX操作的依赖性
其中,我认为,“记分板”用于无序执行数据依赖性跟踪(参见示例)

我的问题是:

  • 形容词“短”或“长”描述什么?它是一个记分板的长度吗?两种不同的操作有两个不同的记分牌
  • MIO之间的这种非直觉的二分法是什么意思?一些,但不是所有的都是记忆操作;和L1TEX操作,它们都是内存操作?这是一种二分法,仅仅是因为w.r.t.失速的原因,还是关于实际的硬件

NVIDIA GPU有两种指令分类:

  • 固定延迟-数学、位、寄存器移动
  • 可变延迟-ld/st到共享、本地、全局和纹理以及慢速数学操作
  • 短记分板长记分板根据从可变延迟指令返回的数据在指令上报告。短记分板用于报告不会离开SM的可变延迟指令的依赖项,如慢数学(如倒数sqrt或共享内存)。对于可能离开SM的依赖项(如全局/本地内存访问和纹理提取),会报告长记分板

    来自

    长记分牌

    Warp被暂停,等待L1TEX(本地、全局、曲面、tex)操作上的记分板相关性。为了减少在L1TEX数据访问上等待的周期数,验证了内存访问模式对于目标体系结构是最佳的,试图通过增加数据局部性来提高缓存命中率,或者通过改变缓存配置,并考虑将频繁使用的数据移动到共享内存。 短记分牌

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

    MIO vs.L1TEX

    MIO和L1TEX是英伟达SM中的分区。MIO单元负责共享执行单元(由一个或多个SM子分区共享),包括低速率数学单元(例如GeForce芯片上的双精度)和内存输入/输出。内存子系统包含L1、TEX单元、共享内存单元以及SM的其他特定于域(例如图形)的接口。MIO子系统包括L1、TEX和共享内存的实现在开普勒、麦克斯韦-帕斯卡和伏特-安培之间差异很大。SM子分区(warp Scheduler)通过指令队列与直接调度向共享执行单元发出指令。对于SM 7.0+而言,如果这些单元的指令队列已满,则会出现失速原因(mio_油门、lg_油门和tex_油门)

    MIO定义中包含的内容因体系结构而异。L1TEX技术上属于MIO分区。L1TEX有两个输入接口,因此比较复杂:

  • LSU接口用于共享内存、本地/全局内存(标记)和特殊操作,如随机和专用寄存器
  • TEX接口用于纹理提取,在7.0-8.x上是慢速数学操作的子集(例如GeForce卡上的FP64)。后者有点令人困惑。慢速数学单元是为了二进制兼容性而存在的,不希望与纹理获取同时使用
  • MIO一词可能令人困惑。
    如果有两个不同的接口,术语L1TEX也可能会混淆。虽然有两个接口本地/全局和纹理/曲面共享相同的缓存查找阶段、相同的缓存RAM和相同的SM到L2接口,因此对于许多度量,术语L1TEX用于表示单元。

    编译器是否已经展开循环以隐藏慢指令的延迟(或者该体系结构已经通过从不同线程运行指令隐式地做到了这一点)?或者,它可以通过不立即使用结果来尝试进行软件管道化来隐藏缓慢操作的延迟吗?(这将有助于以CPU顺序进行管道化。)answe的第一部分很有帮助:“引用我刚刚链接到的评测指南-没有帮助,特别是因为它没有添加问题和/或您的答案已经说过的以外的信息。@PeterCordes编译器通常会积极尝试展开循环,其主要目的是独立的instru操作重新排序以允许首先发出长延迟指令。请参阅。这很容易通过二进制分析工具和适当的代码进行实验观察。即使没有循环展开,编译器也会尝试尽早重新排序独立的加载。