CLMUL命令セット

キャリーレス乗算CLMUL)は、IntelAMDマイクロプロセッサで使用されるx86命令セットの拡張であり、2008年3月にIntelによって提案され[ 1 ] 、2010年初頭に発表されたIntel Westmereプロセッサで利用可能になりました。数学的には、この命令は 有限体 GF(2)上の多項式の乗算を実装します。ここで、ビット文字列は多項式を表します。CLMUL命令はまた、従来の命令セットよりも、密接に関連するより大きな有限体GF(2 k )の乗算をより効率的に実装することを可能にします。[ 2 ]0163{\displaystyle a_{0}a_{1}\ldots a_{63}}01×2×263×63{\displaystyle a_{0}+a_{1}X+a_{2}X^{2}+\cdots +a_{63}X^{63}}

これらの命令の用途の一つは、有限体GF(2 k )乗算に依存するガロア/カウンタモードのブロック暗号暗号化を行うアプリケーションの速度向上です。もう一つの用途はCRC値の高速計算です。 [ 3 ]これには、zlibおよびpngcrushにおけるLZ77スライディングウィンドウDEFLATEアルゴリズムの実装に使用されるものも含まれます。[ 4 ]

ARMv8 にも CLMUL のバージョンがあります。SPARC では、そのバージョンを「XOR 乗算」の略である XMULX と呼びます。

新しい命令

この命令は、2つの64ビット値の128ビットのキャリーレス積を計算します。デスティネーションは128ビットのXMMレジスタです。ソースは別のXMMレジスタまたはメモリです。即値オペランドは、128ビットオペランドのどの半分を乗算するかを指定します。 即値オペランドの特定の値を指定するニーモニックも定義されています

命令 オペコード 説明
PCLMULQDQ xmmreg,xmmrm,imm[rmi: 66 0f 3a 44 /r ib]有限体GF (2)[ X ] 上の2つの64ビット多項式のキャリーレス乗算を実行します
PCLMULLQLQDQ xmmreg,xmmrm[rm:  66 0f 3a 44 /r 00]2 つのレジスタの下位半分を乗算します。
PCLMULHQLQDQ xmmreg,xmmrm[rm:  66 0f 3a 44 /r 01]宛先レジスタの上位半分とソースレジスタの下位半分を乗算します。
PCLMULLQHQDQ xmmreg,xmmrm[rm:  66 0f 3a 44 /r 10]宛先レジスタの下位半分とソースレジスタの上位半分を乗算します。
PCLMULHQHQDQ xmmreg,xmmrm[rm:  66 0f 3a 44 /r 11]2 つのレジスタの上位半分を乗算します。

EVEX ベクトル化バージョン (VPCLMULQDQ) はAVX-512で見られます。

CLMUL命令セットを搭載したCPU

CLMUL 命令セットの存在は、CPU 機能ビットの 1 つをテストすることによって確認できます。

参照

参考文献

  1. ^ 「Intel Software Network」 . Intel. 2008年4月7日時点のオリジナルよりアーカイブ。2008年4月5日閲覧
  2. ^ Shay Gueron、Michael E. Kounavis (2014年4月20日). 「Intel Carry-Less Multiplication Instruction and its Usage for Computing the GCM Mode – Rev 2.02」(PDF) . Intel . 2019年8月6日時点のオリジナルよりアーカイブ。
  3. ^ 「PCLMULQDQ を使用した一般多項式の高速 CRC 計算」(PDF)
  4. ^ Vlad Krasnov (2015年7月8日). 「がんとの闘い:コードをオープンソース化することの予期せぬメリット」 . CloudFlare . 2016年9月4日閲覧
  5. ^ Johan De Gelas (2017年3月31日). 「Intel Xeon E5 v4レビュー:厳しいサーバーワークロードでのBroadwell-EPのテスト」 . Anandtech . p. 3. 2016年3月31日時点のオリジナルよりアーカイブ
  6. ^ 「ボブキャットに対するジャガーの改良点を詳述したスライド」 AMD、2012年8月29日。 2013年8月3日閲覧
  7. ^ Dave Christie (2009年5月6日). 「Striking a balance」 . AMD開発者ブログ. 2013年11月9日時点のオリジナルよりアーカイブ2011年3月11日閲覧。