【发布时间】:2011-10-04 01:27:29
【问题描述】:
我意识到 LLVM 还有很长的路要走,但理论上,GCC/ICC/etc 中的优化可以做到。个别语言是否适用于 LLVM 字节码?如果是这样,这是否意味着任何编译为 LLVM 字节码的语言都有可能同样快?或者语言特定的优化(在 LLVM 字节码阶段之前)是否总是在优化任何特定程序中发挥重要作用。
我对编译器或优化知之甚少(仅够危险),所以如果这个问题没有明确定义,我深表歉意。
【问题讨论】:
-
llvm 实际上做得很好,从版本 28 开始,它生成的代码比 gcc 4.x 更好/更快(对于我测试过的应用程序)。那是将它用作交叉编译器而不是运行时虚拟机。 llvm 作为交叉编译器的优化组合的数量相对于 gcc 可以提供的功能呈指数增长。您可以优化任何单个文件或以任何组合组合字节码并优化该组合。从 C/C++ 优化到字节码或等到字节码链接后等。
-
我的问题实际上是围绕在优化编译器(C、C++)和尚未引起兴趣或人力的语言(haskell、 d、ocaml 等)来真正进行所需的优化级别,使它们达到与 C 和 C++ 相同的级别。希望 LLVM 能让所有这些语言具有相似的性能,这使得选择一种语言成为一个更开放的选择(对于我的特定领域,即数值模拟和建模,并且需要速度)。
-
我认为将语言转换为内部语言、字节码或 icode 或其他语言的概念,然后应用并非真正特定于语言的优化列表应该是可行的,然后,当从内部代码转到目标时,您会在那里进行更多优化,这些优化又与原始语言无关。如果这些其他语言可以为 llvm 或 gcc 构建前端,那么它们应该能够利用现有的优化器。
-
@dwelch:这是我最初的想法,但是,看起来,为了获得最佳性能,您需要进行特定于语言的优化(查看 Dietrich 的答案),然后是 LLVM字节码特定的优化。因此,虽然语言的总体性能会有所提高(因为会有一组“llvm 优化”,每种语言都可以利用),但背后有人力的语言最终会更快,因为有更多的人和更多的兴趣在编写语言特定的优化。
-
绝对同意这一点。你需要人才和人力。而且您需要需求/兴趣,如果没有人愿意使用它,那么您就会失去早期采用者和 beta 测试人员,最终人才/人力会失去兴趣并继续前进。无论好坏,这都是 C/C++ 继续前进的原因。
标签: optimization gcc compiler-construction llvm compiler-optimization