llvm/tools: lli REPL по сравнению с LuaJIT

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

Спасибо.

ОБНОВИТЬ:

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

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


person are    schedule 29.10.2010    source источник
comment
Вам придется задать более конкретный вопрос, чем этот.   -  person jer    schedule 29.10.2010
comment
Извиняюсь. Я обновил вопрос. Спасибо, что указали.   -  person are    schedule 30.10.2010
comment
@Neopallium, ты можешь ответить? (он является автором code.google.com/p/llvm-lua )   -  person osgx    schedule 17.12.2010


Ответы (1)


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