首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将PGO应用于源代码?它对CFG有什么影响?

如何将PGO应用于源代码?它对CFG有什么影响?
EN

Stack Overflow用户
提问于 2015-09-28 17:56:59
回答 1查看 105关注 0票数 0

最近,我一直在寻找PGO的相关主题,并开始思考如何将它们应用到源代码中,并且已经应用了一个又一个的应用效果。

我的意思是,如果您在GCC或CLang中启用PGO优化,例如,它将应用所有优化(内联、虚拟调用推测、死码分离等),对吗?

即使它们都没有应用于源代码,让我们假设其中一些是。那么,我猜它们是按顺序应用的,对吧?

那么,他们能修改CFG (控制流图)到一些基本的块频率丢失点吗?

例如,如果在名为"A“的PGO之后应用了名为"B”的PGO,而"A“修改了源代码,导致一些基本块频率丢失,那么如何应用"B”(假设两者都是依赖BB频率的PGO)?

(对不起,我的英语很差)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-19 10:36:12

PGO和大多数其他优化不应用于源代码,而是应用于中间代码。源代码本身保持不变。但是,生成的二进制代码将被优化(希望如此)。

PGO的目的是提高传统优化的效率,包括内联、虚拟调用推测和很少执行的代码分离。所以他们都还在申请。你猜对了,它们是按顺序顺序应用的。

其中一些优化会改变代码的CFG。但是,编译器跟踪原始的基本块,即使它们在中间代码中的位置已经改变了。在PGO中,编译器从不删除任何基本块。但是,编译器可以保持基本块不变,更改其位置,将基本块展开为多个基本块,或者插入新的基本块。不管它做什么,它都会跟踪原始配置的基本块及其执行统计数据,以便进一步的优化知道如何使用概要文件。如果插入了一个新的基本块,它将在不使用配置文件的情况下进行优化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32829044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档