LuaJIT 真的比其他所有 JIT-ed 动态语言都快吗? [关闭]

Posted

技术标签:

【中文标题】LuaJIT 真的比其他所有 JIT-ed 动态语言都快吗? [关闭]【英文标题】:Is LuaJIT really faster than every other JIT-ed dynamic languages? [closed] 【发布时间】:2011-02-04 23:52:50 【问题描述】:

根据计算机语言基准游戏,LuaJIT 实现seems to beat every other JIT-ed dynamic language(V8、Tracemonkey、PLT Scheme、Erlang HIPE)提高了一个数量级

我知道这些基准测试并不具有代表性(正如他们所说:“哪种编程语言实现具有最快的基准测试程序?”),但这仍然令人印象深刻。

在实践中,真的是这样吗?有人测试过 Lua 实现吗?

【问题讨论】:

>> 我知道这些基准没有代表性 @igouy:如果他认为基准测试具有代表性,他就不会问这个问题。问题是要求证实这些结果。 【参考方案1】:

Lambda the Ultimate 进行了很好的讨论。 LuaJIT 非常好。

许多人在lua-l(lua 邮件列表)上报告了令人印象深刻的加速。纯 Lua 代码的加速效果最为​​显着;当可加载库模块中有大量对 C 函数的调用时,跟踪编译器就没有那么有效了。

【讨论】:

正如 Justin Cormack 在 cmets 中对以下答案所指出的那样,至关重要指出对原生 C 函数(而不是 lua_CFunctions)的 JITed 调用非常快(零开销) ) 使用 LuaJIT ffi 时。这是双赢:您不必再编写绑定,并且您可以获得一流的性能。即使在 Lua 端进行繁重的工作时,使用 LJ 调用 C 库也会产生令人毛骨悚然的性能。 我个人对 luajit 的表现感到惊讶。我们在网络空间中使用它,它的性能非常出色。我过去使用它是一种不同的方式,它的性能“还可以”。对于这个框架,实现架构确实很重要。您可以毫不费力地获得 C 性能。有一些限制,但我们现在已经解决了所有这些限制。强烈推荐。【参考方案2】:

在我的案例(游戏原型开发)中,我没有观察到任何性能提升。我使用 lua 进行嵌入,因此有很多对 C++ 库函数的调用。尽管主循环在 lua 脚本中并且所有重要的逻辑都在 lua 中实现,但整体性能是由用 C++ 实现的渲染引擎和物理引擎决定的。 原始的 lua 对此类应用程序来说已经足够快了。

【讨论】:

我也有类似的经历。是的,luajit 对于纯 lua 来说要快得多,但它不会加快你对 C 的调用。我使用 luabind 进行包装(可能是个坏主意),我最终在对象包装器调用上花费的时间比在我的 lua 函数中花费的时间更多. 如果你使用 LuaJIT ffi 接口调用 C 函数,它们会被 jit 编译器本地内联,这样会快得多。我以与 C 相同的速度调用 Linux 系统调用。 对于 tbear 和 cib 来说,问题不在于调用 C 的开销,而在于所有的时间都花在了 C 函数中。当然,在这种情况下,Lua 不是瓶颈的一部分,加速它不会产生任何改进。 注意 LuaJIT 被配置为在 ios 上不做任何 JITing。这是因为 Apple 不批准可以编译代码的 iOS 应用程序。你在 iOS 上开发吗? @JustinCormack 很抱歉在这么老的事情上给你打电话,但这条评论让我很好奇。你确定这是 LuaJIT 可以做的事情吗? LuaJit homepage 似乎另有说法:“[...] C 编译器和 LuaJIT 都不能跨语言障碍内联或优化 [...]”【参考方案3】:

我用这里学到的经验做了一个实验:http://www.sampalib.org/luajit2.0_tunning.html 有些数据不再那么有效(maxmcode=1024 就足够了),但是 luajit 对 600 行代码纯 Lua 脚本(没有 C 调用来命中性能...)带来了强大的改进,这不是一个大规模的应用程序,也不是一个嵌入式用例,但远不止基准测试。

【讨论】:

【参考方案4】:

JIT 的性能取决于两个方面:原始脚本语言的性能和编译器的性能。

编译器是一种相当成熟的技术,大多数 JIT 编译器具有相当的性能。然而,lua 本身,即 lua-without-JIT,可能是最快的脚本语言之一。

lua 比没有 JIT 的 Java 更快。 lua 比 javascript-without-JIT 更快。 lua 比大多数没有 JIT 的脚本语言更快。

所以,

lua-JIT 比 Java-with-JIT(sun Java)更快, lua-JIT 比 V8 (Javascript-with-JIT) 更快, 等等……

【讨论】:

大多数 JIT 编译器没有可比的性能。 Lua 在很大程度上非常适合解释器和 JIT 性能,但这并不是它的决定因素。 LuaJIT 并不比 Sun JVM“快”,尽管它具有可比性。另外LuaJIT的解释器和PUC Lua的完全不同。

以上是关于LuaJIT 真的比其他所有 JIT-ed 动态语言都快吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

luajit啥时候有的

SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?

SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?

使用tengine DSO 来动态编译安装第三方模块(Lua

使用tengine DSO 来动态编译安装第三方模块(Lua

LuaJIT ffi cdata 和 Torch Tensor 之间的最佳转换