powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск в файле с использованием MMF
3 сообщений из 28, страница 2 из 2
Поиск в файле с использованием MMF
    #39900046
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,
проверяли на разных данных, не чисто теоретически обуждали)
...
Рейтинг: 0 / 0
Поиск в файле с использованием MMF
    #39900092
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Sapersky
А как FILE_FLAG_NO_BUFFERING помогает? Я, кстати, не замечал от него эффекта, когда-то пробовал для тестирования, чтобы Винда не кэшировала файл - но заметной разницы в скорости не было, то есть видимо всё равно кэшировала.

Тем временем доделал поиск подстроки на SSE2. Быстрее для длинных строк/буферов, для коротких медленнее.
https://drive.google.com/open?id=1zVWYmnSq0Lki4_8Ju9E9jnYHHkhKqZvD

А Кнут - Моррис - Пратт втроём не смогли забороть одного Л.Толстого. Как я понял, смысл алгоритма в том, чтобы быстро обрабатывать частичные совпадения с подстрокой. Если их мало или нет, то и эффекта от алгоритма нет, получается даже медленнее стандартной Pos (наверное потому, что она на ассемблере).


кстати, если искомого слова вообще нет, то алгоритм крэшится с Access Violation
потому что вот тут

pr1 := @s[m1];
pr2 := @s[m2+1];
pr4 := @s[m4+1];

не проверяется, что m1, m2, m4 = -1

Ну и SearchKMP в случае, если ничего не найдено, вернёт произвольное значение, так как Result не инициализирован
...
Рейтинг: 0 / 0
Поиск в файле с использованием MMF
    #39900478
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
Если в начале FormShow поставить
SetPriority(True, True) ;
то результаты для Pos, Agner/SSE4, SSE2 - не изменятся вообще, а вот для KMP улучшатся ровно в два раза
У меня не влияет.
Pos: 131; KMP: 274; SSE4: 11; SSE2: 15
Не знаю в чём дело. Могу предположить агрессивные настройки энергосбережения, при которых CPU можно расшевелить только TIME_CRITICAL на достаточно долгом интервале.
defecatorкстати, если искомого слова вообще нет, то алгоритм крэшится с Access Violation
Ну и SearchKMP в случае, если ничего не найденоИсправил.
https://drive.google.com/open?id=1zVWYmnSq0Lki4_8Ju9E9jnYHHkhKqZvD
s62когда-то обсуждали на другом форуме скорость "простого" поиска и упрощенного БМХ (Бойер-Мур-Хорспул). Пришли к выводу, что выигрыш есть для относительно длинных строк, а для искомой подстроки длиной до 6 символов разницы практически нет.В моей реализации зависимость от данных ещё более жёсткая.
(ну как - в моей, алгоритм позаимствован отсюда: http://0x80.pl/articles/simd-strfind.html )
В лучшем случае (большой размер основной строки, нет совпадений) будет скорость N/8, для блока в 16 байт делается 2 сравнения. Но в худшем, если подсунуть такую строку, чтобы срабатывал детальный поиск на каждой итерации, получается хуже брут-форса.
При этом у Агнеровской функции нет такого падения скорости на неудобных данных. Возможно, стоит всё-таки попробовать PcmpEstrM.

До более продвинутых алгоритмов у меня наверное руки не дойдут, если интересно - добавляйте.
...
Рейтинг: 0 / 0
3 сообщений из 28, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск в файле с использованием MMF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]