微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CUDA翘曲和占用率

如何解决CUDA翘曲和占用率

| 我一直认为,warp调度程序将一次执行一次warp,具体取决于准备好的warp,并且该warp可以来自多处理器中的任何线程块。但是,在Nvidia网络研讨会幻灯片之一中,声明“占用=在多处理器上同时运行的线程数除以可以同时运行的最大线程数”。那么一次可以运行多个扭曲吗?这是如何运作的? 谢谢。

解决方法

最好将“运行”解释为“在SM和/或管道中的指令上具有状态”。 GPU硬件会调度尽可能多的可用块或将其装入SM的资源(以较小者为准),为它们包含的每个扭曲分配状态(即寄存器文件和本地内存),然后开始调度扭曲以执行。指令流水线的长度大约为21-24个周期,因此在任何给定时间的“运行”的各个阶段都有很多线程。 前两代具有CUDA功能的GPU(因此G80 / 90和G200)仅每四个时钟周期一次扭曲就退出指令。 Compute 2.0器件每两个时钟周期两次发送来自两次扭曲的指令,因此每个时钟有两条扭曲退出指令。计算2.1通过允许有效地无序执行扩展了这一点-每个时钟仍然只有两个扭曲,但是一次可能来自同一扭曲的两条指令。因此,每个SM额外的16个内核将用于指令级并行性,仍然由同一共享调度程序发出。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。