Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonПод моим линуксом (Ubuntu на виртуалке VBox) В виртуалке такие вещи не надо тестить, там проблемы с дисковым IO. Я пишу в виртуалке, там все тормозит, тестю на хосте I7-6700К 4 ГГц, память 32 Гб DDR4, диск SSD. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2017, 21:07 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TЯ про это тоже думал. Как вариант кидать исключение при выводе статистики: Код: plaintext 1. в этот момент оценивать скорость обработки, и если она упала в несколько раз, значит начался своп, можно кидать исключение. Или просто ограничится x86 процессом где 2 Гб наше все. Мы никогда точно не сможем подобрать эту скорость. Она слишком кастомизирована. И зависит от активности пользователя. Может от чёто копирует там. Или стартовал какое-то тяжелое приложение. Антивирус проснулася.. Да мало ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2017, 21:58 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TТут проблема оценивать расход памяти в ходе расчета: std::string забирает доп. память для служебной инфы, контейнеры забирают под массивы хэшей/деревья и т.д. и т.п. Например мой код с unordered_set<string> на ripe.db (проект uniq-mem) съедает 4 Гб оперативки, хотя результат всего 1 Гб. Расход памяти никак не оценить изнутри, т.е. средствами языка. Можно конечно средства ОС вызывать, но это как-то не спортивно. Да. Я собственно ратую за кастомизацию приложения. Его надо будет "разлохматить" хотя-бы в два направления. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Без этой ветки мы далеко не уедем. Еще есть такой поинт. Если мы часто и много юзаем структуры с указателями. То исходник собранный под x86 красив и компактен и тоже самое с рантаймом. А если собираем под x64 то указатель пухнет до безобразия и теряем перформанс как следствие толстых структур данных которые не лезут в кеш и за счет естественной просадки производительности вызванной длинной арифметикой. Тоесть есть разумный поинт не пересекать границу 2G вообще. А если уж пересекать то так чтобы ... Эххх. Сразу в 8G или в 16G рвануть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2017, 22:05 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TВ виртуалке такие вещи не надо тестить, там проблемы с дисковым IO. Я пишу в виртуалке, там все тормозит, тестю на хосте I7-6700К 4 ГГц, память 32 Гб DDR4, диск SSD. 100% ты прав. Я там тестить не буду. На виртуал-боксе я смотрю какие есть фичи и возможности под современные линуксы. Своя рабочая станция под Linux для себе уже в обсуждении. Я пока жадничаю с конфигурацией и решаю что прикупить а что нет. Так-что... Coming soon ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 11:20 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonДа. Я собственно ратую за кастомизацию приложения. Его надо будет "разлохматить" хотя-бы в два направления. Поизучал варианты. Этот самый простой в реализации. Добавил mem_used.h С биткартой интересно получается: calloc() изначально реальную память не занимает, а только по мере использования. Т.е. на маленьком файле 100-200 строк биткарта забирает несколько Мб. maytonЕще есть такой поинт. Если мы часто и много юзаем структуры с указателями. То исходник собранный под x86 красив и компактен и тоже самое с рантаймом. А если собираем под x64 то указатель пухнет до безобразия и теряем перформанс как следствие толстых структур данных которые не лезут в кеш и за счет естественной просадки производительности вызванной длинной арифметикой. Тоесть есть разумный поинт не пересекать границу 2G вообще. А если уж пересекать то так чтобы ... Эххх. Сразу в 8G или в 16G рвануть. Есть такое: на ripe.db в x64 пик 857 Мб, а для x86 - 747 Мб. Если вычесть биткарту 512 Мб, то имеем 345/235 или в 1.47 раза больше памяти под x64. Но по времени: x64 - 26.9 сек, x86 - 32.9 сек. Не знаю почему так, то ли компилятор лучше заточен под x64, то ли проц. И такой момент обнаружился: на виртуалке (Win7) 3 Гб, 2 Гб свободно. На x86 исключение о нехватке памяти ожидаемо на 1.9 Гб, а на x64 исключение на 1.7 Гб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 12:40 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TПоизучал варианты. Этот самый простой в реализации. Добавил mem_used.h О. Спасибо. Как раз это я искал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 12:44 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Навел порядок в тестовых данных. Файлы попереименовывал в lst для удобства. Ввел счетчик поврежденных строк. Это те которые больше 64к. Как я и обещал мы их просто отбросим из эксперимента. Некоторые стат-показатели глюканули (где -1). Буду разбираться. Скорее всего я не учел что SHA1 имеют резкую гистограмму длин строк. Ну и кардинальность надо посчитать и вписать. NameFile LengthRowsDamaged RowsCardinalityAvg RLMedian RL75-perc RL97-perc RLMax RLc:\db\1.2billion\1.2billion.lst13 GB120677026301010121863c:\db\anti-spam\dom-bl-base.lst3 MB22800601616202867c:\db\anti-spam\dom-bl.lst13 KB77201616192733c:\db\anti-spam\from-bl.lst4 MB16811602828314071c:\db\CDDB\edit.lst4 GB438916800109112117118119c:\db\CDDB\edit_area.lst13 MB92867701314141415c:\db\CDDB\edit_artist.lst885 MB5370593701617171718c:\db\CDDB\edit_data.lst27 GB438906351045656428586298765502c:\db\CDDB\edit_event.lst3 MB23562201313131314c:\db\CDDB\edit_instrument.lst15 MB130516001111111112c:\db\CDDB\edit_label.lst32 MB210772801515161617c:\db\CDDB\edit_note.lst3 GB26856966215411417449051183c:\db\CDDB\edit_note_recipient.lst32 MB232297401314141516c:\db\CDDB\edit_place.lst11 MB81403301313131314c:\db\CDDB\edit_recording.lst906 MB5590619101615161617c:\db\CDDB\edit_release.lst365 MB2361387101515151516c:\db\CDDB\edit_release_group.lst256 MB1634517501515151516c:\db\CDDB\edit_series.lst1 MB11991801212121213c:\db\CDDB\edit_url.lst82 MB517968501515151516c:\db\CDDB\edit_work.lst109 MB648825601616161617c:\db\CDDB\md5.lst1 KB2304645495657c:\db\HashKiller\hashkiller-dict.lst1 GB8840540921129124155224c:\db\Linked-In\SHA1.lst240 MB6143150040-1-1-140c:\db\Psyc\AllMain_aA4_eE3_gG6_lL1_oO0__sS5_tT7.lst5 GB549682416099101431c:\db\Psyc\CommonPassword_aA4_eE3_bB8_gG6_lL1_oO0_zZ2_sS5_tT7.lst3 GB39085521308881115c:\db\Psyc\ComputerJargonLower+4PrefixWPA.lst1 GB8954436901212141935c:\db\Psyc\FamilyNamesLower+4PrefixWPA.lst1 GB13070572801011121521c:\db\Psyc\FemaleNamesLower+4PrefixWPA.lst1011 MB9527654801010111319c:\db\Psyc\JunkLower+4PrefixWPAFull.lst1 GB8693605301111131727c:\db\Psyc\MaleNamesLower+4PrefixWPA.lst662 MB633379650910111319c:\db\Psyc\md5.lst51 bytes1049-1-1-149c:\db\Psyc\MovieNamesLower+4PrefixWPAFull.lst161 MB1319800701112131620c:\db\ripe\ripe.lst5 GB1434106040373644828662 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 13:28 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Придумал как использовать разрешенное кол-во памяти. Сейчас переделаю, будет столько проходов, сколько память позволит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 15:02 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Вот может пригодится. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 17:56 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TЕсть такое: на ripe.db в x64 пик 857 Мб, а для x86 - 747 Мб. Если вычесть биткарту 512 Мб, то имеем 345/235 или в 1.47 раза больше памяти под x64. Еще волнует такой момент. А сколько битиков в обоих биткартах включено? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 18:00 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Закоммитил. Третий параметр сколько можно использовать памяти в Мб, по умолчанию поставил 1.5 Гб. Минимум 1 Гб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 18:45 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonDima TЕсть такое: на ripe.db в x64 пик 857 Мб, а для x86 - 747 Мб. Если вычесть биткарту 512 Мб, то имеем 345/235 или в 1.47 раза больше памяти под x64. Еще волнует такой момент. А сколько битиков в обоих биткартах включено? 26`424`906 битика. То что ты процитировал, там одна биткарта была. Для повторов map. В последней версии вернул вторую обратно. На ripe.db в итоге биткарта целиком вся в памяти оказывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 18:51 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
26 424 906 битиков на 4 млрд? Это получается.. 0,006. Физический вакуум. Это что мы так слабенько используем пространство? Мдя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 19:50 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
mayton26 424 906 битиков на 4 млрд? Это получается.. 0,006. Физический вакуум. Это что мы так слабенько используем пространство? Мдя... Смотря как считать: в виде std::set<std::string> результат занимает 4 Гб, т.е. в 8 раз больше чем биткарта. С другой стороны там всего 26`511`418 уникальных записей, т.е. почти все (99.67%) отловлены биткартой в первый проход. Потенциал биткарты не раскрыт этим маленьким файлом. Файлик с паспортами утерянными устанавливает 104`699`918 бит из 105`629`005 уникальных строк и проверяется в один проход. Тут заполняемость похуже 98.8%. Прогони свой файл на 1.2 млрд. записей, там коллизий много должно быть если все строки уникальные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 20:10 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TЗакоммитил. Третий параметр сколько можно использовать памяти в Мб, по умолчанию поставил 1.5 Гб. Минимум 1 Гб. Хм... после того как ты добавил win-функции я перестал успешно собирать твой исходник. Код: plaintext 1. 2. gcc version 6.3.0 (x86_64-win32-seh-rev1, Built by MinGW-W64 project) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 20:10 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TС другой стороны там всего 26`511`418 уникальных записей, т.е. почти все (99.67%) отловлены биткартой в первый проход. Потенциал биткарты не раскрыт этим маленьким файлом. Файлик с паспортами утерянными устанавливает 104`699`918 бит из 105`629`005 уникальных строк и проверяется в один проход. Тут заполняемость похуже 98.8%. Прогони свой файл на 1.2 млрд. записей, там коллизий много должно быть если все строки уникальные. Надо попробовать BloomFilter. Он более эффективно заполнит эту пустоту. И на размере сэкономить можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 20:15 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonDima TЗакоммитил. Третий параметр сколько можно использовать памяти в Мб, по умолчанию поставил 1.5 Гб. Минимум 1 Гб. Хм... после того как ты добавил win-функции я перестал успешно собирать твой исходник. Код: plaintext 1. 2. gcc version 6.3.0 (x86_64-win32-seh-rev1, Built by MinGW-W64 project) Я не знаю как с твоим MinGW-W64 бороться. У меня собирается в MSVC и в debian. Там так написано Код: plaintext 1. 2. 3. Залил скомпилированный uniq-crc.exe в zip-архиве. Пароль 12345 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 20:21 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonНадо попробовать BloomFilter. Он более эффективно заполнит эту пустоту. И на размере сэкономить можно. Это он и есть. Биткарта + хэш дают два ответа: 1. Точно уникально. 2. Возможно уникально или повтор. Пробовал уменьшать вдвое, ответы по п.1 резко уменьшились, почти вдвое. Правдам это было с CRC, а после смены хэш-функции не проверял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 20:30 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonНадо попробовать BloomFilter. Он более эффективно заполнит эту пустоту. И на размере сэкономить можно. Это он и есть. Биткарта + хэш дают два ответа: 1. Точно уникально. 2. Возможно уникально или повтор. Пробовал уменьшать вдвое, ответы по п.1 резко уменьшились, почти вдвое. Правдам это было с CRC, а после смены хэш-функции не проверял. Нет. У него метод похитрее. Для ключа активируются несколько бит. Хотя в общих чертах это да... биткарта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 20:32 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Затестил ripe.db с биткартой 128 Мб, т.е. хэш 31 бит: отфильтровалось уникальных 26`340`849 или 99.3%. Вывод: CRC32 как хэш не надо использовать. Но биткарту уменьшать смысла тоже нет, думаю наоборот надо увеличить, т.к. для огромных файлов, типа твоего 1.2 млрд. записей, чем больше тем лучше, т.к. коллизий будет меньше и перепроверять в итоге меньше. 1.2 млрд. уникальных записей это 25% моей биткарты, очень много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 20:43 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TЗалил скомпилированный uniq-crc.exe в zip-архиве. Пароль 12345 Он у тебя запустился? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 20:52 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonНет. У него метод похитрее. Для ключа активируются несколько бит. Хотя в общих чертах это да... биткарта. Почитал вики, действительно хитрее: он пустоты предлагает более эффективно использовать генеря несколько хэшей и если хоть один из них новый, то элемент уникальный. Завтра допилю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 21:03 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
Dima TDima TЗалил скомпилированный uniq-crc.exe в zip-архиве. Пароль 12345 Он у тебя запустился? Да. Бинарник работает отлично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 21:03 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonХм... после того как ты добавил win-функции я перестал успешно собирать твой исходник. Код: plaintext 1. 2. gcc version 6.3.0 (x86_64-win32-seh-rev1, Built by MinGW-W64 project) Посмотри psapi.h есть там объявление GetProcessMemoryInfo() ? Может он в какие-нибудь #if обернут, тогда может какой-то #define надо объявить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 07:14 |
|
||
|
Тяпничная унификация
|
|||
|---|---|---|---|
|
#18+
maytonНадо попробовать BloomFilter. Он более эффективно заполнит эту пустоту. И на размере сэкономить можно. С полноценным фильтром Блума ерунда получается. ВикиОбычно он используется для уменьшения числа запросов к несуществующим данным в структуре данных с более дорогостоящим доступом В нашем случае непонятно как это использовать. Например Строкаhash1()hash2()Результатqqq12Уникальноwww34Уникальноeee23Возможно повтор Как дальше определить что "eee" уникальная строка? Только сравнив со всеми уникальными ранее найденными, т.е. их все в память загрузить, а они туда не влазят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 18:11 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39518878&tid=2018073]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 275ms |
| total: | 566ms |

| 0 / 0 |
