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.
Вы можете написать один из них. Как человеческие хеши вы намерены делать здесь, чтобы это имело значение? – tadman
Код ссылки: http://www.intel.co.uk/content/dam/www/public/us/en/documents/white-papers/fast-sha512-implementations-ia-processors-paper.pdf - как далеко поскольку я вижу, что библиотека Ruby не делает этого, но если бы это было нужно попробовать, ее нужно было бы спроектировать для работы на ряде процессоров - было бы очень полезно добавить необходимые условные обозначения, детекторы для различные «уровни» SIMD доступны и т. д. –
Этот код, с которым вы связаны, не обязательно используется для реализации SHA в модуле 'digest'. Когда Ruby будет построен, он будет проверять OpenSSL (и CommonCrypto от Apple) и использовать одну из этих реализаций, если таковые имеются. – matt