gpt4 book ai didi

cuda - nVIDIA CC 2.1 GPU warp 调度程序如何一次为 warp 发出 2 条指令?

转载 作者:行者123 更新时间:2023-12-02 19:48:19 29 4
gpt4 key购买 nike

注意:此问题特定于 nVIDIA 计算能力 2.1 设备。以下信息来自《CUDA 编程指南 v4.1》:

In compute capability 2.1 devices, each SM has 48 SP (cores) for integer and floating point operations. Each warp is composed of 32 consecutive threads. Each SM has 2 warp schedulers. At every instruction issue time, one warp scheduler picks a ready warp of threads and issues 2 instructions for the warp on the cores.

我的疑问:

  • 一个线程将在一个核心上执行。设备如何在单个时钟周期或单个多周期操作中向线程发出 2 条指令?
  • 这是否意味着这两条指令应该彼此独立?
  • 这两条指令可以在核心上并行执行,也许是因为它们在核心中使用不同的执行单元?这是否也意味着只有在 2 条指令执行完毕之后,扭曲才会准备好,还是在其中一条指令之后?

最佳答案

这是指令级并行性(ILP)。同时从扭曲发出的指令必须彼此独立。它们由SM指令调度器发出,用于分隔SM中的功能单元。

例如,如果 warp 的指令流中有两个独立的 FMAD 指令准备发出,并且 SM 有两组可用的 FMAD 单元可以发出它们,则它们都可以在同一周期中发出。 (指令可以通过各种组合一起发出,但我没有记住它们,所以这里不再提供详细信息。)

SM 2.1 中的 FMAD/IMAD 执行单元有 16 个 SP 宽。这意味着需要 2 个周期才能向 16 宽执行单元之一发出 warp(32 线程)指令。每个 SM 有多个 (3) 个 16 宽执行单元(总共 48 个 SP),以及特殊功能单元。每个 warp 调度程序每个周期可以向其中两个发出任务。

假设 FMAD 执行单元为 pipe_Apipe_Bpipe_C。假设在周期 135,有两个独立的 FMAD 指令 fmad_1fmad_2 正在等待:

  • 在周期 135,指令调度程序将向 FMAD pipe_A 发出 fmad_1 的前半个 warp(16 个线程),以及 fmad_2 的前半个 warp 到 FMAD pipe_B
  • 在第 136 周期,fmad_1 的前半扭曲将移至 FMAD pipe_A 的下一个阶段,同样,fmad_2< 的前半扭曲 将移至 FMAD pipe_B 的下一个阶段。 warp 调度程序现在将 fmad_1 的后半个 warp 发出到 FMAD pipe_A,并将 fmad_2 的后半个 warp 发出到 FMAD pipe_B

因此需要 2 个周期才能从同一个 warp 发出 2 条指令。但正如OP提到的,有两个warp调度程序,这意味着整个过程可以针对来自另一个warp的指令同时完成(假设有足够的功能单元)。因此,最大发出率为每个周期 2 个扭曲指令。请注意,这是从程序员角度来看的抽象 View - 实际的低级架构细节可能有所不同。

至于你关于下一次扭曲何时准备好的问题,如果有更多指令不依赖于任何未完成的(已发出但未退役)指令,那么它们可以在下一个周期中发出。但一旦唯一可用的指令依赖于飞行中的指令,曲速将无法发出。然而,这就是其他扭曲发挥作用的地方——SM可以为任何具有可用(非阻塞)指令的常驻扭曲发出指令。这种扭曲之间的任意切换提供了 GPU 赖以实现高吞吐量的“延迟隐藏”。

关于cuda - nVIDIA CC 2.1 GPU warp 调度程序如何一次为 warp 发出 2 条指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9886002/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com