我想知道是否有人使用过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/Compiler后端,LuaJIT专注于以最快的最好的方式尽可能快地执行Lua,因此从不受一般性的约束。