скорость исполнения регулярок заметно упала

Здесь можно сообщить о найденных багах в Far.
Post Reply
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

скорость исполнения регулярок заметно упала

Post by Shmuel »

Начиная с билда 4062 скорость исполнения регулярок заметно упала.
Приложен файл test1.lua, запускать можно с комстроки lua:@test1.lua
На моём компьютере времена следующие:
Билд 4061 - 1150 msec
Билд 4062...4131 - 4370 msec

Реально я заметил это на более сложном регулярном выражении, чем использованное в примере. То, что в примере, просто взято "навскидку".
test1.lua.7z
(222 Bytes) Downloaded 59 times
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by DrKnS »

В 4132 должно стать быстрее.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel »

DrKnS wrote:В 4132 должно стать быстрее.
Регулярки вроде вернулись к прежней скорости.
Теперь мой скрипт исполняется только на 30% медленнее в 4132 по сравнению с 4061. Почему, пока не знаю.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by John Doe »

>Теперь мой скрипт исполняется только на 30% медленнее в 4132 по сравнению с 4061. Почему, пока не знаю.
Тоже заметил подобное (перезагрузка макросов начала занимать больше времени).
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel »

John Doe wrote:Тоже заметил подобное (перезагрузка макросов начала занимать больше времени).
Скорее всего, регулярки всё-таки не вернулись к прежней скорости. (Чтобы это проверить наверняка, нужно повозиться, т.к. изменение скорости зависит от конкретного выражения.)
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel »

Вот произвёл эксперимент: подсчёт слов в чейнжлоге Фара, в редакторе, плагином LF Search (плагин показывает время, затраченное на операцию). Рег. выражение - \w+.
Билд 4061: 0.11 ... 0.13 sec.
Билд 4135: 0.19 ... 0.20 sec.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by DrKnS »

regex match использует "стек состояний" для своих внутренних нужд.
До 4062 этот "стек" был членом класса RegExp и был имплементирован как вектор неких структур.
Из этого следуют два вывода:
- вектор жил столько же, сколько и содержащий его класс, и во время матча объекты добавлялись туда за амотризированно константное время;
- при попытке матчить из разных тредов вектор превращался в мусор. Внезапно.

В 4062 вектор стал локальной переменной метода match, сам метод таким образом перестал менять состояние класса и стал thread safe.
При этом вектор, естественно, стал пересоздаваться при каждом матче, что, естественно, не бесплатно.

Наверное, можно попытаться навелосипедить дополнительную оптимизацию в виде thread-local вектора, но заниматься этим ради семи сотых секунды на мегабайт текста я как-то не вижу смысла.
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: Глюки и баги, появившиеся в «ночных сборках»

Post by Shmuel »

Вероятно, библиотека изначально не была рассчитана на многопоточность.

Семь сотых секунды на мегабайт текста - не очень логичная трактовка. Регулярное выражение может быть на порядок-два сложнее, чем использовавшееся. Более правильно сказать, что стало в 1.6 раз медленнее, чем было.

Oniguruma в том же опыте показывает 0.09 ... 0.11 sec., в билде 4135. Не знаю, насколько она thread-safe, но это широко используемая в мире библиотека.

Я лишь предоставляю информацию, что с ней делать - это другой вопрос.
Post Reply

Return to “Глюки и баги”