女生做网站前台seo外包优化服务商
一、 反馈式编译
简介
PGO,即Profile-Guided Optimizations,反馈式优化。PGO是编译器的又一优化技术,PGO与其它的一些优化技术/选项有一个明显的区别是:PGO优化是分三步完成的,是一个动态的优化过程。
反馈优化过程:
- 步骤 1 编译器插桩编译,编译生成插桩的可执行文件。
- 步骤 2 运行插桩的可执行文件,生成反馈数据文件gcda,这些文件记录了程序中控制流图上边的执行次数。
- 步骤 3 编译器读取反馈数据文件,利用反馈优化,生成高性能的可执行文件。
以下优化受益于反馈数据:
寄存器分配,基本块重排,内联,循环展开,指令调度,冗余指令删除等。
说明:代码变更时,反馈数据需要重新生成。
基础选项
编译获得插桩版本二进制或者so
-
gcc main.c –fprofile-generate –o instrument.out
-
复制代码
上板运行获取gcda反馈式编译数据
-
./instrument.out
-
复制代码
根据反馈式数据重新编译
-
gcc main.c –fprofile-use –o new.out
-
复制代码
二、 FGO
PGO是gcc原生的反馈编译优化方案, 通过插桩运行采样得到的gcda文件来指导第二次编译优化,而FGO针对gcda文件二进制属性,解决业务侧源码交付的痛点,profile文件使用文本的形式导入。两者的区别是FGO的profile文件可以通过适当的手动修改适配,但当前FGO未完全支持C++模块优化。
三、 softFDO
softFDO是通过原生插桩运行得到的采样数据转换成google开源gcov数据格式,通过auto-profile Pass遍将数据导入进行优化。两者的区别是PGO支持value profile, softFDO不支持;softFDO使用的auto-profile Pass边在优化时调用了early-inline操作