Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima T, Смотрите. Я готов добавить ещё одну графу мультипоточности в наши будущие бенчмарки.. Но будем ли мы все алгоритмы укомплектовывать этой опцией? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2017, 13:29 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonDima T, Смотрите. Я готов добавить ещё одну графу мультипоточности в наши будущие бенчмарки.. Но будем ли мы все алгоритмы укомплектовывать этой опцией? Сомневаюсь что все будут иметь многопоточный вариант. Думаю для тестов основным надо считать однопоточный вариант. Его и мерить. Если кто предложит дополнительно многопоточный - можно тоже померить. Доп.графы не надо, достаточно просто пометки MT в названии алгоритма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2017, 13:55 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Возникли мысли по поводу расхода памяти. Насколько мы рационально используем пространство? Я вспомнил свои эксперименты в студенчестве. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Я обратил внимание на то что в древовидных структурах наибольший оверхед занимают листовые вершины. Основное мясо листовых узлов - указатели. И я пытался переиспользовать пространство указателя. Для коротких строк (меньше 31 символов) я переиспользовал место указателя. Я также заметил что у нас есть файлы типа passport. И у них весьма резкая гистограмма длины. 11 символов на каждый элемент. Это можно использовать. Я не просто так мерял 97-й перцентиль. Эта величина должна помочь в выяснении закономерностей. Может кто-то и придумает регулярную структуру данных. Не такую общую как unordered_map. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2017, 22:04 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Итак, без оптимизаций тайминги на паспортах такие (~3GHz): (да, там нет повторов - совсем забыл, что отключал инкремент позиции при чтении файла) - загрузка и заполнение структуры (много реаллоков - буду тюнить) ~40c; - отсеивание дублей по второму 32 битному хешу ~10c; - память 2,5GB много/мало - как у вас? ) Насколько мы рационально используем пространство?да, думаю над своим аллокатором под эту задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2017, 23:37 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Бенчмарки буду гнать на всей коллекций файлов. Не только на паспортах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2017, 23:42 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
mayton, хорошо!, только у мну те что есть, отличаются от табличных ) Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2017, 00:16 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Bred eFeMИтак, без оптимизаций тайминги на паспортах такие (~3GHz): (да, там нет повторов - совсем забыл, что отключал инкремент позиции при чтении файла) - загрузка и заполнение структуры (много реаллоков - буду тюнить) ~40c; - отсеивание дублей по второму 32 битному хешу ~10c; - память 2,5GB много/мало - как у вас? ) Для паспортов мне 600 Мб требуется. Выше обсуждали что в процессе надо контролировать расход памяти, в итоге остановились на опросе ОС занимаемой процессом памяти mem_used.h Т.к. теоретически может попасться такой файл что съест всю память. Тогда или прога свопиться начнет или ОС перестанет выделять память для твоего процесса, т.е. вылет с исключением std::bad_alloc. PS У mayton`а есть супер-файлик 20783786 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2017, 08:08 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Bred eFeM, ripe.db возможно обновляется. Поэтому данные и будут отличаться. Это норм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2017, 08:43 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TPS У mayton`а есть супер-файлик 20783786 Кстати я-бы проверил в сколько максимальное количество buckets может работать стандартная реализация std::*_map. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2017, 09:01 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonDima TPS У mayton`а есть супер-файлик 20783786 Кстати я-бы проверил в сколько максимальное количество buckets может работать стандартная реализация std::*_map. Нам хватит Код: plaintext 1. 2. 3. http://www.cplusplus.com/reference/unordered_map/unordered_map/max_size/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2017, 09:12 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
есть супер-файлик 20783786 щёлоч в профиле, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2017, 12:34 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima T Код: plaintext 1. Отлично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2017, 21:17 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Несколько мыслей. По поводу хеш-таблиц. Есть у меня мнение что они не оптимальны для нашей задачи. Например, взять паспорта. У них - ограниченная длина. 11 символов. Мы для решения в Naive Hash-Table аллоцируем 1 объект std::string. И ясен пень - это не на стеке. Это в динамической памяти процесса. Сколько там будет аллоцировано? ХЗ. Platform dependent. Я очень верю в С++ и его способности хорошо "закатывать" шаблонизированный код в эффективный бинарный. Но что можно сказать об аллокации памяти? Может мы укрупним единицу аллокации? Пускай там лежит пара строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2017, 21:40 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
По поводу тех справочников и выгрузок где есть ярко выраженный префиксный порядок. Ох... я чувствую что иду по неверному пути Паниковского Базиста. Но я думаю о том чтобы прогрузить их в RadixTree/RTrie, и прочик Ахо-Корасики. Хотя-б для начала замерять потребляемую память. Маловероятно что это "стрельнет" для всех видов наших данных. Но у нас есть хорошие выгрузки где префикс просто сам по себе напрашивается. Кстати идею с префиксом можно расширить и на хеш-таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2017, 21:44 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonМожет мы укрупним единицу аллокации? Пускай там лежит пара строк. ИМХО Так мы до самодельного архиватора дойдем :) Нашел еще одно тормозное место: fwrite(). Заменил на блочную запись ( block_write.h ), стало чуть быстрее: паспорта были 18 сек. стали 14 сек. Пытаюсь многопоточный вариант сделать на акторах. Обнаружилась проблема: при чтении быстрее обработки память занимает очередь из прочитанного, но необработанного. Тупо все в очереди ставить - не вариант. Параллелить можно не только чтение, так тут не особо запараллелишь. Запараллелил расчет хэшей, т.к. без разницы в каком порядке прочитанные блоки на последующую обработку попадут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2017, 19:13 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonМожет мы укрупним единицу аллокации? Пускай там лежит пара строк. ИМХО Так мы до самодельного архиватора дойдем :) Размышляю над архиватором, возможно оно может пригодится для получения хэша: строим словарь, общий для всего множества, и далее начало пожатой строки используем как хэш. Например паспорт скорее всего целиком в 32 бита поместится после сжатия: 105 млн. строк в 344 Мб, т.е. ~3.3 байта на строку. С ripe.db статистика похуже: 180 Мб (пожал только уникальные) для 30 млн. строк, т.е. 6 байт на строку. Кроме того можно сжатыми строками оперировать, например во временные файлы их писать. Текст жмется в 4-6 раз. Правда тут есть большой минус в том что первый проход надо будет делать для построения словаря. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 10:02 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TDima Tпропущено... ИМХО Так мы до самодельного архиватора дойдем :) Размышляю над архиватором, возможно оно может пригодится для получения хэша: строим словарь, общий для всего множества, и далее начало пожатой строки используем как хэш. Например паспорт скорее всего целиком в 32 бита поместится после сжатия: 105 млн. строк в 344 Мб, т.е. ~3.3 байта на строку. С ripe.db статистика похуже: 180 Мб (пожал только уникальные) для 30 млн. строк, т.е. 6 байт на строку. Кроме того можно сжатыми строками оперировать, например во временные файлы их писать. Текст жмется в 4-6 раз. Правда тут есть большой минус в том что первый проход надо будет делать для построения словаря. Ого. Я конечно плюсовал за глубокий анализ данных. Но архивация ... Скушает у нас производительность. Имхо. Паспорта конечно можно перевести в целые числа. Но как такой метод потом включать в общий поток тестирования? Непонятно. Или будет отдельно бранч узких алгоритмов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 19:16 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Написал многопоточный вариант, правда не полноценный, а только однопроходную часть, алгоритм тот же, но с акторами :) Сделал чтение блоками 256 Kб, запараллелил разбор блока на строки и расчет хэшей строк, остальное как было. Исходники завтра покажу, после причесывания. Результаты такие (оба варианта работали в одинаковом режиме, т.е. в один проход чтения файла) I7-6700K, DDR4, 4 ядра без HT, 4 потока: ФайлОднопоточноМногопоточнопаспорта (1.2 Гб)12.9 сек.4.1 сек.ripe.db (5.2 Гб)24.4 сек.7.6 сек. I7-3770K, DDR3, 4 ядра c HT, 8 потоков ФайлОднопоточноМногопоточнопаспорта (1.2 Гб) 15.9 сек.5.6 сек.ripe.db (5.2 Гб) 27.9 сек.9.2 сек. PS Т.к. памяти у меня много и все там закэшировано, то максимальное чтение удалось выжать 2+ Гб/сек. Это просто чтение, разбор на строки, подсчет количества строк и контрольной суммы XOR(хэш строк). Полноценная работа 500 Мб/сек максимум, т.е IO ни при чем, есть куда тюнинговать алгоритм. PPS Амдал не дает больше чем в 3 раза ускориться :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 19:37 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima T, ого круть. Только я-бы протестировал "холодный" старт. Тоесть условия при которых файл еще ни разу не читался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2017, 21:44 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Холодный старт. Перезагрузка перед каждым замером. I7-3770K, DDR3, 4 ядра c HT, 8 потоков, SSD SATA3 (SanDisk SDSSDHII120G) ФайлОднопоточноМногопоточноПодсчет строкпаспорта (1.2 Гб) 17.7 сек. 6.1 сек.3.4 сек.ripe.db (5.2 Гб) 29.5 сек. 18.3 сек.15.0 сек. Третья колонка: просто чтение, разбор на строки, подсчет количества строк и контрольной суммы XOR(хэш строк). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2017, 07:28 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Залил исходник к себе в акторы uniq.cpp , как еще один пример использования акторов. Дублировать в местную репку? Он не полностью дублирует однопоточный вариант, не стал делать контроль за памятью и переключение на "план Б" с несколькими проходами когда памяти не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2017, 09:28 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Давай зальем. Будет больше направлений развития. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2017, 10:08 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Залил uniq-mt.cpp Бинарники тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2017, 16:41 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonВозникли мысли по поводу расхода памяти. Насколько мы рационально используем пространство? Я вспомнил свои эксперименты в студенчестве. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Я обратил внимание на то что в древовидных структурах наибольший оверхед занимают листовые вершины. Основное мясо листовых узлов - указатели. И я пытался переиспользовать пространство указателя. Для коротких строк (меньше 31 символов) я переиспользовал место указателя. Я также заметил что у нас есть файлы типа passport. И у них весьма резкая гистограмма длины. 11 символов на каждый элемент. Это можно использовать. Я не просто так мерял 97-й перцентиль. Эта величина должна помочь в выяснении закономерностей. Может кто-то и придумает регулярную структуру данных. Не такую общую как unordered_map. Я когда программировал на С++, лет 15 - 20 назад , на этой теме ускорил очередную версию приложения ( библиотеки) раз в 100, за счет оптимизации вызовов аллокации памяти для коротких строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2017, 03:19 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
UP. Приношу свои извенения за праздность и таймаут. Об этой задаче я не забыл. Я о ней помню. И думаю. Мои размышления о сравнении алгоритмов унесли меня в такую даль.... В нейронные сети. И тому подобное. Вобщем я страдал прокрастинацией и думал о шаге №2 (анализ результатов) и в уме построил отдельную задачу которая должна брать в анализ таблицу результатов и методом нечеткой логики выбирать нужный алгоритм автоматически исходя из признаков самого текстового файла. Где признаки - есть сэмпл. Выборка первых 100-1000 строк. И из-за этой прокрастинации а также из-за чортовых шахмат я провтыкал уже почти месяц. Но я не забыл. Я помню. Ждите.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2017, 18:46 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39525373&tid=2018073]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 285ms |

| 0 / 0 |
