LuaJIT — это отслеживающий JIT, что означает, что он может повторно оптимизировать себя, чтобы лучше соответствовать данным, проходящим через среду выполнения, однако LLVM — это статический JIT, и поэтому он просто генерирует однократный машинный код наилучшего случая для соответствующего источник, который может привести к потере производительности из-за плотных циклов или плохих прогнозов ветвления.
Фактическая виртуальная машина LuaJIT также является высокооптимизированной, многопоточной, машинно-зависимой сборкой, в то время как LLVM использует C++ для переносимости (и по другим причинам), поэтому это, очевидно, дает LuaJIT огромное преимущество. LLVM также имеет гораздо более высокие накладные расходы, чем LuaJIT, просто потому, что LuaJIT был разработан для работы на гораздо менее мощных системах (например, на процессорах ARM).
Байт-код LuaJIT также был специально разработан для LuaJIT, где, поскольку битовый код LLVM намного более общий, это, очевидно, ускорит выполнение LuaJIT. Байт-код LuaJIT также хорошо разработан для кодирования подсказок по оптимизации и т. д. для использования JIT и трассировщиком.
игнорируя тот факт, что это два разных типа JIT, все сравнение сводится к тому, что LLVM ориентирован на то, чтобы быть общим бэкэндом JIT/компилятора, LuaJIT ориентирован на выполнение Lua как можно быстрее и наилучшим образом, поэтому он выигрывает от не ограничиваясь общностью.
person
Necrolis
schedule
06.10.2011