Быстрое внедрение MD5 в C ++ - PullRequest
5 голосов
/ 19 ноября 2011

Прежде всего, для ясности, я знаю, что в C ++ существует огромное количество реализаций MD5.Проблема в том, что мне интересно, если есть сравнение, какая реализация быстрее, чем другие.Поскольку я использую эту хэш-функцию MD5 для файлов размером более 10 ГБ, скорость действительно является серьезной проблемой.

Ответы [ 4 ]

8 голосов
/ 19 ноября 2011

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

Если вы делаете что-то особенное (например, 1000 раундов), это может отличаться, но если вы просто вычисляете хеш файла. Вам нужно ускорить ввод-вывод, а не математику.

3 голосов
/ 19 ноября 2011

Я не думаю, что это имеет большое значение (на одном и том же оборудовании; но на самом деле GPGPU - это другое, и, возможно, более быстрое оборудование для такого рода проблем).Основная часть md5 представляет собой довольно сложный цикл сложных арифметических операций.Что важно, так это качество оптимизации компилятора.

И что также важно, так это то, как вы читаете файл.В Linux mmap и madvise и readahead могут иметь значение.Скорость диска, вероятно, является узким местом (используйте SSD, если можете).

И вы уверены, что хотите именно md5?Существуют более простые и быстрые алгоритмы хеширования (md4 и т. Д.).Тем не менее, ваша проблема больше связана с вводом / выводом, чем с процессором.

2 голосов
/ 19 ноября 2011

Я уверен, что существует множество CUDA / OpenCL-адаптаций алгоритма, которые должны дать вам определенное ускорение. Вы также можете взять базовый алгоритм и немного подумать -> начать реализацию CUDA / OpenCL.

Блочные шифры являются идеальными кандидатами для реализации этого типа.

Вы также можете получить его реализацию на C, взять копию компилятора Intel C и посмотреть, насколько это хорошо. Расширения векторизации в процессорах Intel поразительны для повышения скорости.

1 голос
/ 19 ноября 2011
Таблица

доступна здесь:

http://www.golubev.com/gpuest.htm

похоже, что, вероятно, узким местом будет ваш жесткий диск IO

...