AutoFDO自动反馈式优化

AutoFDO是一种基于程序性能分析的编译优化技术,它可以利用真实生产环境的性能信息对程序进行精确优化。主要步骤包括读取性能信息、处理性能信息建立内部数据结构和标记控制流图。与传统FDO相比,AutoFDO在处理内联函数和不精确性能数据时有所不同,以适应优化后的二进制程序。
摘要由CSDN通过智能技术生成

什么是AutoFDO?

AutoFDO是指基于程序性能分析工具的反馈式编译优化。不同于传统的基于程序插桩的反馈式编译优化,AutoFDO可以对以优化过的程序进行性能分析,并利用程序的性能信息指导编译器对程序进行再次优化。这意味着AutoFDO可以部署在真实的产品线上,利用程序在生产环境的性能信息对程序进行更精准的优化。

AutoFDO利用如`perf`这样的工具来收集程序的性能信息。然后使用一个独立的工具将perf.data数据转换为gcov格式。gcc通过读取并理解‘’gcov‘’格式的性能信息为程序的基本块标记一个计数值并估计分枝的概率。

AutoFDO的主要步骤

AutoFDO主要可以分为三个步骤:

步骤1:读取程序性能信息

在这个步骤中主要从gcov文件中读取以下信息:

  • 函数名和文件名。
  • 源文件级的性能信息,主要是建立内联栈到采样计数间的映射。
  • 模块级的性能信息,主要是建立模块到辅助模块间的映射。

在步骤1中仅仅只是读取数据而不会处理它。并且这一步必须在树解析之前完成,因为后续的LIPO需要使用到模块性能信息。

步骤2:处理性能信息以建立内部数据结构(哈希映射)

这一步将在树解析之后完成,因为处理过程需要用到函数名到它的调试名的映射。以下的哈希映射被用来存储相关的性能信息。

  • function_htab:从function_name到它的入口块entry_bb计数的映射。
  • stack_htab:内联栈到它的采样技术间的映射。
  • module_htab:模块名到它的辅助模块名之间的映射。

步骤3:标记控制流图

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值