|
|
||||||
Скорость чтения csv с разных носителей21.05.2020, 23:27. Показов 9902. Ответов 148
Метки нет (Все метки)
Добрый день, джентльмены.
На днях набросал простой код поиска нужной строки в CSV-файле, см. под спойлером Кликните здесь для просмотра всего текста
Сегодня протестировал работу на з-х накопителях: HDD WDC WD10EACS-00ZJB0 (1000 ГБ, SATA-II) HDD WDC WD5000AAKX-001CA0 (500 ГБ, 7200 RPM, SATA-III) SSD KINGSTON SV300S37A120G (120 ГБ, SATA-III) В итоге время обработки CSW-файла размером 1ГБ у всех примерно одинаковое, что стало для меня откровением. Я предполагал, что в данном коде узкое место скорость чтения с накопителя. Чем можно объяснить такой результат теста?
0
|
||||||
| 21.05.2020, 23:27 | |
|
Ответы с готовыми решениями:
148
Создание тестов на скорость чтения и скорость записи Так ли важна в реальной жизни скорость записи SSD, или смотреть надо только на скорость чтения, а на запись пофигу |
|
|
|
| 20.06.2020, 23:40 [ТС] | |
|
Структура тайминга bedvit:
0.52 сек. просто асинхронное чтение из кеша 2.42 просто асинхронное чтение с диска FILE_FLAG_NO_BUFFERING 3.082 просто асинхронное чтение с диска 0.23 memcpy (рабочий буфер - копия буфера ReadFile) 0.76 - выполнение самого кода поиска и работы с копией буфера + блок дозагрузки основного буфера межбуферной строкой (асинхронно) Итого: 1.выполнение из кеша 0.52+0.76=1,28 (в идеале должно быть 0.76, т.к. эти операции асинхронны), но по факту видимо накладные расходы? 2.чтение с диска FILE_FLAG_NO_BUFFERING 2.42+0,23=2,65 (0.76 - здесь, норм, асинхронно, внутри 2,65 сек) 3.чтение с диска 3,082+0,23=3,31 (0.76 - здесь, норм, асинхронно, внутри 3.31 сек) т.е. выигрыш от асинхронности:0.76-0.23=0.53 сек Структура тайминга XLAT (если я все правильно понял): 0.52 сек. просто чтение из кеша 3.11 сек. просто чтение с диска с поиском 1.01 сек. чтение из кеша 3.24 сек. чтение с диска в итоге 0.49 сам поиск в кеше и 0.13 при чтении с диска. Почему разница? В моем алгоритме, тоже чтение из кеша выше ожидаемого. Выводы: Чтение с диска и из кеша в обоих алгоритмах сопоставимое, за исключением режима FILE_FLAG_NO_BUFFERING, который есть в первом алгоритме. Поиск нужной строки по подстроке быстрее во втором алгоритме. Здесь стоит отметить, что в первом алгоритме размер строки макс = размеру буфера (16777216 байт), во втором = 1024 байта. Пока неясно можно ли еще ускорить поиск в первом алгоритме, и почему он так отстает от второго.
0
|
|
|
|
||||
| 21.06.2020, 16:15 [ТС] | ||||
|
Сравнимо со вторым алгоритмом (0,49). Я предполагал. что strstr() - одно из быстрейших реализаций поиска подстроки, или нет? Итого проигрываю на формирование второго буфера для асинхронности на те 0.23 сек. - memcpy(). т.е. любой алгоритм который медленнее копирования второго буфера (0.23 сек - memcpy()) будет выгоднее в асинхронной реализации.
1
|
||||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
|
||
| 22.06.2020, 11:47 | ||
|
и здесь Выводы заслуживают внимания... всё очень интересно на пальцах разжёвано... спасибо!.. === даже то, чего я опасалась - необходимости такой рукопашной для нормального кода - а оказалось банально - "библиотека - друг человека" (и комитет, который её ввёл)
0
|
||
|
|
|
| 24.06.2020, 00:41 [ТС] | |
|
Запилил алгоритм Boyer-Moore.
Просел в скорости почти в два раза в сравнении с обычной strstr(). Вот и быстрейший алгоритм. Поиск подстроки 7 символов в буфере 16 МБ.
0
|
|
|
|
|||
| 24.06.2020, 11:15 | |||
|
А зачем его пилить если он уже реализован в стандартной библиотеке в С++17?
https://en.cppreference.com/w/cpp/algorithm/search И там есть как вариант еще и Boyer-Moore-Horspool Добавлено через 2 минуты Добавлено через 24 секунды
1
|
|||
|
|
|||
| 24.06.2020, 12:02 [ТС] | |||
|
Опять вы меня в std:: завлекаете. Придет время и к стандартной библиотеке.
хм...
Будет ли это быстрее strstr() - вопрос. Сейчас хочу закончить Си проект. Если есть инфо по быстрой Си-реализации этого алгоритма, буду благодарен. Добавлено через 13 минут Возможно boyer_moore_searcher и boyer_moore_horspool_searcher заходят в п.
0
|
|||
|
|
|||||||
| 25.06.2020, 11:45 [ТС] | |||||||
|
Вот мои тесты по boyer_moore_searcher усредненные по 10 итерациям (на другом ПК, оптимизация полная - по умолчанию, функции штатные без допилов, таких как у XLAT) поэтому данный тайминг с предыдущими таимингами не сравним: strstr 0,09 std:: find 0,21 search 3,96 boyer_moore_searcher 0,22 boyer_moore_horspool_searcher 0,48 Без допилов Си-шные функции выигрывают. Как допилить boyer_moore_searcher я не знаю. Да и более чем в 3 раза, для профита, думаю, не выйдет. Причем boyer_moore_searcher() сравним с find(). А search() очень медленная, возможно руки кривые, но делал в стандартной реализации.
0
|
|||||||
|
|
||||||||
| 25.06.2020, 11:59 | ||||||||
|
Добавлено через 1 минуту
Добавлено через 1 минуту
0
|
||||||||
|
|
|
| 25.06.2020, 12:00 [ТС] | |
|
Для примера, вышеупомянутая реализация алгоритма Boyer-Moore отрабатывает за 0,77 сек., т.е. в 3 раза медленнее, чем std::boyer_moore_searcher.
0
|
|
|
|
||||
| 25.06.2020, 12:03 [ТС] | ||||
|
0
|
||||
|
|
||||
| 25.06.2020, 12:04 [ТС] | ||||
|
0
|
||||
|
|
|||||||
| 25.06.2020, 14:53 [ТС] | |||||||
find: Time - 0.202000 std::search: Time - 3.673000 std::boyer_moore_searcher: Time - 0.489000 std::boyer_moore_horspool_searcher: Time - 0.464000
0
|
|||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 25.06.2020, 15:35 | |
|
bedvit, а так другой результат
Кликните здесь для просмотра всего текста
хотя у меня в студии результат аналогичен вашему
0
|
|
|
|
|
| 25.06.2020, 16:30 [ТС] | |
|
zayats80888, вы несколько cмухлевали, так корректнее. Даже здесь видно, что strstr() одна из быстрых, а std::search() к моему удивлению сильно отстает. А еще удивительнее, что отстают "boyer_moore...()" одни из быстрейших алгоритмов на длинной строке и 7-значной строке поиска (проверяем не все 7 а только часть).
Добавлено через 5 минут Хотя результат на границе чувствительности (хороший видимо стоит сервак). И ориентироваться на него сложно. Тот тайминг, который я выкладывал отрабатывает в exe файле. Итого: или в студии другой алгоритм оптимизации или результат на серваке отличный от выполнения ехе.
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 25.06.2020, 16:55 | |
|
bedvit, я сомневаюсь, что за
strstr стоит какой-то наивный алгоритм. Наверняка там что-то специализированное и эффективное.Но std::search + searcher - универсален, в отличии от strstr, может искать что угодно где угодно.Везде есть свои плюсы и минусы.
0
|
|
|
|
|||
| 25.06.2020, 17:17 [ТС] | |||
. Хотя в своей реализации, где файл читается блоками в буфер, расчет этих таблиц я вынес за рамки расчета внутри буфера, т.к. подстрока поиска при загрузке новых данных в буфер - не меняется. Но в общем времени, поиска в файле - учитывал. В итоге, сейчас, strstr() все равно оказался быстрее, хотя надежды возлагал на что-то побыстрее чем O(s*n).
0
|
|||
|
|
||
| 25.06.2020, 17:29 | ||
Т.е. совпадение не будет найдено? Смысл тогда этого теста?
0
|
||
| 25.06.2020, 17:29 | |
|
Программа для чтения csv Скорость импорта CSV Bat - файл для чтения только одной строки из файла CSV Как правильно написать скрипт для чтения файла с расширением .csv(Excel) ? Скорость чтения/записи Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|