Производительность Lua

Здесь обсуждается всё, что касается макросов.
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Производительность Lua

Post by zg »

Latest post of the previous page:

John Doe wrote:У меня получилось что разница в производительности - 30 раз :shock:

И тормозит вовсе даже не trim..
конвертация utf8<->utf16. получить строку, отправить в трим, получить из трим, если не совпало - установить. поэтому встроенные и работают быстрее, пока не уткнутся в луаджитовское хеширование.
но на самом деле это не сильно актуально, на практике мало кому надо обрабатывать по 100 мб за раз.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Производительность Lua

Post by John Doe »

John Doe wrote: И тормозит вовсе даже не trim..
Я вот другое пытаюсь сказать.
Мы тут trim оптимизируем, в то время как GetString похоже на два порядка тяжелее.
В примере выше даже если убрать trim напрочь local trm = str никак ситуация не меняется.

Тупо вызов editor.GetString в 30 раз медленнее чем прямое использование ECTL_SETSTRING.
zg wrote: но на самом деле это не сильно актуально, на практике мало кому надо обрабатывать по 100 мб за раз.
Это да.
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Производительность Lua

Post by zg »

у меня, если в KillSpaces закоментить всё, кроме первой строки, время в два раза увеличивается на тестовом логе. не знаю, что и думать.
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

Производительность Lua

Post by phidel »

Меня хлебом не корми, дай померять перфоманс.
Может, кому-то будет интересно сравнение скорости простой обработки строк на lua и на питоне.

Скриптик изменяет уровень заголовков в маркдаун (увеличивает или уменьшает). Время померяно очень примерно, грубыми инструментами. Поскольку разница значительная, нет желания возиться с точными замерами.

Время запуска интерпретатора:
  • lua 5.4.2: 0.02 сек
  • python 3.11.3: 0.08-0.1 сек (в 4-5 раз дольше)
Время работы скрипта
  • lua: 6.54 сек
  • luajit: 3.19 сек (на 51.2% быстрее)
  • python: 8.71 сек (на 33.2% дольше)
  • python (*): 5.13 сек (на 22.5% быстрее)
    Компиляторы
  • fpc 3.3.1: 1.58 сек (на 76.0% быстрее)
  • go 1.20.6: 1.68 сек (на 74.3% быстрее)
python (*) - версия с предварительной компиляцией шаблона регэкспа

скрипты lua, python, python (*), fpc, go
Одним архивом
bench_ChangeLevelMarkdown.zip
(1.45 MiB) Downloaded 69 times
Last edited by phidel on Sun 06 Apr, 2025 15:38, edited 7 times in total.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Ликбез по Lua

Post by John Doe »

А на luajit получается что не меряли?
Ну и у нас можно использовать фаровские регэкспы, с предварительной компиляцией.
https://t.me/FarManager — Telegram чат
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

Ликбез по Lua

Post by phidel »

я не эксперт в lua, мягко говоря. Для того и опубликовал скрипт, чтобы услышать рекомендации по оптимизации. Про luajit не знал, сейчас почитаю
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Ликбез по Lua

Post by John Doe »

В фаре как раз luajit используется.
Связанные темы:
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Ликбез по Lua

Post by John Doe »

Python кстати тоже можно
https://t.me/FarManager — Telegram чат
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

Ликбез по Lua

Post by phidel »

обновил пост
gotar
Posts: 519
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 31 times
Been thanked: 3 times

Ликбез по Lua

Post by gotar »

John Doe wrote: Sat 05 Apr, 2025 22:51 Ну и у нас можно использовать фаровские регэкспы, с предварительной компиляцией.
Shmuel здесь на конференции публиковал интерпретатор luajit c c фаровскими регекспами. Думаю в нем будет ещё быстрее.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Ликбез по Lua

Post by John Doe »

gotar wrote: Sun 06 Apr, 2025 10:28 интерпретатор luajit c c фаровскими регекспами.
Такого нет.
Но тестовый скрипт можно запустить в контексте фара, из luamacro, и тогда их можно будет использовать.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

Ликбез по Lua

Post by John Doe »

phidel wrote: Sat 05 Apr, 2025 22:48 скрипты lua, python, python (*), fpc, go
А сами данные не опубликованы.
gotar wrote: Sun 06 Apr, 2025 10:28 c c фаровскими регекспами. Думаю в нем будет ещё быстрее.
Мой эксперимент показал что с фаровскими регэкспами в 1.5 раза дольше.
https://t.me/FarManager — Telegram чат
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

Ликбез по Lua

Post by phidel »

John Doe wrote: Sun 06 Apr, 2025 12:52 А сами данные не опубликованы.
Добавил в пост архив с полным набором скриптов и исходных данных.
Кроме того, результат luajit не воспроизводится, видимо, был какой-то выброс. Повторил многократно, в разное время суток, стабильно выдает 3.19-3.20 сек. Так что luajit впечатляет еще больше и его скорость вполне сопоставима со скоростью компиляторов, при своем микроскопическом размере, удобстве синтаксиса и портативности.

luajit: 3.19 сек (на 51.2% быстрее)
Last edited by phidel on Sun 06 Apr, 2025 15:48, edited 2 times in total.
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

Ликбез по Lua

Post by phidel »

Скажите пожалуйста почему такая разница в размере lua51.dll
Shmuel
Posts: 7243
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 635 times

Ликбез по Lua

Post by Shmuel »

phidel wrote: Sun 06 Apr, 2025 17:34 почему такая разница в размере lua51.dll
Сборка в Фаре - MinGW GCC 8.1 - с опциями по умолчанию.
Сборка в luapower видимо собрана чем-то другим и с другими опциями.
User avatar
phidel
Posts: 104
Joined: Wed 29 Jun, 2011 17:21
Has thanked: 30 times
Been thanked: 6 times
Contact:

Ликбез по Lua

Post by phidel »

сравнил с помощью dumpbin, оказалось, в luapower (тоже mingw64) присутствует отладочная информация и дополнительно экспортируется несколько функций (lua_getexdata, lua_getexdata2, lua_resetthread, lua_setexdata, lua_setexdata2)
Last edited by phidel on Sun 06 Apr, 2025 18:32, edited 1 time in total.
Post Reply

Return to “Обсуждение макросов”