Можно ли разбить md5 на несколько ядер / потоков?

При вычислении суммы больших файлов md5, я вижу, как одно ядро процессора подскочит до 100% за столько времени, сколько все остальные ядра простаивают.

Мое элементарное понимание md5 состоит в том, что весь процесс является полностью линейным, где значения зависят от всех прочитанных предыдущих значений, и мы ничего не можем сделать, чтобы сделать его многопоточным. Это правда?

Или есть способ разбить файлы на разделы, рассчитать<something> над несколькими частями, используя многоядерные, а затем объединить те<something> значения в финал md5?

Библиотека, которую мы используем для вычисления md5sum:http://libmd5-rfc.sourceforge.net/ но я бы переключился на другой, если бы можно было разбить сумму md5 на несколько ядер, чтобы она выполнялась быстрее.

(Примечание: переход на что-то отличное от md5 не является вопросом, и при этом это не может быть сделано из-за других закрытых систем, с которыми это взаимодействует. Также это не вопрос безопасности использования md5.)

 greg23 мая 2012 г., 21:32
@JerryCoffin Я думаю, что эта статья немного вводит в заблуждение. Я понял, что они распараллеливали несколько итераций MD5 для хеширования паролей, а не сам алгоритм MD5. Другая их оптимизация состояла в том, чтобы использовать один большой 128-битный регистр SSE вместо 4 32-битных регистров.
 jthill23 мая 2012 г., 22:00
конвейерная обработка также распараллеливание. MD5 выполняет 64 раунда, и эти раунды могут быть конвейерными. Это то, что они сделали.
 Ben23 мая 2012 г., 21:22
+1 за вашу "заметку". Хотя тот факт, что вы знаете о проблемах, подразумевает, что, возможно, вам следует подумать о том, чтобы что-то с ними сделать ...
 Jerry Coffin23 мая 2012 г., 21:19
Вы гуглили за это? Один из первых хитов для «параллельной реализации MD5» является:wwwcip.cs.fau.de/~spjsschl/md5.pdf, который, кажется, показывает, что короткий ответ - «Да, это возможно».
 billc.cn23 мая 2012 г., 21:35
Прочитайте эту статью, и в основном они ничего не сделали для многопоточных вычислений MD5 на одном входе. Их многопоточность предназначена только для одновременного вычисления нескольких хешей MD5, что будет полезно только для операции, если у него есть более одного большого файла для хеширования. Они подытожили это в разделе 3.2: «Поскольку между каждым шагом MD5 существует неснимаемая зависимость от данных, невозможно ускорить время выполнения одной итерации».

Ответы на вопрос(1)

Решение Вопроса

Нет, вы не можете разбить его на файловом уровне. MD5 поддерживает состояние при прохождении через данные.

Ваш ответ на вопрос