【问题标题】:SHA512 and SIMD in RubyRuby 中的 SHA512 和 SIMD
【发布时间】:2016-05-19 15:44:20
【问题描述】:

英特尔处理器允许更快地计算 SHA512,因为它们具有 SIMD 优化。我想在 Ruby 中利用它。但是,SHA512 的实现不使用 SIMD https://github.com/ruby/ruby/blob/trunk/ext/digest/sha2/sha2.c 是吗?

有没有办法统一 SIMD 优化以在 Ruby 中计算 SHA512?

【问题讨论】:

  • 你可以用 C 写一个。你打算在这里做多少人哈希,这很重要?
  • 参考代码:intel.co.uk/content/dam/www/public/us/en/documents/white-papers/… - 据我所知,Ruby 库没有这样做,但如果要尝试这样做,则需要将其设计为在一系列处理器——为各种可用的 SIMD“级别”添加必要的条件、检测器等需要大量工作。
  • 保持文明的戴蒙。我在这里问一个合理的问题。如果你坚持要困难,我会问你一个简单的问题,堆栈溢出黄金法则:你尝试过什么
  • @Dimon:SIMD 有 5 个“级别”可用,具体取决于处理器:无、SSE、AVX、AVX-2 和 AVX-512。源文件只需要支持 2(其中之一是“无”)并在编译时在它们之间切换。但是仍然需要付出很多努力,您往往会发现只有专业的速度就是一切的库才能达到这种程度(例如 ffmpeg 就是这样做的)。我查看了 OpenSSL 的源代码,但那些开发人员选择对某些部分使用内联汇编 - 你可能想检查一下它的速度,这对你来说可能就足够了。
  • @NeilSlater:SSE 有几个级别。 SSE2 是 x86-64 的基线。无论如何,Intel SHA extensions 不是 AVX 或 AVX2 的一部分;它们有一个单独的功能位,例如 AES 加速指令。

标签: ruby simd sha512


【解决方案1】:

英特尔于 2012 年 11 月发布了a paper on SIMD-accelerating SHA512

他们说他们的 AVX 版本在 Sandybridge i7 2600 上获得了大约 8.59 个周期/字节。他们没有发布他们的 AVX2 / rorx (BMI2) 版本的结果,因为 Haswell 尚未发布。我没有点击源代码的链接;大概是带有内在函数的 C。

要在 Ruby 的源代码中实现它,您需要处理 ruby​​ 在不支持您的快速版本使用的指令集扩展的 CPU 上运行的情况,并回退到纯 C 或 SSE2-唯一的版本。

最好的办法可能是让 ruby​​ 使用 OpenSSL 或类似的库来获得手动调整的 SHA-512 版本和许多其他功能。加密库已经为许多不同平台提供了手动调整的 asm 版本。


英特尔通过 Skylake(和 Goldmont)推出了new instructions to accelerate SHA-1 and SHA-256。不幸的是,我看不到任何关于能够将 those instructions 用于 SHA-512 的信息。

【讨论】:

  • Your best bet might be to have ruby use OpenSSL or a similar library -- 例如?
  • @Dimon 我没有想到任何特定的 libopenssl 替代方案,但快速谷歌搜索让我找到了a decent article 对一些进行评论。 GNUtls is the other major crypto library I've heard of,具有不同的许可证和 API。 gnutls_hash_fast 可能是你想要的功能。
猜你喜欢
  • 2011-07-31
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2014-11-09
  • 1970-01-01
相关资源
最近更新 更多