1. 延迟隐藏作用:可以最大化线程束的使用效率,提高计算性能
2. 延迟隐藏概念
(1)指令延迟是指令发出到完成之间的时钟周期间隔;
(2)指令可以分为两种:算数指令和访存指令。
3. 算数指令延迟隐藏实现
(1)假如一个算数指令的指令延迟是 4 个时钟周期
(2)查询cuda文档得到如下计算能力的设备,比如9.0的设备每个时钟周期对 float16 加法的操作次数为256
(3)计算所需线程束数量为:256*4/32 = 32个线程束,所以当有 >= 32 个线程束有条件执行供线程调度器调度的时候,SP的利用率最大,因为GPU线程切换是零开销的,所以可以实现计算延迟隐藏。
(4)同理访存延迟也可以通过增加可调度的访存线程束来隐藏访存延时,如下。
4. 访存指令延时隐藏实现
(1)假如访存延时为600个时钟周期,GPU内存频率为 21GHz,显存带宽为 280G/S,每个线程需要读取 一个 float64 数据。
(2)每个时钟周期理论最大访存数据量为:280 / 21 ≈ 13B/clock
(3)隐藏延时期间数据吞吐量应为 600 * 13 = 7800B
(4)所需要的线程数量为 7800 / 8 = 975个
(5)所需要的线程束数量为 975 / 32 = 31个
所以,当满足线程束的数量 >= 31时,可以隐藏访存的延时。