【发布时间】:2011-08-08 07:40:33
【问题描述】:
我一直认为warp调度器一次会执行一个warp,这取决于哪个warp准备好了,这个warp可以来自多处理器中的任何一个线程块。然而,在一张 Nvidia 网络研讨会幻灯片中,声明“占用率 = 在多处理器上同时运行的扭曲数除以可以同时运行的最大扭曲数”。所以一次可以运行多个warp?这是如何工作的?
谢谢。
【问题讨论】:
标签: cuda
我一直认为warp调度器一次会执行一个warp,这取决于哪个warp准备好了,这个warp可以来自多处理器中的任何一个线程块。然而,在一张 Nvidia 网络研讨会幻灯片中,声明“占用率 = 在多处理器上同时运行的扭曲数除以可以同时运行的最大扭曲数”。所以一次可以运行多个warp?这是如何工作的?
谢谢。
【问题讨论】:
标签: cuda
“正在运行”可能更好地解释为“在 SM 上具有状态和/或在管道中具有指令”。 GPU硬件调度尽可能多的可用块或将适合SM的资源(以较小者为准),为它们包含的每个warp分配状态(即寄存器文件和本地内存),然后开始调度warp以执行.指令流水线似乎有大约 21-24 个周期长,因此在任何给定时间都有大量线程处于“运行”的各个阶段。
前两代支持 CUDA 的 GPU(即 G80/90 和 G200)仅每四个时钟周期从单个 warp 中退出指令。计算 2.0 设备每两个时钟周期从两个 warp 发出双重指令,因此每个时钟有两个 warp 退休指令。 Compute 2.1 通过允许有效的无序执行来扩展这一点 - 每个时钟仍然只有两个 warp,但可能一次来自同一个 warp 的两条指令。因此,每个 SM 额外的 16 个内核用于指令级并行性,仍然由同一个共享调度程序发出。
【讨论】: