2016-05-18 8 views
0

Intelプロセッサでは、SIMAの最適化のためにSHA512を高速に計算できます。私はRubyでそれを利用したいと思っています。しかし、SHA512の実装はSIMD https://github.com/ruby/ruby/blob/trunk/ext/digest/sha2/sha2.cを使用していませんか?RubyのSHA512とSIMD

RubyでSHA512を計算するためにSIMD最適化を結合する方法はありますか?

+1

あなたはCで1つ書くことができます。どのように人間のハッシュはこれが重要かここでやろうとしていますか? – tadman

+1

参照コード:http://www.intel.co.uk/content/dam/www/public/us/en/documents/white-papers/fast-sha512-implementations-ia-processors-paper.pdf - as far私が見ることができるように、Rubyライブラリはそれをしませんが、これを試してみると、プロセッサの範囲で動作するように設計する必要があります。必要な条件、検出器を追加する作業がたくさんあります様々な "レベル"のSIMDが利用可能です。 –

+0

あなたがリンクしたコードは、必ずしも 'digest'モジュールのSHA実装には使用されません。 Rubyがビルドされると、OpenSSL(およびAppleのCommonCrypto)がチェックされ、利用可能であれば、それらの実装の1つが使用されます。 – matt

答えて

4

インテル彼らはSandybridge i7プロセッサー2600に彼らは彼らのAVX2/rorx(BMI2)の結果を公表していませんでした、彼らは彼らのAVXバージョンのための〜8.59サイクル/バイトを得たと言う11月2012年に、

a paper on SIMD-accelerating SHA512を発表Haswellはまだリリースされていないので、私はソースコードへのリンクをたどりませんでした。おそらくそれはintrinsicsのCです。

Rubyのソースコードで実装するには、高速版で使用する命令セット拡張をサポートしていないCPU上でrubyが実行されている場合を処理し、プレーンCまたはSSE2にフォールバックする必要がありますバージョンのみ。

あなたの最善の策は、ルビーは、SHA-512、および他の多くの機能の手で調整されたバージョンを取得するためにOpenSSLのまたは類似のライブラリを使用できるようにするにはあるかもしれません。暗号化ライブラリは、すでに多くの異なるプラットフォーム用に手作業でチューニングされたasmバージョンを持っています。 Skylakeマイクロアーキテクチャ(およびGoldmont)で


、インテルは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

これは本当に受け入れられる答えでなければなりません。 –