2011-04-19 57 views
5

我一直认为warp调度程序会一次执行一个warp,具体取决于哪个warp已准备就绪,并且此warp可以来自多处理器中的任何一个线程块。但是,在Nvidia的网络载入幻灯片中,有人说:“占用率=多处理器上同时运行的经纱数量除以可同时运行的最大经纱数量”。所以一次以上可以运行多个warp?这个怎么用?CUDA warp和占用

谢谢。

回答

9

“正在运行”可能会被更好地解释为“在SM上有状态和/或管道中的指令”。 GPU硬件调度尽可能多的块,或者将其放入SM的资源中(以较小者为准),为每个包含的warp(即寄存器文件和本地内存)分配状态,然后开始调度warp执行。指令流水线似乎大约需要21-24个周期,所以在任何时候“运行”的各个阶段都有很多线程。前两代具有CUDA功能的GPU(所以G80/90和G200)仅在每四个时钟周期退出单个warp指令。每两个时钟周期从两个经线计算2.0设备双指令指令,因此每个时钟有两个经线退刀指令。 Compute 2.1通过允许有效的无序执行来扩展这个功能 - 每个时钟仍然只有两个经纱,但是一次可能有两个来自同一个经纱的指令。因此,每个SM的额外16个内核可用于指令级并行,仍然由相同的共享调度程序发出。