论文部分内容阅读
近年来,GPU计算能力不断提升,可编程性大大增强,大量通用应用被移植到GPU平台上运行。由于GPU硬件的SIMD执行特性,通用应用执行中广泛存在控制流发散问题。控制流发散问题降低了 GPU中SIMD单元的利用率,对应用性能产生了负面影响。在已知三大关键信息,即控制流发散造成的性能影响、线程原始控制流信息和分支指令对应软件源码的基础上,通过修改软件源码实现线程重组的软件优化策略有望改善控制流发散问题,但是现存的获取这三大关键信息的途径各自存在实施难度大、获取时间长、信息不完整等缺陷。因此,特别针对控制流发散造成的性能瓶颈,本文设计了基于二进制插桩分析、控制流图分析和调试信息分析的信息获取方案和相应的控制流发散优化方案,快速定位瓶颈,实施优化。对于控制流发散造成的性能影响,本文借助定量分析将其拆分为分支指令处的一系列运行时信息和分支路径长度信息,再进一步通过插桩分析和控制流图分析分别获取这两类信息。对于线程原始控制流信息,本文通过插桩分析的方式获取,并在最终结果中保留了线程束的编号和分支指令执行次数信息以满足线程重组方案推导的需求。对于分支指令对应的软件源码,本文结合分支指令的地址和调试信息中指令地址与源码位置的对应关系,获取特定分支指令对应的软件源码。在此基础上,本文阐述了借助本文获取的信息实现控制流发散软件优化的具体方案。本文在NVIDIA Maxwell架构的GTX 960 GPU平台上进行了方案实现,对Rodinia基准应用测试集中的24个应用进行了信息获取和相应的数据验证,并且对Rodinia中控制流发散问题较为显著的Back Propagation应用借助获取实验中获取的信息实施了软件优化。实验结果显示,本文的信息获取方案获取的信息与程序独立分析的结果完全吻合,本文中对Back Propagation程序实施的控制流发散软件优化策略使内核程序中的控制流发散分支减少了 76.7%,内核程序IPC相应地提升了 19.5%。由此可见,本文设计的方案可以快速可靠地获取实现控制流发散软件优化所需的三大关键信息并实现相应的软件优化,改善应用中的控制流发散问题,提升应用性能。