【发布时间】: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 加速指令。