毕昇编译器1.3.3 权威跑分出炉
发表于 2021/12/03
0
什么是毕昇编译器?
计算机早期发展时,程序编写除了要考虑应用的逻辑,还需要考虑许多计算机硬件相关的细节,对编程人员的要求很高,必须要接受专业的学习和训练才能从事编程工作。而且整个过程容易出错,调试麻烦,编写后的代码在复用或者向其它架构的计算机进行迁移时也非常困难。高级语言发明后,程序员只需要通过常人易于理解的逻辑来编写程序,不需要考虑底层硬件的细节,开发效率有了十分明显的提升。而高级语言编写的程序要在计算机上被执行,最关键的是通过编译器将高级语言编写的程序代码经过解析、转换和优化等转为计算机能够直接识别和执行的机器指令,并生成可执行文件。要想实现高级语言与汇编语言、机器语言相当的性能,就需要编译器有较高的功底了。编译器除了要保证可执行文件能够被正确的执行,输出结果正确,同时也要最大程度提升可执行文件的性能,充分发挥不断迭代发展的芯片的高级特性。
毕昇编译器是由华为编译器实验室研发的基于开源LLVM的一款高性能编译器,它支持C/C++/Fortran多种编程语言。在原有LLVM的基础上,毕昇团队不断对其中端和后端进行优化空间挖掘,增强现有的优化技术和引入新的优化特性。特别是针对鲲鹏架构的计算机,毕昇编译器通过软硬协同,再次提升优化空间,使得编译后代码的性能比开源LLVM的更高,也使得芯片的强大算力得到更进一步的释放。
经过研发团队的多次迭代开发,毕昇编译器首次于2020年HC大会上公布,目前已发布了1.0、1.3.1和1.3.3版本。毕昇编译器的首个发行版本即支持自动矢量化,循环优化,浮点优化等特性,集成了针对ARM处理器优化的数学库、减少内存碎片和提高并发性能的jemalloc动态库,并提供了自动调优工具Autotuner。开源LLVM目前对Fortran的支持比较有限,毕昇编译器在1.3.1版本中加强了对Fortran的支持,支持4倍精度的计算,最大15维数组,Type-bound, Value attribute等绝大部分Fortran 2008语言特性,也强化了alias分析。6月30日发行的1.3.3版本中对以往的大部分特性又进一步做了优化,提高了编译器的优化能力。
毕昇编译器1.3.3性能评测得分
近期,鹏程实验室对最新的毕昇编译器版本进行了性能评测,并将结果发布在了SPEC官方网站。在其提交的SPEC CPU® 2017测试报告上显示毕昇编译器1.3.3的综合得分达到了389分[1]。鹏程实验室曾在2020年使用相同的服务器(泰山200服务器),使用GCC 9.1.0做过性能评测,其综合得分为318分[2]。从两次测试结果来看,在相同的服务器下,毕昇编译器1.3.3编译的可执行文件的性能要优于GCC9.1.0编译的,其性能提升22%。
图1. 毕昇编译器1.3.3 性能测试报告

图2. GCC 9.1.0 性能测试报告

SPECCPU® 2017 Benchmark是业内广泛使用的对处理器,内存,编译器进行性能评测的工具,其分值越高,表示CPU应用的运行时间越短,单位时间内的吞吐量越大,性能越高。值得注意的是这次性能评测除了使用华为泰山200服务器(处理器为Aarch64架构的鲲鹏920),还使用了openEuler20.03 LTS操作系统和毕昇编译器,是华为首次软硬件全栈的基准测试报告。
毕昇编译器的优化特性
毕昇编译器包含了多种增强的编译优化技术,下列是当前版本中包含的一些优化特性。
1.循环优化
包括Loop Unswitching,Loop unroll-and-jam, Loop Fusion, Loop Distribution, Loop Unrolling等。
2.内存布局优化
将结构体数组(AoS)转换为数组结构体(SoA),以及数组的重排列优化。
3.软件预取
毕昇编译器通过与鲲鹏处理器协同,将硬件相关特征准确建模,使得编译器预取分析代码能够准确模拟鲲鹏处理器的访存特征,进而在代码中插入准确的预取指令。
4.自动矢量化
结合鲲鹏NEON/SVE指令集,毕昇编译器对向量自动化进行了增强。
5.Autotuner
基于ML自动搜索技术,通过多次迭代,在可优化空间中寻找最优的选项,进而编译出性能更好的目标程序。
毕昇编译器将在今年年底或明年上半年发布新的版本,届时将会带来新的特性,SPEC性能也将会进一步提升,敬请关注我们公众号后续的推送。
点击“阅读原文”进入毕昇编译器产品页面开始学习使用毕昇编译器,也欢迎你通过论坛提出建议,毕昇编译器团队十分乐意与你一同持续优化毕昇编译器。
参考
[1] https://www.spec.org/cpu2017/results/res2021q4/cpu2017-20211012-29727.html[2] https://www.spec.org/cpu2017/results/res2020q2/cpu2017-20200529-22566.html
本页内容