我想知道是否有人使用过 llvm/tools - lli 解释器/JIT 编译器(参见http://llvm.org/docs/GettingStarted.html#tools)。我对您可以提供的任何信息(速度、复杂性、实现等)感兴趣。
谢谢。
更新:
好吧,假设 lli 充当解释器,如何将位码执行与 LuaJIT VM 执行进行比较?当 lli 充当 jit 编译器(相同的比较)时呢?
注意:我只是问是否有人有经验/愿意抽出一些时间来分享。
我想知道是否有人使用过 llvm/tools - lli 解释器/JIT 编译器(参见http://llvm.org/docs/GettingStarted.html#tools)。我对您可以提供的任何信息(速度、复杂性、实现等)感兴趣。
谢谢。
更新:
好吧,假设 lli 充当解释器,如何将位码执行与 LuaJIT VM 执行进行比较?当 lli 充当 jit 编译器(相同的比较)时呢?
注意:我只是问是否有人有经验/愿意抽出一些时间来分享。
LuaJIT 是一种跟踪 JIT,这意味着它可以重新优化自身以更好地适应通过执行环境的数据,但是,LLVM 是一种静态 JIT,因此只会为相应的生成一次性的最佳情况机器码源,这可能导致它在紧密循环或错误的分支错误预测中失去性能。
实际的 LuaJIT VM 也是高度优化的、线程化的、机器特定的程序集,而 LLVM 使用 C++ 是为了可移植性(以及其他原因),因此这显然给了 LuaJIT 一个巨大的优势。LLVM 的开销也比 LuaJIT 高得多,这纯粹是因为 LuaJIT 被设计用于功能更弱的系统(例如由 ARM CPU 驱动的系统)。
LuaJIT 字节码也是专门为 LuaJIT 设计的,由于 LLVM 的位码更加通用,这显然会使 LuaJIT 的执行速度更快。LuaJIT 的字节码也很好地设计用于编码优化提示等,供 JIT 和跟踪器使用。
忽略这是两种不同类型的 JIT 的事实,整个比较归结为 LLVM 专注于成为通用 JIT/编译器后端,LuaJIT 专注于以尽可能最好的方式尽可能快地执行 Lua,因此它从不受一般性约束。