IntelのHaswellアーキテクチャは、いくつかの新しい Bit Manipulation Instructions をサポートしています。インテル自身の言葉では、
ビット操作命令は、圧縮データベース、ハッシュ、多数の算術、およびさまざまな汎用コードに役立ちます。
Haswellプロセッサにある新しい命令は、現在使用中または保留中の暗号化関数の計算速度に違いをもたらしますか?
これらの操作のほとんどは「簡単」です。これらは、2つまたは3つの既存のオペコードの組み合わせを置き換えます。たとえば、BLSR
タイプの命令は、リンク先のページで指定されているように、減算の後にビットごとのAND
が続くことと同じです。これはすでに行われている可能性があります。余分な操作は害を及ぼさず、コンパイラーはそれらの恩恵を受け、疑いなく、一部の暗号化関数はこれらのオペコードのいくつかを使用して数サイクルを獲得しますが、期待する画期的な結果はありません。
命令の中で最も興味深いのは、1をカウントすることです(LZCNT
、TZCNT
)。これは、[〜#〜のレジスターの先頭または末尾のゼロの数をカウントするためです。 ] n [〜#〜]ビットには、「クラシック」オペコードを使用するとコストO(log N)がかかります。これらの演算は、大きな整数の計算のいくつかのコーナーケースで使用されます。特に、これは binary GCD に役立つと思います。これは、有限体の分割を計算するために使用されます。これは、楕円曲線の計算における重要なステップです。現時点では、有限体での除算は(乗算と比較して)非常にコストがかかるため、楕円曲線の計算に 射影座標 を使用する価値があります。これは、約10倍の演算を意味しますが、分割数が多いので、合計すると純利益になります。バイナリGCDの高速実装は、その状況を少し変えるかもしれません。カウント操作のその他の使用法については、 このWikipediaのページ を参照してください。
本当に物事を後押しするかもしれないものは、新しい命令ではなく、より大きなレジスタです。 AVX2は256ビットのレジスタを提供します。これは、SSE2がfour並列SHA-256を許可するのと同様に、eight並列SHA-256を計算するのに十分な余裕です。パスワード解読ソフトウェアはこれから利益を得ます...(GPUは間違いなく優れていますが)。与えられたハッシュ関数を並列処理の恩恵を受けるシステムに変えるためのツリーハッシュモードを定義するための進行中の作業があります。例えば この記事 を参照してください(Keccak、別名SHA-3、デザイナーから)。 NISTは、その点でいくつかの標準を定義する意志を表明しました。
もちろん、このようなCPUのメリットを活用するには、特定のシナリオが必要です。ハッシュ(または暗号化など)のほとんどの用途では、暗号化はボトルネックではありません。 I/Oです。ファイルをハッシュすると、ディスクから読み取るよりも速くハッシュすることはできません。
新しいMULX
命令は3つのオペランドを提供するため、少し役立つと思います。これにより、一部のMOV
sが排除され、タイトなループが高速化する場合があります。
次のIntelプロセッサBroadwellは、2つの独立したADCX
ループを有効にするADOX
およびADD
を提供します。これは特に暗号を念頭に置いて設計されています。 http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/large-integer-squaring-ia)を参照してください。 -paper.pdf
もちろん、これらすべてが画期的なことではありませんが、たとえば、ファクター2のスピードアップが得られる場合があります。