当前位置: 首页 > news >正文

反馈式编译

一、    反馈式编译

简介

PGO,即Profile-Guided Optimizations,反馈式优化。PGO是编译器的又一优化技术,PGO与其它的一些优化技术/选项有一个明显的区别是:PGO优化是分三步完成的,是一个动态的优化过程。

反馈优化过程:

  • 步骤 1     编译器插桩编译,编译生成插桩的可执行文件。
  • 步骤 2     运行插桩的可执行文件,生成反馈数据文件gcda,这些文件记录了程序中控制流图上边的执行次数。
  • 步骤 3     编译器读取反馈数据文件,利用反馈优化,生成高性能的可执行文件。

以下优化受益于反馈数据:

寄存器分配,基本块重排,内联,循环展开,指令调度,冗余指令删除等。

说明:代码变更时,反馈数据需要重新生成。

基础选项

编译获得插桩版本二进制或者so

 
  1. gcc main.c –fprofile-generate –o instrument.out

  2. 复制代码

上板运行获取gcda反馈式编译数据

 
  1. ./instrument.out

  2. 复制代码

根据反馈式数据重新编译

 
  1. gcc main.c –fprofile-use –o new.out

  2. 复制代码

二、    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操作

http://www.lryc.cn/news/124530.html

相关文章:

  • sql-libs靶场-----0x00、环境准备
  • 一百四十九、Kettle——Linux上安装的kettle8.2创建共享资源库时遇到的问题(持续更新中)
  • Mysql 建索引规范
  • 新基建助推数字经济,CosmosAI率先布局AI超算租赁新纪元
  • 微服务06-分布式事务解决方案Seata
  • Wireshark有线网卡抓包报错The capture session could not be initiated on capture device
  • FreeSWITCH执行bridge时如何“制造“ringback
  • Java # 类加载子系统
  • YOLOv5改进系列(21)——替换主干网络之RepViT(清华 ICCV 2023|最新开源移动端ViT)
  • 安卓中常见的字节码指令介绍
  • TCP的三次握手和四次挥手
  • 前后端分离------后端创建笔记(08)表单提交
  • 途乐证券-KDJ分别代表什么?
  • 用C语言重写的原始Matlab OpenShoe算法:深入理解和实现步态分析的关键技术
  • 什么开放式耳机音质好?值得推荐的开放式耳机分享
  • mac harbor的安装
  • SetActive和Enable有什么不同?
  • 【Vue-Router】重定向
  • vulnhub靶场之ADROIT: 1.0.1
  • 【非欧几里得域信号的信号处理】使用经典信号处理和图信号处理在一维和二维欧几里得域信号上应用低通滤波器研究(Matlab代码实现)
  • 【深入理解ES6】字符串和正则表达式
  • 易服客工作室:Pixwell主题 – 现代杂志/WordPress新闻主题
  • iOS手机无法安装Charles 的ssl证书
  • Promise处理异步操作
  • jpa查询返回自定义对象、返回指定VO、POJO
  • 抖音小程序开发,收银台支付回调通知
  • selenium 爬虫
  • ​亚商投资顾问 早餐FM/0815生成式人工智能服务管理
  • C语言题目的多种解法分享 2之字符串左旋和补充题
  • 科技云报道:算力之战,英伟达再度释放AI“炸弹”