为什么CUDA GPU只需要8个活动翘曲?

为什么CUDA GPU只需要8个活动翘曲?,cuda,gpu,Cuda,Gpu,如中所述: 如果CUDA编译器生成的指令流的ILP为3.0(即,在出现危险之前,平均可以执行三条指令),并且指令管道深度为22级,那么只有8条活动扭曲(22/3)就足以完全隐藏指令延迟并实现最大算术吞吐量 我不明白为什么它是足够的?如果调度程序可以在连续22个周期的每个指令发出周期中成功地从同一个扭曲发出指令,那么调度程序就没有理由在其位置安排另一个扭曲,并且单个扭曲就足以填满管道。这相当于ILP至少为22 但现实世界的代码™ 从来没有表现出如此高的ILP:例如,某些指令依赖于以前的指令或内存请

如中所述:

如果CUDA编译器生成的指令流的ILP为3.0(即,在出现危险之前,平均可以执行三条指令),并且指令管道深度为22级,那么只有8条活动扭曲(22/3)就足以完全隐藏指令延迟并实现最大算术吞吐量


我不明白为什么它是足够的?

如果调度程序可以在连续22个周期的每个指令发出周期中成功地从同一个扭曲发出指令,那么调度程序就没有理由在其位置安排另一个扭曲,并且单个扭曲就足以填满管道。这相当于ILP至少为22

但现实世界的代码™ 从来没有表现出如此高的ILP:例如,某些指令依赖于以前的指令或内存请求的结果。当调度程序无法再执行独立指令时,该扭曲的执行将暂停。调度程序将选择另一个准备好执行的warp,并执行尽可能多的指令,直到该warp也停止,以此类推

因此,如果warp#1成功执行3条指令,然后暂停,调度程序将选择warp#2,执行3条指令。。。等等。当调度程序到达warp#8时,管道中已经有21条指令用于7个暂停的warp。从该扭曲执行一条指令就足以填满整个管道。当管道开始排水时,warp#1再次准备就绪,因此为什么ILP为3的8个warp足以填充22级管道