英特尔处理器允许更快地计算SHA512,因为它们具有SIMD优化功能。我想在Ruby中利用它。但是,SHA512的实现并没有使用SIMD https://github.com/ruby/ruby/blob/trunk/ext/digest/sha2/sha2.c吗?
有没有办法将SIMD优化单元化以计算Ruby中的SHA512?
答案 0 :(得分:4)
英特尔于2012年11月发布了a paper on SIMD-accelerating SHA512。
他们说他们的AVX版本在Sandybridge i7 2600上获得了大约8.59个周期/字节。他们没有发布他们的AVX2 / rorx
(BMI2)版本的结果,因为Haswell尚未发布。我没有按照源代码的链接;可能是内在的C语言。
要在Ruby的源代码中实现它,你需要处理在不支持快速版本使用的指令集扩展的CPU上运行ruby的情况,并回退到普通的C或SSE2-只有版本。
你最好的选择可能是让ruby使用OpenSSL 或类似的库来获得手动调整的SHA-512版本和许多其他功能。 Crypto库已经为许多不同的平台提供了手动调整的asm版本。
通过Skylake(和Goldmont),英特尔推出了new instructions to accelerate SHA-1 and SHA-256。不幸的是,我没有看到任何关于能够将those instructions用于SHA-512的信息。