FrontPage  Index  Search  Changes  PageRank  RSS  Login

Enhanced Bitslice DES

3入力論理演算をサポートする特化型Bitslice DES

3入力ビット論理演算命令を活用する

Matthew Kwan氏のコードはあくまで2入力の論理演算命令のみを用いたシーケンスですが、SIMD型の命令セットアーキテクチャの一部には、MUXあるいはSELBなどといわれる3入力のビット選択(3-source bitwise select)命令をサポートするものがあります。C言語風の式で表すと

D = (A & ~C) | (B & C);

となります。

MUX命令をサポートする命令セットアーキテクチャとしては、以下のものが挙げられます。

  • VMX/AltiVec(PowerPC; IBM/Freescale)
  • SSE5(AMD64; AMD)
  • NEON(ARMv7; ARM)
  • SPU ISA(Cell B.E. SPE; IBM/Sony/東芝)

2入力の論理演算を使って3〜4命令かかるものを1命令でできるわけだから、使わない手はありません。

Mark Bevand氏が先行してCell用の実装を作られていますが、 再帰で生成+総当たりで一番良いものを選択という手法自体はある程度汎用性があるので 色々応用が利くと思います。

当方は、MUX命令を使ったゲート数削減を、よりアグレッシブに行うことで、平均40ゲート未満(Cell B.E. SPU)を実現しました。 CellおよびAltiVec向けの実装では、Matthew Kwan氏のものと比較して全体で1〜2割程度の性能向上になるようです。

S-boxゲート数の比較

S1S2S3S4S5S6S7S8平均備考
sboxes.c(M.Kwan)635657426257575456.0standard gate
nonstd.c(M.Kwan)565053395653515051.0non-standard gate
best.c(M.Bevand)504646345047464545.5SPU(Cell B.E.)
sboxes-alti.c454243324443424141.5AltiVec(PowerPC)
sboxes-spu.c444141304241404039.9SPU(Cell B.E.)

ダウンロード

AltiVecおよびCell SPUに特化した最適化を行ったバージョンの配布を行っております。 GNU GPLとBSDスタイルのデュアルライセンスを適用します。

第4版 (2009.01.02更新)

AltiVec版とSPU版を別アーカイブに分離。

AltiVec版については、ジェネレータのアルゴリズムを変更することでS2関数を2ゲート削減。 SPU版については、コードを微調整し、S4関数に渡す第3引数をspu_xor→spu_eqvとしてやることで、a3をビット反転して渡してやるとx1 = a3となり、1命令削減できるようにしました。

その他ご希望のライセンス形態が有ればこちらまで連絡下さい

Enhanced Bitslice DESを利用しているソフトウェア

  • VecTripper by tmkk氏
    • AltiVec用のコアルーチンに当方の(sboxes-alti.c)を使用されています(2008年12月27日現在)
Last modified:2009/04/11 20:35:50
Keyword(s):
References:[FrontPage] [Bitslice DES]