CUDA翘曲和占用率

| 我一直认为,warp调度程序将一次执行一次warp,具体取决于准备好的warp,并且该warp可以来自多处理器中的任何线程块。但是,在Nvidia网络研讨会幻灯片之一中,声明“占用=在多处理器上同时运行的线程数除以可以同时运行的最大线程数”。那么一次可以运行多个扭曲吗?这是如何运作的? 谢谢。
已邀请:
最好将“运行”解释为“在SM和/或管道中的指令上具有状态”。 GPU硬件会调度尽可能多的可用块或将其装入SM的资源(以较小者为准),为它们包含的每个扭曲分配状态(即寄存器文件和本地内存),然后开始调度扭曲以执行。指令流水线的长度大约为21-24个周期,因此在任何给定时间的“运行”的各个阶段都有很多线程。 前两代具有CUDA功能的GPU(因此G80 / 90和G200)仅每四个时钟周期一次扭曲就退出指令。 Compute 2.0器件每两个时钟周期两次发送来自两次扭曲的指令,因此每个时钟有两条扭曲退出指令。计算2.1通过允许有效地无序执行扩展了这一点-每个时钟仍然只有两个扭曲,但是一次可能来自同一扭曲的两条指令。因此,每个SM额外的16个内核将用于指令级并行性,仍然由同一共享调度程序发出。

要回复问题请先登录注册