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ゲート数の比較
S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | 平均 | 備考 | |
sboxes.c(M.Kwan) | 63 | 56 | 57 | 42 | 62 | 57 | 57 | 54 | 56.0 | standard gate |
nonstd.c(M.Kwan) | 56 | 50 | 53 | 39 | 56 | 53 | 51 | 50 | 51.0 | non-standard gate |
best.c(M.Bevand) | 50 | 46 | 46 | 34 | 50 | 47 | 46 | 45 | 45.5 | SPU(Cell B.E.) |
sboxes-alti.c | 45 | 42 | 43 | 32 | 44 | 43 | 42 | 41 | 41.5 | AltiVec(PowerPC) |
sboxes-spu.c | 44 | 41 | 41 | 30 | 42 | 41 | 40 | 40 | 39.9 | SPU(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命令削減できるようにしました。
- PowerPC AltiVec VMX用
- Cell B.E. SPU(SPE)用
- AMD SSE5用
その他ご希望のライセンス形態が有ればこちらまで連絡下さい。
Enhanced Bitslice DESを利用しているソフトウェア
- VecTripper by tmkk氏
- AltiVec用のコアルーチンに当方の(sboxes-alti.c)を使用されています(2008年12月27日現在)
Keyword(s):
References:[FrontPage] [Bitslice DES]