2.4.0 版本新增特性简介
2022年9月30日 BiSheng Compiler 2.4.0 版本正式发布,该版本在同步 BiSheng Compiler 2.3.0 版本的基础上,还包含如下新增特性:
安全功能新增
全局侧信道防护 支持clangtidy代码检查工具 性能优化增强
引入AutoFDO工具,支持基于硬件采样的反馈优化 mul64指令窥孔优化 sqrt代数优化 sqrt逻辑优化 多线程reduction场景向量化能力增强 多线程firstprivate场景向量化能力增强 修复了一些fortran语法支持和性能优化方面的bug,在此不一一列举。
注:以上特性的开关方式和使用限制详见用户指南,单击文末的“阅读原文”可查看。
部分特性的详细介绍
全局侧信道防护
开发者完成上层应用适配开发后,可通过编译器选项控制或修改函数属性,在需要进行侧信道防护的代码位置使能编译器进行防护指令插入,完成大型软件的重编译和安全加固。详细信息可点击 技术分享 | 幽灵攻击与编译器中的消减方法介绍 进行了解。
注:当前支持V1的防护,V4的防护待增加。
支持 clangtidy 代码检查工具
Clang-tidy(http://clang.llvm.org/extra/clang-tidy/)是一个基于clang的静态代码分析框架,支持C++/C/Objective-C。它提供一个可扩展的框架,用于诊断和修复典型的编程错误,如样式违规、接口滥用或可以通过静态分析推断出的错误。
支持基于硬件采样的反馈优化
反馈优化是一种编译优化技术,通过编译器插桩收集程序运行时信息进行优化决策。编译器根据这些运行时信息指导各种编译优化技术进行更准确的优化决策,生成更优的目标程序。通过编译器插桩实现的反馈优化技术PGO毕昇已经支持,但考虑到插桩运行在很多业务场景是不可行的,毕昇编译器引入了AutoFDO技术。AutoFDO是PGO的简化部署版,使用perf获取的采样信息进行转化替代插桩获取的程序运行profile。
sqrt逻辑优化
relion应用是生命科学邻域的常用应用,其中存在如下可以优化的场景,即对于以下if条件语句中用sqrt结果进行判断的场景:
优化前:
tmp = sqrt(input)
if (tmp > cond)
branch_without_tmp
else
branch_with_tmp
优化后:
if (input > copysign(cond*cond, cond))
branch_without_tmp
else
tmp = sqrt(input)
branch_with_tmp
可以将sqrt(input)结果与变量cond的比较替换为 input 与 copysign(cond*cond, cond) 的比较,从而将sqrt下沉到需要sqrt计算结果的分支中,对于不需要sqrt结果的分支则不需要调用sqrt,从而获得约2%的性能收益。
其余特性不一一列举,如有兴趣欢迎加入compiler SIG交流群或关注毕昇编译微信公众号。

点击 阅读原文 开始使用毕昇编译器




