CPU Branch Prediction & GPU Branch Predication

CPU Branch Prediction, 即CPU的分支预测,可以分为:Static Branch Prediction和Dynamic Branch Prediction.需要CPU硬件支持。
Static Branch Prediction predicts always the same direction for the same
branch during the whole program execution.
It comprises hardware-fixed prediction and compiler-directed prediction. 
Dynamic Branch Prediction: the hardware influences the prediction while execution
proceeds.
Prediction is decided on the computation history of the program.
During the start-up phase of the program execution, where a static branch
prediction might be effective, the history information is gathered and dynamic
branch prediction gets effective.
In general, dynamic branch prediction gives better results than static branch
prediction, but at the cost of increased hardware complexity.
几个术语:
BHB: Branch History Buffer
BHT: Branch History Table
BTB: Branch Target Buffer

GPU Branch Predication
首先了解SPMD及对应的硬件结构。SPMD就是Single Program Multiple Data,可以理解为SIMD的扩展。在SIMD情况下,对多数据的处理只限于单条指令,而SPMD情况下,程序编写者可以按需要编写一个处理多数据的程序,这个程序在多个线程中并行执行。GPU的Shader程序就是SPMD的一个例子。
硬件结构上,将多个ALU绑定一起,共享一个PC(Program Counter),就能组成一个SPMD运算单元,例如NV GPU的SMX,AMD GPU的CU都是SPMD运算单元。一个SPMD运算单元包含的ALU数量决定了线程的理论最大并行数量。为了简化硬件结构,降低功耗,SPMD运算单元并没有为每个ALU配备分支预测硬件模块,更重要的是,在共享PC前提下,为每个ALU配备分支预测硬件模块对执行效率根本没有任何提升。
条件分支的出现将导致SPMD运算单元内ALU的执行路径不一致。由于这些ALU共享同一个PC,所以,要求ALU并行执行不同路径是不可能的。要在SPMD上实现条件分支,就需要编译器对条件分支程序代码进行等价变换,把不一致的执行路径转换成一致的执行路径
转换后的代码在每个ALU上的执行路径都一致,不存在条件分支。两个分支都执行,根据条件选择接受哪个分支的计算结果,就叫Branch Predication分支断定。
Branch Predication需要硬件指令集的支持,支持Branch Predication的指令根据某些状态寄存器的值,执行不一样的逻辑,例如x86的cmov系列指令,又例如某些厂商GPU指令会根据状态寄存器的值选择执行还是NOP.
使用Branch Predication转换后的代码,执行时间比条件分支代码长,因为转换后的代码,所有分支都会执行。
Dynamic warp formation(在SPMD里既可保留条件分支,也保证执行效率)技术可以优化 Branch Predication 遇到的问题.
wrap,是SM(streaming multiprocessor)的基本执行单元,是SM调度和执行的基础.通常一个SM中的SP(thread称作streaming processor)会分成几个warp(也就是SP在SM中是进行的分组,是在物理上进行的分组)。一般每一个WARP中有32个thread。这个WARP中的32个thread(sp)是一起工作的,执行相同的指令,如果没有这么多thread需要工作,那么这个WARP中的一些thread(sp)是不工作的。同在一个warp的所有sp,以不同数据资源执行相同的指令,这就是所谓 SIMT架构。
一个warp需要占用一个SM运行,多个warps需要轮流进入SM。由SM的硬件warp scheduler负责调度。
部分见解源自: https://www.cnblogs.com/rickerliang/archive/2013/03/19/2969893.html

下面是Nvidia Gpu结构的几张视图(源自Maxwell 1 Architecture: The Story So Far - The NVIDIA GeForce GTX 980 Review: Maxwell Mark 2):

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值