十二 232009
支持反馈指导优化(Feedback-directed Optimizations)
此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://www.lingcc.com
Fred Chow 原版讲义见最后一页
- 反馈编译
使用目标机器可执行代码来收集程序运行信息并反馈给编译器(FDO),实现步骤:首先,使用选项-fb_create fb_file来插桩编译程序;然后运行“training run“,非常慢;最后再使用选项-fb_opt fb_file来编译程序。另外要求除fb之外的其他选项都是一样的。
- 插桩
插桩在编译阶段的WHIRL级中进行。数据手机工作可以在反馈编译的同一个点进行,可以收集到精确的程序代码反馈数据,且精确性不受编译选项影响(只要这些选项在两次编译时时相同的),这些插桩的代码是对运行时库libinstr.{so,a}的调用。并且支持多种类型的反馈数据—BB热度,边热度,值轮廓(?profiles)
- 插桩和编译阶段
可以在编译过程不同的阶段插桩(和收集数据)使用的是选项(-fb_phase):0-在VHO前,1–在LNO前,2–在WOPT前,3–CG前。仅稍后一点的阶段才能使用收集到的信息。另外当代码转换的时候,收集的数据也需要更新–提供了一些完成该功能的函数,并有一些参测的功能。默认的插桩阶段时-fb_phase 0.PathScale并未对其他的-fb_phase做测试
- 值轮廓信息的利用
为某些常用的运行时值调优
- 浮点乘 x*y 若多数y为1,则转化为 if(y==1.0) x else x*y
- 整数除 i/j 若j多为2^k,则转化为if(j==2^k) i<<k else i/y
- 非直接调用 (*p)() 若p多为函数foo(),则转化为if(p == &foo) foo() else (*p)()
此文是Fred Chow在德拉华大学所讲open64课程讲义的翻译,转载请注明出处 http://www.lingcc.com
Fred Chow 原版讲义见最后一页
整个Open64课程系列的文章包括以下,请阅读中指正

[...] 23: Open64课程–反馈指导优化(FDO) (4) [...]
[...] Open64课程–反馈指导优化(FDO) [...]
[...] 相关文章Open64课程-结语Open64课程–付诸实践(Practical Matters)Open64课程–OpenMp和自动并行化Open64课程–反馈指导优化(FDO)Open64课程-循环嵌套优化(LNO) [...]
[...] « 编译点滴 on Open64课程-编译过程Open64课程-结语 « 编译点滴 on Open64课程–反馈指导优化(FDO)Open64课程-结语 « 编译点滴 on Open64 课程–全局标量优化(WOPT [...]
[...] Open64课程–反馈指导优化(FDO) [...]