2015-12-10 22 views
2

我想问一下它是否有意义,如果有,是否有任何尝试?设计优化编译器时是否考虑过遗传算法?

澄清的问题:

当编译器制造商的优化工作,他们试图使编译器根据目标架构右吐最好的装配顺序?因此,从这个意义上说,他们必须想象在X情况下最好的指令是什么。因此,我想象在设计过程中,他们通过直觉使用他们的装配知识,以及一些试验/错误过程和典型案例的基准测试(代码片段),它们针对优化器。

但是,如果汇编代码的编译器输出选择可以通过遗传算法来决定,那么遗传算法只会用两个标准来尝试一切:“尊重客户意图不变”和“执行测试中速度越快越好”。
使用这个,似乎有可能通过向元优化器提供数千个代码片段来优化,学习优化它们的最佳方法,然后最终优化器作业来准备优化器(例如“最终的优化器编译器“)将检测哪个片段与要解析的客户端代码相似并应用翻译。

我希望我很清楚。我并不是建议编译器在客户端代码编译期间使用GO,而是编写一个嵌入GO(在编译器制造商的实验室中运行)中找到的静态结果的编译器。

+0

遗传算法链接到一个PDF似乎最适合的问题本质上是模拟的。很难想象,将一个指令(序列)的一半与另一个指令(序列)结合起来,从而获得可行的结果 - 更不用说更好的解决方案了。 –

回答

1

是的,它有。早期的支持者是蒙特利尔大学的Marc Feeley,他利用遗传算法为大型项目找到了gcc选项的最佳组合,特别是Gambit Scheme编译器。

他还合着的论文,你可能会感兴趣:

遗传指令调度和寄存器分配。在对系统的定量评价国际会议(QEST'04),76-83页,2004年

你可以找到他的research page

+0

是的,谢谢,这是我想到的:http://www.iro.umontreal.ca/~feeley/papers/KriFeeleyQEST04.pdf与我的问题相比唯一的限制是他们将这项技术应用于“寄存器分配“而不是最佳操作码的选择。但是这个概念非常接近我的问题。 –

+0

@ v.oddou:你可能想直接给Marc发电子邮件。我想你也分享一种语言 – rici