我目前正在为未来 8 周内完成的研究生级编译器课程选择一个项目。我想做一些与优化相关的事情,因为我以前在该领域工作不多,但该领域的任何事情都是公平的。
你做过的最有趣的编译器相关项目是什么?你从中学到最多的是什么?
编辑:谢谢大家的好建议。我很抱歉这么久没有更新这个。
我最终做的项目是在 LLVM 上进行简单的自动向量化优化。LLVM 有向量类型,但似乎没有任何方法可以在不支持前端的情况下利用它们。此优化将普通标量代码转换为矢量代码。
由于自动矢量化是一个相当难以实现的优化,我们尽可能地限制了我们的范围。首先,为了在代码中展示指令级并行性,我们寻找符合我们标准的单块循环,然后将它们展开特定次数,以便它们可以方便地向量化。然后,我们实现了Larsen 和 Amarasinghe在Exploiting Superword Level Parallelism with Multimedia Instruction Sets中提出的打包算法。
即使是这种优化的简化版本也相当复杂。有很多限制;例如,您不想向量化一个存在于循环之外的变量,因为程序的其余部分希望它是标量的。在过去的几周里,我们投入了很多时间。不过这个项目很有趣,我们学到了很多东西。