2010-10-29 4 views
7

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

Спасибо.

UPDATE:

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

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

+1

Вам нужно будет задать более конкретный вопрос, чем это. – jer

+0

Извините. Я обновил вопрос. Спасибо за указание. – are

+0

@Neopallium, вы можете ответить на это? (он автор http://code.google.com/p/llvm-lua/) – osgx

ответ

5

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^