2016-05-18 1 views
0

Процессоры Intel позволяют вычислять SHA512 быстрее из-за оптимизаций SIMD, которые у них есть. Я хочу воспользоваться этим в Ruby. Однако реализация SHA512 не использует SIMD https://github.com/ruby/ruby/blob/trunk/ext/digest/sha2/sha2.c?SHA512 и SIMD в Ruby

Есть ли способ унифицировать оптимизацию SIMD для расчета SHA512 в Ruby?

+1

Вы можете написать один из них. Как человеческие хеши вы намерены делать здесь, чтобы это имело значение? – tadman

+1

Код ссылки: http://www.intel.co.uk/content/dam/www/public/us/en/documents/white-papers/fast-sha512-implementations-ia-processors-paper.pdf - как далеко поскольку я вижу, что библиотека Ruby не делает этого, но если бы это было нужно попробовать, ее нужно было бы спроектировать для работы на ряде процессоров - было бы очень полезно добавить необходимые условные обозначения, детекторы для различные «уровни» SIMD доступны и т. д. –

+0

Этот код, с которым вы связаны, не обязательно используется для реализации SHA в модуле 'digest'. Когда Ruby будет построен, он будет проверять OpenSSL (и CommonCrypto от Apple) и использовать одну из этих реализаций, если таковые имеются. – matt

ответ

4

Intel опубликовала a paper on SIMD-accelerating SHA512, в ноябре 2012 года

Они говорят, что они получили ~ 8.59 циклов/байт для их версии AVX, на i7 SandyBridge 2600. Они не публикуют результаты своих AVX2/rorx (BMI2) версии, поскольку Haswell еще не был выпущен. Я не следил за ссылками на исходный код; предположительно это C с внутренними характеристиками.

Чтобы реализовать его в исходном коде Ruby, вам нужно обработать случай, когда ruby ​​работает на процессоре, который не поддерживает расширения набора инструкций, используемого вашей быстрой версией, и возвращается к простому C или SSE2 единственная версия.

Лучше всего использовать рубин OpenSSL или аналогичную библиотеку, чтобы получить настроенные вручную SHA-512 версии и многие другие функции. Crypto-библиотеки уже имеют настроенные для ASM версии для разных платформ.


С Skylake (и Goldmont), Intel представила new instructions to accelerate SHA-1 and SHA-256. К сожалению, я ничего не вижу в возможности использовать those instructions для SHA-512.

+0

'Ваша лучшая ставка может заключаться в том, чтобы использовать Ruby OpenSSL или подобную библиотеку? –

+0

@ Dimon У меня не было никаких конкретных альтернатив libopenssl, но быстрый google привел меня к [достойной статье] (http://www.interworx.com/community/reviewing-openssl-alternatives/), комментируя некоторые. [GNUtls - это другая основная криптографическая библиотека, о которой я слышал] (https://www.gnutls.org/manual/html_node/Cryptographic-API.html) с другой лицензией и API. 'gnutls_hash_fast' - это, вероятно, функция, которую вы хотите. –

+0

Это действительно должен быть принятый ответ. –

Смежные вопросы