毕昇编译器是专为华为鲲鹏平台设计的一款高性能编译软件,具有强大和易用的特点。该软件基于开源LLVM进行开发,并经过了深度优化和改进。毕昇编译器默认采用Flang作为Fortran语言的前端编译器。该编译器还对中端和后端的关键技术进行了深度优化,并集成了Auto-tuner特性,支持编译器的自动调优。毕昇编译器旨在提供出色的性能和优化能力,以满足在华为鲲鹏平台上进行高效编译的需求。
优化特性
毕昇编译器采用多种增强的编译优化技术,包含但不限于以下优化特性:
循环优化
包括 Loop Unswitching:减少分支跳转的执行次数;Loop unroll-and-jam:改善内存和 cache 局部性及利用率;Loop Fusion:直接复用其他循环中的值,暴露更多的指令调度机会;Loop Distribution:减少循环中的寄存器压力,暴露更多的矢量化机会;Loop Unrolling:可以减少动态的指令数量,发现更多的优化机会点,比如数据复用,范围更广的指令调度,以及提高矢量化的数据并发度。
内存布局优化
将结构体数组 (AoS) 转换为数组结构体 (SoA),以及数组的重排列优化。通过上述方法,将提高 Cache 的命中率,从而提升程序的性能。
软件预取
毕昇编译器通过与鲲鹏处理器协同,将硬件相关特征准确建模,使得编译器预取分析代码能够准确模拟鲲鹏处理器的访存特征,进而在代码中插入准确的预取指令,从而提高 Cache 命中率,提升程序的性能。
自动矢量化
结合鲲鹏 NEON / SVE 指令集,毕昇编译器对向量自动化进行了增强,将执行操作相似的标量化程序转换为向量化程序,从而使计算机程序能够使用一条指令处理多条数据,提高程序的性能。
Autotuner
基于 ML 自动搜索技术,通过多次迭代,在可优化空间中寻找最优的选项,进而编译出性能更好的目标程序。