powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная унификация
25 сообщений из 227, страница 7 из 10
Тяпничная унификация
    #39518672
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПод моим линуксом (Ubuntu на виртуалке VBox)
В виртуалке такие вещи не надо тестить, там проблемы с дисковым IO. Я пишу в виртуалке, там все тормозит, тестю на хосте I7-6700К 4 ГГц, память 32 Гб DDR4, диск SSD.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518680
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЯ про это тоже думал. Как вариант кидать исключение при выводе статистики:
Код: plaintext
1.
if ((cnt & 0xFFFFF) == 0) printf(...


в этот момент оценивать скорость обработки, и если она упала в несколько раз, значит начался своп, можно кидать исключение. Или просто ограничится x86 процессом где 2 Гб наше все.

Мы никогда точно не сможем подобрать эту скорость. Она слишком кастомизирована. И зависит
от активности пользователя. Может от чёто копирует там. Или стартовал какое-то тяжелое приложение.
Антивирус проснулася.. Да мало ли.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518681
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТут проблема оценивать расход памяти в ходе расчета: std::string забирает доп. память для служебной инфы, контейнеры забирают под массивы хэшей/деревья и т.д. и т.п. Например мой код с unordered_set<string> на ripe.db (проект uniq-mem) съедает 4 Гб оперативки, хотя результат всего 1 Гб.
Расход памяти никак не оценить изнутри, т.е. средствами языка. Можно конечно средства ОС вызывать, но это как-то не спортивно.
Да. Я собственно ратую за кастомизацию приложения. Его надо будет "разлохматить" хотя-бы в два направления.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int64_t getFreeMemory(){
     #ifdef __WIN32
       ....
     #elseif
         // Linux (RHEL/Ubuntu e.t.c)
          ....
     #endif
}


Без этой ветки мы далеко не уедем.

Еще есть такой поинт. Если мы часто и много юзаем структуры с указателями. То исходник собранный под x86
красив и компактен и тоже самое с рантаймом. А если собираем под x64 то указатель пухнет до безобразия
и теряем перформанс как следствие толстых структур данных которые не лезут в кеш и за счет естественной
просадки производительности вызванной длинной арифметикой. Тоесть есть разумный поинт не пересекать
границу 2G вообще.

А если уж пересекать то так чтобы ... Эххх. Сразу в 8G или в 16G рвануть.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518740
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ виртуалке такие вещи не надо тестить, там проблемы с дисковым IO. Я пишу в виртуалке, там все тормозит, тестю на хосте I7-6700К 4 ГГц, память 32 Гб DDR4, диск SSD.
100% ты прав. Я там тестить не буду. На виртуал-боксе я смотрю какие есть фичи и возможности
под современные линуксы. Своя рабочая станция под Linux для себе уже в обсуждении. Я пока
жадничаю с конфигурацией и решаю что прикупить а что нет. Так-что... Coming soon
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518751
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 Гб.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518752
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПоизучал варианты. Этот самый простой в реализации.
Добавил mem_used.h

О. Спасибо. Как раз это я искал.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518760
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навел порядок в тестовых данных. Файлы попереименовывал в 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
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518776
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придумал как использовать разрешенное кол-во памяти. Сейчас переделаю, будет столько проходов, сколько память позволит.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518826
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот может пригодится.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int64_t getFreeMemory() {
     #ifdef WIN32
          MEMORYSTATUSEX statex;
          statex.dwLength = sizeof (statex);
          GlobalMemoryStatusEx(&statex);
          return statex.ullAvailPhys;
     #else
     ....
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518827
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕсть такое: на ripe.db в x64 пик 857 Мб, а для x86 - 747 Мб. Если вычесть биткарту 512 Мб, то имеем 345/235 или в 1.47 раза больше памяти под x64.
Еще волнует такой момент. А сколько битиков в обоих биткартах включено?
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518842
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закоммитил. Третий параметр сколько можно использовать памяти в Мб, по умолчанию поставил 1.5 Гб. Минимум 1 Гб.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518848
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TЕсть такое: на ripe.db в x64 пик 857 Мб, а для x86 - 747 Мб. Если вычесть биткарту 512 Мб, то имеем 345/235 или в 1.47 раза больше памяти под x64.
Еще волнует такой момент. А сколько битиков в обоих биткартах включено?
26`424`906 битика. То что ты процитировал, там одна биткарта была. Для повторов map. В последней версии вернул вторую обратно.
На ripe.db в итоге биткарта целиком вся в памяти оказывается.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518860
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
26 424 906 битиков на 4 млрд? Это получается.. 0,006. Физический вакуум. Это что мы так слабенько
используем пространство? Мдя...
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518866
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 млрд. записей, там коллизий много должно быть если все строки уникальные.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518867
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЗакоммитил. Третий параметр сколько можно использовать памяти в Мб, по умолчанию поставил 1.5 Гб. Минимум 1 Гб.
Хм... после того как ты добавил win-функции я перестал успешно собирать твой исходник.
Код: plaintext
1.
2.
c:\tmp\ccwjaIPM.o:uniq-crc.cpp:(.text+0x347): undefined reference to `GetProcessMemoryInfo'
collect2.exe: error: ld returned 1 exit status


gcc version 6.3.0 (x86_64-win32-seh-rev1, Built by MinGW-W64 project)
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518870
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TС другой стороны там всего 26`511`418 уникальных записей, т.е. почти все (99.67%) отловлены биткартой в первый проход. Потенциал биткарты не раскрыт этим маленьким файлом. Файлик с паспортами утерянными устанавливает 104`699`918 бит из 105`629`005 уникальных строк и проверяется в один проход. Тут заполняемость похуже 98.8%. Прогони свой файл на 1.2 млрд. записей, там коллизий много должно быть если все строки уникальные.
Надо попробовать BloomFilter. Он более эффективно заполнит эту пустоту. И на размере сэкономить можно.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518873
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TЗакоммитил. Третий параметр сколько можно использовать памяти в Мб, по умолчанию поставил 1.5 Гб. Минимум 1 Гб.
Хм... после того как ты добавил win-функции я перестал успешно собирать твой исходник.
Код: plaintext
1.
2.
c:\tmp\ccwjaIPM.o:uniq-crc.cpp:(.text+0x347): undefined reference to `GetProcessMemoryInfo'
collect2.exe: error: ld returned 1 exit status


gcc version 6.3.0 (x86_64-win32-seh-rev1, Built by MinGW-W64 project)
Я не знаю как с твоим MinGW-W64 бороться. У меня собирается в MSVC и в debian. Там так написано
Код: plaintext
1.
2.
3.
#if defined(_WIN32) || defined(_WIN64)
...
if(GetProcessMemoryInfo(...


Залил скомпилированный uniq-crc.exe в zip-архиве. Пароль 12345
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518878
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНадо попробовать BloomFilter. Он более эффективно заполнит эту пустоту. И на размере сэкономить можно.
Это он и есть. Биткарта + хэш дают два ответа:
1. Точно уникально.
2. Возможно уникально или повтор.

Пробовал уменьшать вдвое, ответы по п.1 резко уменьшились, почти вдвое. Правдам это было с CRC, а после смены хэш-функции не проверял.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518880
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonНадо попробовать BloomFilter. Он более эффективно заполнит эту пустоту. И на размере сэкономить можно.
Это он и есть. Биткарта + хэш дают два ответа:
1. Точно уникально.
2. Возможно уникально или повтор.

Пробовал уменьшать вдвое, ответы по п.1 резко уменьшились, почти вдвое. Правдам это было с CRC, а после смены хэш-функции не проверял.
Нет. У него метод похитрее. Для ключа активируются несколько бит. Хотя в общих чертах это да... биткарта.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518884
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затестил ripe.db с биткартой 128 Мб, т.е. хэш 31 бит: отфильтровалось уникальных 26`340`849 или 99.3%. Вывод: CRC32 как хэш не надо использовать.
Но биткарту уменьшать смысла тоже нет, думаю наоборот надо увеличить, т.к. для огромных файлов, типа твоего 1.2 млрд. записей, чем больше тем лучше, т.к. коллизий будет меньше и перепроверять в итоге меньше.
1.2 млрд. уникальных записей это 25% моей биткарты, очень много.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518885
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЗалил скомпилированный uniq-crc.exe в zip-архиве. Пароль 12345
Он у тебя запустился?
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518887
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНет. У него метод похитрее. Для ключа активируются несколько бит. Хотя в общих чертах это да... биткарта.
Почитал вики, действительно хитрее: он пустоты предлагает более эффективно использовать генеря несколько хэшей и если хоть один из них новый, то элемент уникальный. Завтра допилю :)
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518888
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TDima TЗалил скомпилированный uniq-crc.exe в zip-архиве. Пароль 12345
Он у тебя запустился?
Да. Бинарник работает отлично.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39518964
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonХм... после того как ты добавил win-функции я перестал успешно собирать твой исходник.
Код: plaintext
1.
2.
c:\tmp\ccwjaIPM.o:uniq-crc.cpp:(.text+0x347): undefined reference to `GetProcessMemoryInfo'
collect2.exe: error: ld returned 1 exit status


gcc version 6.3.0 (x86_64-win32-seh-rev1, Built by MinGW-W64 project)
Посмотри psapi.h есть там объявление GetProcessMemoryInfo() ?
Может он в какие-нибудь #if обернут, тогда может какой-то #define надо объявить.
...
Рейтинг: 0 / 0
Тяпничная унификация
    #39519416
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНадо попробовать BloomFilter. Он более эффективно заполнит эту пустоту. И на размере сэкономить можно.
С полноценным фильтром Блума ерунда получается.
ВикиОбычно он используется для уменьшения числа запросов к несуществующим данным в структуре данных с более дорогостоящим доступом
В нашем случае непонятно как это использовать.

Например
Строкаhash1()hash2()Результатqqq12Уникальноwww34Уникальноeee23Возможно повтор
Как дальше определить что "eee" уникальная строка? Только сравнив со всеми уникальными ранее найденными, т.е. их все в память загрузить, а они туда не влазят.
...
Рейтинг: 0 / 0
25 сообщений из 227, страница 7 из 10
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная унификация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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