在控制流嵌套中,一个分支严重地依赖另一个分支,这极大影响了线程的独立性 。
如何跳过计算过程(Skip Computation)
由于线程束分支的存在,导致同一个Warp内的有些线程并不必要执行某些计算指令 。
3) SIMT掩码
SIMT堆栈中使用了SIMT掩码(SIMT Mask)来处理线程束分化问题,以下例来说明掩码如何控制整个Warp的执行 。
4) SIMT 掩码引起的死锁问题
SIMT 掩码可以解决Warp内分支执行问题,通过串行执行完毕分支之后,线程在Reconverge Point(重合点)又重新聚合在一起以便最大提高其并行能力 。
但对于一个程序来说,如果出现分支就表明每个分支的指令和处理是不一致的,容易使一些共享数据失去一致性 。如果在同一个Warp内如果存在分支,则线程之间可能不能够交互或者进行数据交换,在一些实际算法中可能使用锁定(Lock)机制来进行数据交换 。但掩码恰恰可能因为调度失衡,造成锁定一直不能被解除,造成死锁问题 。
5) GPGPU解决死锁的方法
文章插图
图 3-8 V100 Warp调度对比图[2]
解决死锁的方法如下:
NVIDIA为V100 中Warp内的每个线程都分配了一个PC指针和堆栈,将PC指针的颗粒度细化到每一个线程中去,保障数据交换避免死锁 。(图3-5)
为避免细粒度的PC指针和堆栈与GPU的SIMT执行模型产生冲突,硬件仍以Warp为单位来进行线程调度 。
使用了Schedule Optimizer(调度优化器)硬件模块来决定哪些线程可以在一个Warp内进行调度,将相同的指令重新进行组织排布到一个Warp内,并执行SIMD模型,以保证利用效率最大化[2] 。
3.3.2 线程束调度与记分牌进行线程束(Warp)调度的目的是充分利用内存等待时间,选择合适的线程束来发射,提升执行单元计算效率 。
在理想的计算情况下,GPU内每个Warp内的线程访问内存延迟都相等,那么可以通过在Warp内不断切换线程来隐藏内存访问的延迟 。
GPU将不同类型的指令分配给不同的单元执行,LD/ST硬件单元用于读取内存,而执行计算指令可能使用INT32或者FP32硬件单元,且不同硬件单元的执行周期数一般不同 。这样,在同一个Warp内,执行的内存读取指令可以采用异步执行的方式,即在读取内存等待期间,下一刻切换线程其他指令做并行执行,使得GPU可以一边进行读取内存指令,一边执行计算指令动作,通过循环调用(Round Robin)隐藏内存延迟问题,提升计算效率 。
在理想状态下,可以通过这种循环调用方式完全隐藏掉内存延迟 。但在实际计算流程中,内存延迟还取决于内核访问的内存位置,以及每个线程对内存的访问数量 。
内存延迟问题影响着Warp调度,需要通过合理的Warp调度来隐藏掉内存延迟问题 。
1) 指令顺序调整的原因
在同一个Warp的单个线程中,调整发送到ALU将要执行的指令顺序,可以隐藏掉一部分内存延迟问题 。例如读取指令和加法指令使用的是不同的硬件单元,在第一个时钟周期执行内存读取指令之后,下一个时钟周期不必等待读取内存指令,而是可以直接执行加法指令,从而实现一边计算一边读取,来提高整个运行效率 。
但在实际情况中,后一个指令有可能是依赖于前一个指令的读取结果 。要解决该问题就需要GPU提前对指令之间的依赖关系进行预测,解析出指令之间的独立性和依赖关系 。
文章插图
图 3-11动态线程束示例(来源:WILSON W. L. FUNG等)
2) 记分牌与指令顺序调整的方法
GPU在这里参考了CPU设计,为了解析指令之间的独立性,采用顺序记分牌(In-Order Scoreboard) 。
对于单线程束情况,
- 每个寄存器在记分牌中都对应一个标志位,用于表示该寄存器是否已被写入数据,如果置1则表示该寄存器已经被写入 。
- 此时如果另外一个指令想要读或者写该寄存器,则会处于一直等待状态,一直到该寄存器的标志位被清零(表明之前写寄存器操作完成) 。这样就可以阻止Read-After-Write和Write-After-Write的问题 。
- 当顺序记分牌和顺序指令(In-Order Instruction)结合时,能避免Write-After-Read的问题 。
文章插图
图 3-11数据冲突与流水线结构相关
对于多线程束情况,将上述方法应用到GPU时,还需要解决两个问题:
推荐阅读
- 新车买完就降价,很多用户很害怕,买个二手车划算么?
- 史上最严标准国六B将至,多家车企建议给予6到12个月销售过渡期
- 为何酒店的房间内都要放4个枕头?女服务员:很多人都不懂怎么用
- 汽车的电瓶还有保质期?多久换一次,平时又要怎么保养?
- 口粮酒大盘点,众多品牌 ,众多香型,众多档次,你更喜欢哪一款呢
- 姜涛|网红姜涛模仿高启盛,半个月内发布三十多个作品,内容同质化严重
- 普吉岛|痞幼泰国被偶遇,脸上浮肿头发凌乱,从精致变邋遢,更多细节曝光
- 鞠婧祎|狗仔爆料助理摸鞠婧祎臀部!商场里多次伸手,两人关系引热议
- 碘吃多了有什么危害
- 香蕉泡白醋真的可以减肥吗