摘要:目前,通用图形处理单元(GPGPU)因其强大的并行处理能力而被广泛应用于各种计算任务。然而,采用单指令多线程(SIMT)并行执行模型的GPGPU在程序执行时,核函数会产生非一致控制流行为,从而引发线程束分化,降低加速器的整体性能。针对核函数执行过程中因非一致控制流引起的性能下降问题,提出一种特定场景下的分支编译优化方法——连续分支合并(MergeCFG)。在编译器中间代码优化阶段,通过控制流分析,识别出控制流图中含相同条件跳转的连续分支结构,以确定潜在的优化机会。接着,基于指令分析,评估优化的可行性,判断是否存在能够减少分支跳转的优化空间。最后,运用基本块复制与合并技术,对控制流结构进行优化,以减少程序中的分支跳转操作,从而简化控制流,提高程序执行效率。为验证方法的可行性,在国产GPGPU上使用7个合适的基准测试套件进行实验。结果显示,该方法有效减少了程序中的分支跳转操作,优化后的测试用例在性能上获得了显著提升。所测用例的平均加速比提高了2%至12%,个别测试用例的性能提升超过5倍。
文章目录
0 引言
1 相关背景
1.1 国产GPGPU
1.2 LLVM
1.3 控制流分歧
2 MergeCFG
2.1 连续分支CFG
2.2 合并思想
2.3 指令use-def处理
3 在编译器中的实现
3.1连续分支区域识别
3.2 指令分析
3.3 连续分支合并
4性能测试与分析
4.1 实验平台及程序
4.2 实验结果及分析
4.3 不同块大小下的性能对比
4.4 codesize分析
4.5 编译耗时分析
5 结束语