|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
||||||
Почему std::string_view МЕДЛЕННЕЕ, чем std::string?04.06.2016, 20:57. Показов 9812. Ответов 28
Метки нет (Все метки)
Всем привет!
Нужно найти количество уникальных строк в больших текстовых файлах (размером до нескольких гигабайт). Почему в нижеследующем коде результат выполнения со string_view, который не копирует элементы, значительно медленнее, чем в случае сo string?!
0
|
||||||
| 04.06.2016, 20:57 | |
|
Ответы с готовыми решениями:
28
ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
Запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’ |
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|||||||||||||||||
| 07.06.2016, 04:44 [ТС] | |||||||||||||||||
getc_unlocked временами дает худшие результаты, чем просто fread, считывающая файл одним большим блоком.Таки как-то распараллелил я всю эту штуку.
std::string, такой же тест на string_view упорно оставался на пару секунд медленнее. Ну и чертовщина ![]() И вот что интересно: сразу после перезагрузки результат такой как выше. Запускаю браузер, в котором ничего не происходит ресурсоемкого, и производительность падает почти в 2 раза, до 43 секунд (т.е. хуже чем однопоточная версия!). При повторном запуске уже 30 секунд работает. От чего такие скачки? Однопоточная версия хотя бы стабильно ползала. Добавлено через 30 минут А вот и наш победитель на данный момент, сочетание memory mapping и мультипоточной обработки, используя std::string:
Какие будут замечания к коду по параллельной обработке ? Сам вижу, что подход топорный у меня.
0
|
|||||||||||||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||||
| 07.06.2016, 12:58 | ||||||
|
gromo,
std::unordered_set<int> вместо std::unordered_set<std::string>, ну и копеечка от спирита, если сравнивать между std::istream(буферезированный конечно аля stringstream) >> TOINT и qi::int_. Но если же мы сделаем граммматику такой : *(qi::char_ - qi::eol) % qi::eol и соответственно поменяем контейнер, то ускорения уже не будет. Т.е. *(qi::char_ - qi::eol) % qi::eol в лучшем случае будет "делать" тоже самое что и std::getline.
1
|
||||||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
| 07.06.2016, 13:55 | |
|
0
|
|
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
| 07.06.2016, 14:05 [ТС] | |
|
avgoor, ну просто для теста и для простоты. А так строки могут какие-угодно.
0
|
|
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 07.06.2016, 14:19 | ||
|
1
|
||
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
||||
| 13.06.2016, 14:29 [ТС] | ||||
std::string в int? Я всегда думал, что вариант со string будет быстрее чем int. ) И почему не будет ускорения?Добавлено через 2 минуты P.s. Ваш код отработал за 10 секунд. Поразительно!
0
|
||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||||||||
| 13.06.2016, 15:04 | ||||||||||
|
Т.е. работа при добавлении элемента std::unordered_set<int> при отсутствии балансировки (reserve был вызван) примерно следущая:
*(qi::char_ - qi::eol) - это соответствует любому количеству (любых символов за исключением переноса строки).![]() [quote="gromo;9266578"]И можете объяснить эту строчку? Что это за магическая константа и вообще хитро-вывернутый способ подсчета смещения? Эта магическая константа - это черная магия, которую лучше не использовать ![]() Суть в том, чтобы (n-1)-ый поток закончил рассчёт быстрее чем n-ый поток, и пока n-ый поток еще считает, основной поток может сливать данные от n-1 потока. Но если данных много, это даст не прирост а ухудшение производительности, поскольку данные у последнего потока будут самыми большими и мержить придется со всеми данными. Т.е. это скользкая дорожка в общем случае. А написал я эту скользкую дорожку, поскольку не успел остановить руки ![]()
1
|
||||||||||
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
| 13.06.2016, 15:17 [ТС] | |
|
Nosey, спасибо за разъяснения!
Немножко не по теме: стоит ли включать в работу главный поток наравне с рабочими? То есть делегировать часть работы главному потоку, а не оставлять его спать и ждать пока приджоинятся все "работяги"? Я считаю, что на современных системах это не критично и не принесет выигрыша в производительности, так как работают сотни потоков и десятки процессов, и то, что мы завели один лишний поток — сути дела не меняет.
0
|
|
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||
| 13.06.2016, 15:29 | ||
http://en.cppreference.com/w/c... ead/thread См. раздел "Exceptions".
1
|
||
| 13.06.2016, 15:29 | |
|
Реализация класса MyString. Стандартная библиотека, std::string, std::vector Передача функции указатель на элемент std::vector<std::string> Операция std::cout для Объекта типа std::string
Как правильно перевести std::wstring в std::string ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|