gpt4 book ai didi

llvm - 为什么 LLVM 执行引擎比编译代码更快?

转载 作者:行者123 更新时间:2023-12-03 06:40:43 26 4
gpt4 key购买 nike

我有一个针对 LLVM 的编译器,并且我提供了两种运行代码的方法:

  1. 自动运行它。此模式将代码编译为 LLVM,并使用 ExecutionEngine JIT 将其即时编译为机器代码并运行它,而无需生成输出文件。
  2. 编译并单独运行。此模式输出一个 LLVM .bc 文件,我手动优化该文件(使用 opt),编译为 native 程序集(使用 llc),编译为机器代码并链接(使用 >gcc),然后运行。

我原以为方法 #2 会比方法 #1 更快,或者至少是相同的速度,但是运行了一些速度测试,我惊讶地发现 #2 的运行速度始终慢两倍。这是一个巨大的速度差异。

两种情况都运行相同的 LLVM 源代码。使用方法 #1,我还没有费心去运行任何 LLVM 优化过程(这就是为什么我预计它会更慢)。使用方法#2,我使用 -std-compile-opts 运行 opt 并使用 -O3 运行 llc,最大限度地优化,但它还没有接近第一名。以下是同一程序的运行示例:

  • #1 未优化:11.833s
  • #2 未优化:22.262s
  • #2 优化(-std-compile-opts-O3):18.823s

ExecutionEngine 是否做了一些我不知道的特殊事情?有什么方法可以优化编译后的代码以获得与 ExecutionEngine JIT 相同的性能吗?

最佳答案

使用 JIT 的虚拟机运行某些应用程序比编译应用程序运行得更快是正常的。这是因为带有 JIT 的虚拟机就像一个模拟虚拟计算机的模拟器,同时还实时运行编译器。由于这两个任务都是通过 JIT 内置到 VM 中的,因此机器模拟器可以向编译器提供信息,以便可以重新编译代码以更有效地运行。它提供的信息不可用于静态编译的代码。

Java VM 和 Python 的 PyPy VM 等也注意到了这种影响。

关于llvm - 为什么 LLVM 执行引擎比编译代码更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5988444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com