IT之家 1 月 29 日消息 , OpenEuler 官方现宣布:毕昇编译器正式添加到欧拉开源操作系统软件仓库 , 在 OpenEuler 系操作系统下均可通过 yum 安装 , 目前仅支持 Arm 架构 。
根据 Benchmark 测试结果 , 相同软硬件条件下 , 毕昇编译器 2.1.0 比 GCC 9.3.0 性能提升 24.3% , 使用毕昇编译器可以进一步提升应用性能 。
什么是毕昇编译器
毕昇编译器是华为编译器实验室打造的高性能、高可信及易扩展的编译器, 支持 C / C++/Fortran 等编程语言 , 增强和引入了多种编译优化技术 , 针对某些应用场景进行优化 , 尤其在高性能计算(HPC)场景下能获得更优的性能收益 。
文章图片
毕昇编译器当前最新版本为 2.1.0 , 于 2021 年 12 月 30 日发布 。 当前版本 2.1.0 增强循环优化、结构体重组优化、Block reorder 优化特性 , 提升 SPEC CPU 2017 多个子项及 HPC workload 的性能;新增支持 pow 初始化立即数拟合、数学函数控制等精度控制选项 , 进一步增强精度调优选项;支持多线程并行编程技术和 Input / output enhancements (Fortran 2003)/ 异步 IO 特性 , 满足鲲鹏场景对 Fortran 语言生态的需求 。
文章图片
优化特性
毕昇编译器采用多种增强的编译优化技术 , 包含但不限于以下优化特性:
循环优化
包括 Loop Unswitching:减少分支跳转的执行次数;Loop unroll-and-jam:改善内存和 cache 局部性及利用率;Loop Fusion:直接复用其他循环中的值 , 暴露更多的指令调度机会;Loop Distribution:减少循环中的寄存器压力 , 暴露更多的矢量化机会;Loop Unrolling:可以减少动态的指令数量 , 发现更多的优化机会点 , 比如数据复用 , 范围更广的指令调度 , 以及提高矢量化的数据并发度 。
内存布局优化
将结构体数组 (AoS) 转换为数组结构体 (SoA) , 以及数组的重排列优化 。 通过上述方法 , 将提高 Cache 的命中率 , 从而提升程序的性能 。
软件预取
毕昇编译器通过与鲲鹏处理器协同 , 将硬件相关特征准确建模 , 使得编译器预取分析代码能够准确模拟鲲鹏处理器的访存特征 , 进而在代码中插入准确的预取指令 , 从而提高 Cache 命中率 , 提升程序的性能 。
自动矢量化
结合鲲鹏 NEON / SVE 指令集 , 毕昇编译器对向量自动化进行了增强 , 将执行操作相似的标量化程序转换为向量化程序 , 从而使计算机程序能够使用一条指令处理多条数据 , 提高程序的性能 。
Autotuner
基于 ML 自动搜索技术 , 通过多次迭代 , 在可优化空间中寻找最优的选项 , 进而编译出性能更好的目标程序 。
性能
测试环境:
操作系统:OpenEuler 20.03
CPU:Kunpeng 920
毕昇编译器开发团队基于毕昇编译器 2.1.0 版本进行性能评测 , SPEC CPU? 2017 测试报告显示毕昇编译器 2.1.0 综合得分达到了 399 分 , GCC 9.3.0 综合得分为 321 分 。 在相同软硬件环境下 , 毕昇编译器的性能比 GCC 高 24.3% 。
如何使用
在 openEuler 系操作系统中 , 可以使用 yum 安装毕昇编译器;其他 Linux 操作系统可以通过软件包方式安装 。 安装教程如下:
注意:如果系统中有其他版本的 LLVM 编译器 , 请在安装和卸载毕昇编译器之后立即运行 hash -r 命令清空当前窗口的 hash 表 , 防止 clang 命令被 hash 捕获 , 出现毕昇编译器或开源 LLVM 编译器无法使用的问题 。
Yum 源安装
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
