разница между хешированием на x86 или x64 - PullRequest
2 голосов
/ 19 февраля 2011

Я хочу внедрить хеш-карту в свой код, поэтому я решил придерживаться murmurhash3

В настоящее время я поставляю только свои программы, скомпилированные для x86, и стараюсь, чтобы код был общимУ меня никогда не было проблем с запуском программ на x64.

Теперь я посмотрел заголовочные файлы murmurhash, и библиотека предлагает следующие функции:

MurmurHash3_x86_32
MurmurHash3_x86_64
MurmurHash3_x86_128

MurmurHash3_x64_32
MurmurHash3_x64_64 
MurmurHash3_x64_128 

Означает ли это, что у меня естьиспользовать функции x64 и предоставить исполняемый файл x64, чтобы иметь возможность использовать эту хэш-библиотеку в системах x64?Или я могу просто использовать версию x86 и столкнуться с более низкой производительностью?

Правильно ли я считаю, что _32 _64 _128-разрядные версии означают только то, что большее количество разрядных версий обеспечивает лучшее распространение?

Ответы [ 2 ]

5 голосов
/ 19 февраля 2011

Редактировать: все изменилось после просмотра документации murmurhash3 .

Во-первых, варианты _x86 являются переносимыми алгоритмами хэширования._32 / _64 / _128 указывает ширину хеша в битах.Как правило, с _32 должно быть все в порядке, если ваш хеш-алгоритм меньше 2 32 сегментов.

Варианты _x64 представляют собой совершенно другое семейство алгоритмов хеширования.Все варианты _x64 основаны на реализации _x64_128 - 128-битный хеш.Затем они отбрасывают часть хэша, чтобы получить размеры битов _32 и _64.Это может быть, а может и не быть быстрее, чем вариант _x86 - хотя документация требует значительных ускорений.Однако обратите внимание, что весьма вероятно, что хеш-значения будут отличаться от варианта x86.

0 голосов
/ 16 апреля 2018

x86 указывает, что алгоритм оптимизирован для 32-битных платформ.Это означает, что он работает с 32-разрядными целыми числами без знака.

x64 затем оптимизируется для 64-разрядных платформ и работает с 64-разрядными целыми числами без знака.

Кроме того,результаты между двумя несовместимы.Значения хеш-функции для одного и того же ввода будут различаться в зависимости, например, от MurmurHash3_x86_128 или MurmurHash3_x64_128.

Означает ли это, что я должен использовать функции x64 и предоставить исполняемый файл x64, чтобыв состоянии использовать эту хэш-библиотеку в системах x64?Или я могу просто использовать версию x86 и просто столкнуться с более низкой производительностью?

64-битные хеш-функции могут быть скомпилированы для 32-битных систем, но в итоге получатся довольно медленными, потому что компилятор разбивает вычисления надве части.Если важна 32-битная поддержка, вы должны использовать функцию, оптимизированную для x86, а не оптимизированную для x64.В системах x64 32-битный код работает нормально, хотя я бы посчитал это недостаточным использованием.x64-оптимизированные алгоритмы намного более эффективны, когда на 64-битных процессорах.

Правильно ли я считаю, что _32 _64 _128 битные версии означают только то, что более битные версии предлагают лучшее распространение?

Полагаю, ответ да .Если под распределением вы имеете в виду «вероятность возникновения коллизий меньше».Каждый дополнительный бит памяти, используемый в хэше, резко увеличивает количество возможных результатов.4-битный хэш имеет 16 возможных хэшей, а 64 обеспечивает 18 квинтиллионов (128 тогда дает 340,2 ундециллиона!).256 бит обеспечивают настолько много, что этого часто достаточно для криптографической защиты.


Что еще нужно знать: в последнее время современные хеш-функции используют новые наборы команд ЦП, такие как CRC32, AES, SSE2,SIMD - где функция использует преимущества определенных функций / инструкций ЦП для достижения лучшей производительности при поддерживаемом оборудовании.Это может значительно ускорить хэширование процессоров, поддерживающих эти современные функции.

...