LINUX.ORG.RU

Парсинг тяжелых txt-файлов на совпадения (средствами GPU)

 ,


0

1

Всем привет! У меня есть огромный файл1.txt (id;login;pass) на 5гб, и файл2.txt (id;pass) ещё больше по размеру, ~30ГБ Нужно из под винды каким-то образом запустить перебор, чтобы по порядку брался PASS из первого файла, и проверялся на совпадения из второго файла. При совпадении - записывался к примеру в файл result.txt в формате (id;login;pass), т.е. как в первом файле. Но фишка в том, что нужно чтобы перебор шел силами GPU, т.к. не хотелось бы нагружать i7 когда простаивают 2xGtX1080ti. Подскажите, как это можно написать, и возможен ли такой перебор в win, или обязательно нужен линукс?

У меня есть огромный файл1.txt (id;login;pass) на 5гб

В 2018 году 5 гиг свободно влезает в оперативку. И если задача разовая, то можно просто сделать хэшик pass -> [(login1, id1), ...] и профильтровать 30гигабайтный файл с паролями через этот хэшик хоть на питоне.

Более-менее GPU на эту задачу ложится для сортировки файлов ради последующего поиска пересечений за линейное время.

Я, конечно, не большой знаток cuda, но вроде как ветвления во все времена не были ее сильной стороной.

kawaii_neko ★★★ ()

GPGPU может делать только то, на что она рассчитана. не надо ее считать универсальным вовседырошно крутым вариантом CPU.

сильно ускорить можно подсчет хешей от паролей.остальное менее привязано к GPGPU.

а вот сравнение на GPGPU будет хитроопой задачей.

pfg ★★★ ()
Последнее исправление: pfg (всего исправлений: 1)

на процессоре будет быстрее

видеокарта будет по маленькому куску сравнивать(размер буферов в видеокарте очень мал) плюс буфер кэша нужен будет(котрый будет на CPU)...на процессоре быстрее будет

missxu ()

Не надо делать перебор второго файла для каждого значения из первого. Отсортируй оба файла и реши задачу за один проход.

Elyas ★★★★★ ()

На GPU полностью перевести сложно и не факт, что в данном случ. Но эту задачу можно попробовать решить при помощи какого-нибудь Spark.

Shtsh ★★★★ ()

есть огромный файл1.txt (id;login;pass) на 5гб, и файл2.txt (id;pass) ещё больше по размеру, ~30ГБ

Виртуалка, в которой эти огромные файлы влезут в оперативу стоит 35 центов в час. Это где-то 25 рублей.

ugoday ★★★★★ ()

Скорми свои таблички СУБД, и отдай хеширование, индексирование и прочую оптимизацию ей, что тебе надо называется inner join, в терминах SQL.

klokik ()
Ответ на: комментарий от missxu

Взгляд пал на GPU потому что видел, как с бюджетной картой подбирали пароль к wifi со скоростью 300к. штук в секунду, но это на линуксе. Решил что в моем случае это подойдет, хотя мне без разницы как, главное быстро. К примеру вот такой 5-ти гиговый файл чекнуть на совпадения во втором минут за 10.

mordegar ()
Ответ на: комментарий от mordegar

Взгляд пал на GPU потому что видел, как с бюджетной картой подбирали пароль к wifi со скоростью 300к. штук в секунду, но это на линуксе.

опять эти статьи для блондинок....

смотри как это работает:
1. изначально был «хеш пароля», тоесть по факту пароль не подбирался
подбор это когда пароль генерируют и шлют «на сервер приема» для проверки, так конечно не будет работать нигде
2. на видеокарте генерируют «хеши пачками» и сравнивают с изначальным хешем, как он подошел-значит то с чего сгенерировали и есть пароль
все

тоесть весь этот подбор пароля-генерация на видеокарте хешей и сравнение с ОДНИМ

у тебя задача-загрузить десятки гигабайт и сравнить с другой десяткой гигабайт-это будет невероятно медленно на видеокарте
твоя задача другого плана абсолютно

missxu ()
Ответ на: комментарий от missxu

Ааа.. ну ок, мне не принципиально чем сравнивать, можно и процессором, просто интересна скорость, если 5гб будут сравниваться сутки, то вся идея не имеет смысла. Уточно ещё момент, что за совпадение считается не только «строка 512=строка 512», но и «строка 512=строка 8273412» если такое совпадение существует, это важно.

mordegar ()
Ответ на: комментарий от mordegar

К примеру вот такой 5-ти гиговый файл чекнуть на совпадения во втором минут за 10.

загрузка 600мб на видеокарту=100мсек
+столькоже выгрузка(если нужно, в твоем примере с хешами даже выгрузка не нужна, нужен только один конечный результат)

так как у тебя данные разные-тебе их надо загружать на каждый расчет
кроме того тебе еще надо проверять каждое слово на совпадение всем в другом файле
это задача не для видеокарты ни с какой стороны

missxu ()

Для таких вещей реляционные СУБД придумали в прошлом тысячелетии. Это если всю жизнь такими поисками заниматься.

Перебор тебе не нужен, нужно 1 раз отсортировать 2 файла, и потом искать не перебором, а бинарным поиском. Да даже и не бинарным, а 1 раз просканировать пару отсортированных файлов.

anto215 ★★ ()
Ответ на: комментарий от missxu

у тебя задача-загрузить десятки гигабайт и сравнить с другой десяткой гигабайт-это будет невероятно медленно на видеокарте. твоя задача другого плана абсолютно

А мне вот непонятно, другая ли. Вот скажем, есть файл с хешами и файл с «простыми» паролями. Значить надо извлечь из первого файла все соли, потом брать их пачками по количеству GPU и по одному паролю из второго файла генерировать хеши по одному и тому же алгоритму, но с разными солями. Потому если задача именно такая, то тут GPU — идеально.

vodz ★★★★★ ()
Последнее исправление: vodz (всего исправлений: 3)