我正在研究GPU,并开始阅读《 NVIDIA编程指南》,其中指出(第5.2.3节):
变形不准备执行下一个变形的最常见原因 指令是指令的输入操作数不可用
我对第一段表示满意:-)
如果所有输入操作数都是寄存器,则延迟是由寄存器引起的 依赖关系,即某些输入操作数由某些 尚未完成执行的先前指令。在里面 背靠背寄存器依赖性的情况(即某些输入操作数 由上一条指令编写),等待时间等于 前一条指令和翘曲调度程序的执行时间 必须在这段时间内安排不同的经纱的使用说明。 执行时间根据指示而不同,但是 计算能力为3.x的设备通常大约需要11个时钟周期, 转换为计算能力为3.x的设备的44个扭曲 (假设warp以最大的吞吐量执行指令, 否则,需要的翘曲更少)。这也假设 指令级并行性,以便调度程序始终能够 发出每条经线的成对指令。
我对句子“执行时间因指令而异,但对于计算能力3.x的设备通常大约是11个时钟周期,对于计算能力3.x的设备而言大约是44个扭曲”却感到困惑。数字44是哪里来的?要使GPU保持繁忙,是否需要这44个扭曲?
如果某些输入操作数驻留在片外存储器中,则延迟很长 更高:计算能力为3.x的设备为200至400个时钟周期。 保持调度程序繁忙期间所需的经线数量 如此高的延迟时间取决于内核代码及其程度 指令级并行性。通常,如果需要,则需要更多的变形 没有片外存储器的指令数之比 操作数(大多数情况下为算术指令) 带有片外存储器操作数的指令数量很低(这是 比率通常称为程序的算术强度)。对于 例如,假设此比率为30,也假定延迟为300 在具有计算能力3.x的设备上循环。然后大约有40个经线 计算能力3.x的设备所需的(具有相同 上段的假设)。
这里也是一样。 40的数字来自哪里?奇怪的是,这个数字非常接近我们在上一段(44)中获得的数字,在该段落中,计算不需要任何对内存的访问。
我将非常有兴趣了解其工作原理...
谢谢您的帮助