CUDA变形和占用

Ray*_*yne 5 cuda

我一直认为warp调度程序将一次执行一个warp,具体取决于哪个warp就绪,并且这个warp可以来自多处理器中的任何一个线程块.但是,在其中一个Nvidia webminar幻灯片中,表示"占用率=在多处理器上同时运行的warp数除以可以同时运行的最大warp数".那么一次可以运行多个warp?这是如何运作的?

谢谢.

tal*_*ies 9

"运行"可能更好地解释为"在SM和/或管道中的指令上具有状态".GPU硬件调度尽可能多的块或者适合SM的资源(以较小者为准),为它们包含的每个warp(即寄存器文件和本地内存)分配状态,然后开始调度warp以便执行.指令管道似乎长约21-24个周期,因此在任何给定时间都有很多线程处于"运行"的各个阶段.

支持CUDA的前两代GPU(因此G80/90和G200)仅在每四个时钟周期从单个warp中退出指令.每两个时钟周期从两个warp计算2.0设备双发出指令,因此每个时钟有两个warp退休指令.Compute 2.1通过允许有效的乱序执行来扩展这一点 - 每个时钟仍然只有两个warp,但可能同时来自同一warp的两个指令.因此,每个SM额外的16个内核用于指令级并行,仍然是从同一个共享调度程序发出的.