2010-04-06 29 views
44

De acuerdo con el juego de referencia de lenguaje de la computadora, la implementación de LuaJIT seems to beat every other JIT-ed dynamic language (V8, Tracemonkey, PLT Scheme, Erlang HIPE) por un orden de magnitud.¿Es LuaJIT realmente más rápido que cualquier otro lenguaje dinámico JIT-ed?

Sé que estos puntos de referencia no son representativos (como dicen: "¿Qué implementaciones de lenguaje de programación tienen los programas de referencia más rápidos?"), Pero esto todavía es realmente impresionante.

En la práctica, ¿es realmente el caso? ¿Alguien ha probado la implementación de Lua?

+2

>> Sé que estos puntos de referencia no son representativos << ¿Usted? El recordatorio es que no pretenden ser representativos de todo lo que quieras hacer. Depende de usted entender cómo esos programas pequeños son (o no) los programas que usted escribe. – igouy

+4

@igouy: Si él pensaba que los puntos de referencia eran representativos, no habría hecho esta pregunta. La pregunta es para corroborar estos resultados. – Mud

Respuesta

30

Hay una buena discusión en Lambda the Ultimate. LuaJIT es muy bueno.

Muchas personas han informado aceleraciones impresionantes en lua-l (la lista de correo de lua). Las aceleraciones son más impresionantes para el código Lua puro; el compilador de rastreo no es tan efectivo cuando hay muchas llamadas a funciones C en módulos de biblioteca cargables.

6

me hizo un experimento con la lección aprendida aquí: http://www.sampalib.org/luajit2.0_tunning.html Algunos datos no son tan válida más (maxmcode = 1024 es suficiente), pero luajit trae una mejora sólida en un 600 líneas de código puro guión Lua (sin llamada C to hit perfs ...) que no es una aplicación a gran escala ni un caso de uso incorporado, sino mucho más que los puntos de referencia.

16

En mi caso (un desarrollo de prototipo de juego), no observé ninguna mejora en el rendimiento. Uso lua para incrustación, por lo que hay muchas llamadas a funciones de biblioteca C++. Aunque el bucle principal está en un script lua y toda la lógica importante se implementa en lua, el rendimiento general se determinó mediante la representación de motores y motores de física implementados en C++. El lua original ya es lo suficientemente rápido para tales aplicaciones.

+0

Hice una experiencia similar. Sí, luajit es mucho más rápido para lua puro, pero no acelerará tus llamadas a C. Utilicé luabind para envolver (probablemente una mala idea), y terminé pasando más tiempo en las llamadas al contenedor de objetos que en mis funciones lua . – cib

+16

Si utiliza la interfaz LuaJIT ffi para llamar a las funciones C, el compilador jit las incorpora de forma nativa, y esto será mucho más rápido. He llamado llamadas al sistema Linux a la misma velocidad que C. –

+0

Para tbear y cib, el problema no es la sobrecarga de llamar a C, sino que todo el tiempo se estaba gastando dentro de las funciones C. Por supuesto, en ese caso Lua no es parte del cuello de botella y acelerarlo no producirá ninguna mejora. – Eloff

-1

El rendimiento de JIT depende de dos cosas: el rendimiento del lenguaje de scripting original y el rendimiento del compilador.

El compilador es una técnica bastante madura y la mayoría de los compiladores JIT tienen un rendimiento comparable. Sin embargo, el lua mismo, es decir lua-sin-JIT, es probablemente uno de los lenguajes de scripting más rápidos.

lua es más rápido que Java-without-JIT. lua es más rápido que Javascript-without-JIT. lua es más rápido que la mayoría de scripting-languages-without-JIT.

así,

lua-JIT es más rápido que Java-con-JIT (Java sol), lua-JIT es más rápido que V8 (Javascript-con-JIT), etc, ...

+5

La mayoría de los compiladores JIT no tienen un rendimiento comparable. Lua en su mayor parte se presta bien para el intérprete y el rendimiento de JIT, pero este no es el factor decisivo que está hecho para ser. LuaJIT no es 'más rápido' que Sun JVM, aunque es comparable. Además, el intérprete de LuaJIT es completamente diferente de PUC Lua. – jsimmons

Cuestiones relacionadas