编译后的二进制文件是否可以进行优化?

10

我想这更多是一种好奇心,但我想知道是否有可能在编译后应用编译器优化。大多数优化技术是否高度依赖于IR,或者汇编代码可以相对容易地反复翻译?


2
据我所知,二进制到二进制的编译器是由DEC为Alpha NT“端口”和Transmeta创建的。这都是十多年前的事了。 - wildplasser
你如何称呼IR? - user1196549
后优化可能是一家愿意专门从事语言无关优化器的公司的好机会。我怀疑从汇编代码中检索程序语义比从源代码中检索更困难,这就是为什么你在市场上找不到这样的产品的原因。 - user1196549
3个回答

4

虽然我不知道有多少标准工具可以做到这一点,但这已经完成了。

这篇论文描述了适用于卡玛柏 Alpha 处理器的优化程序,该程序在链接后运行,并介绍了编写它时面临的一些挑战。

如果你放宽一点定义,你可以使用基于性能指导的优化来检测二进制文件,然后根据其对缓存未命中、页面错误等可观察行为进行重写。

还有一些关于动态翻译的工作,其中你可以在解释器中运行现有的二进制文件,并使用标准的动态编译技术来尝试加速。 这是一篇详细介绍的论文

希望这可以帮到你!


链接2已经损坏 :( - The Mask
它并没有损坏,只是被设置为付费墙。我在大学里可以正常使用。 - Alex Reinking

2
最近对这个领域进行了一些研究。Alex Aiken的STOKE项目正在做这个,取得了一些令人印象深刻的结果。例如,在一个例子中,他们的优化器找到了一个函数,它在OpenSSL的RSA库中的Montgomery乘法步骤中比gcc -O3快两倍。它将这些优化应用于已编译的ELF二进制文件。

这里是论文链接。


1
一些编译器后端具有小孔优化器,基本上就是在提交代表IR的汇编之前,它有一个小机会进行优化。从二进制的机器代码到机器代码,您希望做同样的事情。不是同样的工具,而是相同的过程,检查一些大小的代码块并进行优化。现在你遇到的问题是,例如,您可能已经在C中标记了一些易失性变量,因此它们在二进制文件中的使用非常低效,优化器不会知道程序员的意愿,并可能最终对其进行优化。您当然可以将其带回IR并再次前进,没有任何阻止您这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接