Производительность: LuaJIT vs Javascript (упоминается и V8)

Всё что связано с программированием на Lua
Ответить
Diatlo
c7i.team
Сообщения: 251
Зарегистрирован: Пт ноя 06, 2009 6:04 am

Производительность: LuaJIT vs Javascript (упоминается и V8)

Сообщение Diatlo » Ср ноя 06, 2013 1:13 pm

http://habrahabr.ru/post/113250/

Вкратце:
"Недавно я написал пост о том как сделать рейтрейсер. Код рейтрейсера тогда был написан на JavaScript. Мне стало интересно, как с этой же задачей справится Lua, а именно LuaJIT 2.0. Ниже результаты сравнения.
Участие принимали Chrome 9.0 Beta, Opera 11.01, Firefox 4.0 Beta 9, Explorer 9 Beta и LuaJIT 2.0 Beta 5. Все пять участников рендерили одну и ту же сцену на экран 1000x1000 по три луча на пиксель"

Результаты следующие (RPS означает «число лучей в секунду»):

Chrome 20,400 RPS
Opera 15,700 RPS
Firefox 9,300 RPS
Explorer 9,000 RPS
LuaJIT 5,000 RPS
Неожиданный результат: LuaJIT оказался самым медленным, причём с отрывом от остальных участников."

Но всё изменилось, после того, как один из комментаторов чуть поменял код - изменил цикличность сборки мусора:
"Intel Core i5 750, 2.67GHz
Windows 7 Ultimate

chrome9 (9.0.597.84) — 22129
luajit-2.0.0-beta5 — 23946

изменения в коде луа:
понижена цикличность сборки мусора collectgarbage(«setpause», 600)"

"Да, сборка мусора в хроме отменная: скрипт добирается до 200Мб, потом через несколько секунд чистит мусор до 96мб, и снова увеличивается в размере. Насколько я помню, в v8 сборщик многопоточный, видимо тут выигрыш.
С луа все гораздо хуже: если шаг сборки 600, то сборщик видимо вообще не срабатывает, кушая 500мб. Если шаг 300, то потребление памяти медленно растет до 230 мб. "

"Т.е. если функции вызывать глобально, а сборку мусора отложить, то получается быстро?
Ну я так и думал, что в GC дело. От LJ2 следует ожидать, что он сам поднимет загрузку глобалов (load hoisting). На обычных числодробилках даже Crankshaft (V8 после 3.0) к LuaJIT2 вроде не подобрался пока, я уж не говорю о классическом бэкенде (V8 до 3.0).

Насколько я помню, в v8 сборщик многопоточный
Нет, он однопоточный (точнее они, для частичных сборок в молодом поколеннии копирующий scavenger, для полных сборок — MarkSweep/MarkCompact). Ну и пауза в несколько секунд — это, м-м-м-м, не сказать что бы отменный сборщик :-)
После того, как обратились к Майк Палл, автор LuaJIT:
Я бы не догадался написать «a = ffi.new('double[?]', ...)» вместо «a = {}». Это какая то фича LuaJIT — в документации Lua я такого не встречал. Вообще было бы неплохо, если бы Mike написал подобные простые сценарии кода.
Да, это фича LuaJIT 2, начиная с beta6. См. luajit.org/ext_ffi.html и соседние топики в меню слева.
FFI Library: The FFI library allows calling external C functions and using C data structures from pure Lua code. Использование структур С из Луа.
К сожалению, не приводятся результаты после замены луа-таблицы {} на ffi C-массив с элементами типа double. Судя по-всему, там всё зашкаливает =)))))).

Vant
c7i.team
Сообщения: 179
Зарегистрирован: Вс дек 05, 2010 4:22 am

Re: Производительность: LuaJIT vs Javascript (упоминается и

Сообщение Vant » Вт ноя 12, 2013 3:28 pm

Ну можно долго спорить о смысле теста производительности, основанного на одном единственном алгоритме.
Кстати мне показалось, что Луашная версия написана хуже JS-ной в смысле скорости, ну да ладно, воспользуюсь правом на ошибку.

А вот что меня насторожило - люди получили результат, он их удивил там или не устроил, не суть, что происходит дальше - они подкручивают настройки LuaJit и видят офигенный результат. При этом настройки остальных систем они не трогают. Ну, может быть этих настроек просто нет, может они про них забы-ы-ы-ыыыли...
К сожалению, не приводятся результаты после замены луа-таблицы {} на ffi C-массив с элементами типа double. Судя по-всему, там всё зашкаливает =)))))).
Какая-то невнятная твоя цитата и комментарий к ней. Что там кого удивило мне непонятно. И какие результаты тебе нужны? В написанной парнем программе используется ( судя по исходнику ) как раз чисто луа-джитная фича для организации внешних флоат-массивов вместо встроенных луа-шных. Насколько я понимаю, он так написал сразу и результаты тестов приводил именно для этой версии. Или я что-то не понимаю?

PS: кстати запускал я его прогу на своей машине. Понял, что работаю на арифмометре.

PPS: хотел было переписать его прогу на свой forth, но понял, что алгоритмы получатся слишком разными. Да и времени если честно жалко. А сравнить все-таки хотелось бы - вот только на каком тесте... Не факториал же считать.

Diatlo
c7i.team
Сообщения: 251
Зарегистрирован: Пт ноя 06, 2009 6:04 am

Re: Производительность: LuaJIT vs Javascript (упоминается и

Сообщение Diatlo » Ср ноя 13, 2013 8:13 am

Ну про Луа-исходник я молчу. Автор похоже нихрена Луа не знает, если использовал в функции глобальные переменные (без инициализации внутри функции local ИмяПеременной).

Но даже так, увеличив периоды срабатывания Garbage Collector без оптимизаций, LuaJIT обошла V8 3.0. После добавления ffi-массива, картина должна была стать ещё живописнее:
работа напрямую с с-массивом, вместо работы с lua-таблицей с потерями на обслуживание. Вот результаты работы с ffi-массивом вроде не приведены.

Я про V8 краем уха слышал, что обещали чуть-ли не в 10 раз быстрее Lua. В итоге новый движок V8 таки отстает от отработанного Луа с 20-летней историей.

Vant
c7i.team
Сообщения: 179
Зарегистрирован: Вс дек 05, 2010 4:22 am

Re: Производительность: LuaJIT vs Javascript (упоминается и

Сообщение Vant » Ср ноя 13, 2013 9:15 am

В итоге новый движок V8 таки отстает от отработанного Луа с 20-летней историей.
В статье сравнивался V8 c LuaJit. Откуда взялся оригинальный авторский Луа с его 20-летней историей? Демагогией занимаешься.

Еще раз повторю - все эти тесты бенчмарок зависят от криворукости авторов этих тестов. Я лично им доверяю ровно на 50% -- то есть они либо показывыают истинную картину либо врут с равными шансами.

binary-trees:
LuaJit 6.295s
V8 2.119s

О чем вот эти цифры говорят? Да ни о чем.

Diatlo
c7i.team
Сообщения: 251
Зарегистрирован: Пт ноя 06, 2009 6:04 am

Re: Производительность: LuaJIT vs Javascript (упоминается и

Сообщение Diatlo » Ср ноя 13, 2013 9:40 pm

binary-trees:
LuaJit 6.295s
V8 2.119s

О чем вот эти цифры говорят? Да ни о чем
Анекдот про Петьку, Чапаева и приборы на новый лад =)))

Ответить