llvm / tools: lli REPL по сравнению с LuaJIT - PullRequest
7 голосов
/ 29 октября 2010

Мне было интересно, имел ли кто-то опыт работы с llvm / tools - lli интерпретатор / JIT-компилятор (см. http://llvm.org/docs/GettingStarted.html#tools).) Меня интересует любая информация, которую вы можете предоставить (скорость, сложность, реализации и т. Д.).).

Спасибо.

ОБНОВЛЕНИЕ:

Хорошо, как будет сравниваться выполнение битового кода с выполнением виртуальной машины LuaJIT, если предположить, что lli действует как интерпретатор? Как насчет того, когда lli действуетв качестве jit-компилятора (такое же сравнение)?

ПРИМЕЧАНИЕ. Я спрашиваю только, есть ли у кого-то опыт или он хочет потратить некоторое время, чтобы поделиться им.

1 Ответ

5 голосов
/ 06 октября 2011

LuaJIT - это трассирующий JIT, что означает, что он может повторно оптимизировать себя для лучшего размещения данных, передаваемых через среду выполнения, однако LLVM является статическим JIT и, таким образом, будет просто генерировать разовый машинный код в лучшем случае. для соответствующего источника, который может привести его к потере производительности в тесных циклах или неправильных прогнозах ветвления.

Фактическая виртуальная машина LuaJIT также является высокооптимизированной, многопоточной, специфичной для машины сборкой, где LLVM использует C ++ для переносимости (и других причин), так что это, очевидно, дает LuaJIT огромное преимущество. LLVM также имеет гораздо больше накладных расходов, чем LuaJIT, просто потому, что LuaJIT был разработан для работы на гораздо менее мощных системах (например, с процессорами ARM).

Байт-код LuaJIT также был специально разработан для LuaJIT, поскольку, поскольку битовый код LLVM намного более универсален, это, очевидно, заставит LuaJIT выполняться быстрее. Байт-код LuaJIT также хорошо разработан для подсказок по оптимизации кодирования и т. Д. Для использования JIT и трассировщиком.

игнорируя тот факт, что это два разных типа JIT, все сравнение сводится к тому, что LLVM сфокусирован на том, чтобы быть универсальным JIT / Compiler backend, LuaJIT нацелен на максимально быстрое выполнение Lua наилучшим образом, таким образом он выигрывает от того, что не ограничен общностью.

...