常见的毕昇编译器优化
发表于 2023/12/12
0
毕昇的编译优化的种类繁多,支持的各类优化选项、参数常常成百上千,如有兴趣可以使用“-help-hidden“ 选项查看。此处推荐一些最常见的优化手段,这些优化选项应当在系统调优之前进行尝试,一般而言都有较好的性能收益。
以下正式进入选项推荐:
(1)调整通用优化等级 -O0/-O1/-O2/-O3/-Ofast:优化等级逐级增加,性能优化会越来约激进。 O0 关闭所有优化、O1 开启基础优化、O2开启有有收益的全部激进优化、O3开启全部不损伤浮点计算精度的激进优化。Ofast开启全部激进优化,对浮点计算的结果造成影响。涉及浮点计算,且对准确性的要求可控时,可以打开-Ofast(或者-O3的基础上加-ffast-math)。
(2)-mcpu=tsv110:指定鲲鹏后端架构,使能对应架构的流水线优化,使能编译器定制的pipeline。
(3)LTO(Link Time Optimization):-flto=full -fuse-ld=lld,链接时优化,开启-flto编译生成的.o是中间文件,并不是正常的.o。开启-flto需要保证编译及链接阶段都加上对应选项。编译加链接不加会报错。开启-flto后,-mllvm -xxxx形式的选项需要改为-Wl,-mllvm,-xxxx 传给链接器。
(4)使能多进程/多线程优化:应用中有openmp导语的情况下可以选择开启-fopenmp,此外可以尝试调整OMP_PROC_BIND=close/spread,可能会有性能收益;OMP_NUM_THREADS调整;绑核。
(5)PGO:反馈优化。
(6)增加选项-fprofile-generate=$PROFILE_DATA_PATH($PROFILE_DATA_PATH为用于存放采样文件的路径)编译源码得到可执行文件。
(7)给可执行文件一组有代表性的输入,并运行可执行文件进行采样,采样后在$PROFILE_DATA_PATH路径下会得到采样文件。
(8)cd $PROFILE_DATA_PATH 使用下述命令处理采样文件,得到优化指导文件:$LLVM_DIR(毕昇编译器路径)/bin/llvm-profdata merge -output=bisheng.profdata ./*。
(9)增加选项-fprofile-use=$PROFILE_DATA_PATH/bisheng.profdata编译源码得到优化后的可执行文件。
(10)CSPGO:
在第3步后,增加一次采样:
添加选项-fprofile-use=$PROFILE_DATA_PATH/bisheng.profdata -fcs-profile-generate=$CS_PROFILE_DATA_PATH编译,并运行;
cd $CS_PROFILE_DATA_PATH 使用下述命令处理采样文件: $LLVM_DIR/bin/llvm-profdata merge -output=bisheng.profdata ./* =$PROFILE_DATA_PATH/bisheng.profdata;
增加选项-fprofile-use=$CS_PROFILE_DATA_PATH/bisheng.profdata编译源码得到优化后的可执行文件。