2013年8月22日木曜日

inline assembler コードをdisable した clang と inline assembler コードを enable した gcc4.2 のベンチマークテスト

freebsd-arm の ml で、security/libgcrypt をinline assembler コードをdisable した clang と inline assembler コードをenable した gcc4.2 ではどちらが速いのか、という話が出ていたのですが、どうも誰も実験してみないようなので、試しに実験してみました♪

security/libgcrypt は、make install した後の work の中に、なんとびっくり、テスト用のアプリがいろいろ入っているのです。しかも、そのものずばり、benchmark というアプリがあるので、これを使って実行結果を見てみることにしました。テストアプリの基本的な使い方は、好きなアプリを選んでファイルを実行するだけという、お手軽仕様。便利な世の中になったものですね〜。

ちなみに、うっかり clean しちゃうと work がなくなっちゃいますので、要注意です。

# cd /usr/ports/security/libgcrypt/work/libgcrypt-1.5.3/tests 
# ./benchmark > /path/to/home/benchmark.txt

ちなみに、テストに使用した RPI の uname -a は次の通りです。

FreeBSD raspberry-pi 10.0-CURRENT FreeBSD 10.0-CURRENT #0: Tue Aug 13 03:22:23 JST 2013 user@PC:/usr/home/user/crochet-freebsd/work/obj/arm.armv6/usr/src.arm/sys/RPI-B-ELY arm

clang の最適化機能は下手なアセンブラよりも上という噂も聞かないではないので、真面目な話どっちがどのくらい速いのかというのは非常に興味深いですよね。
さてさて、結果はいかに !?


USE_GCC=4.2 longling.h inline assmbler enable

MD5          234375ms 625000ms 3984375ms 546875ms 156250ms
SHA1         546875ms 781250ms 4218750ms 859375ms 468750ms
RIPEMD160    468750ms 859375ms 4140625ms 859375ms 468750ms
TIGER192     1093750ms 1484375ms 5156250ms 1328125ms 1171875ms
SHA256       781250ms 1484375ms 5000000ms 1171875ms 781250ms
SHA384       1953125ms 3046875ms 6250000ms 2265625ms 1875000ms
SHA512       1953125ms 3046875ms 6250000ms 2265625ms 1953125ms
SHA224       781250ms 1562500ms 5000000ms 1093750ms 937500ms
MD4          78125ms 468750ms 3750000ms 546875ms 234375ms
CRC32        234375ms 234375ms 4375000ms 468750ms 312500ms
CRC32RFC1510 234375ms 156250ms 4375000ms 468750ms 390625ms
CRC24RFC2440 1171875ms 1171875ms 5625000ms 1484375ms 1250000ms
WHIRLPOOL    6484375ms 6953125ms 14843750ms 6875000ms 6562500ms
TIGER        1093750ms 1562500ms 5156250ms 1328125ms 1015625ms
TIGER2       1015625ms 1484375ms 5156250ms 1406250ms 1171875ms

                ECB/Stream         CBC             CFB             OFB             CTR      
             --------------- --------------- --------------- --------------- ---------------
IDEA         3437500ms 3359375ms 3671875ms 3750000ms 3515625ms 3593750ms 3593750ms 3593750ms 5468750ms 5468750ms
3DES         7343750ms 7343750ms 7734375ms 7812500ms 7578125ms 7656250ms 7734375ms 7656250ms 9609375ms 9609375ms
CAST5        1796875ms 1875000ms 2031250ms 2109375ms 1953125ms 1953125ms 2031250ms 2031250ms 3906250ms 3828125ms
BLOWFISH     2187500ms 2109375ms 2421875ms 2421875ms 2343750ms 2265625ms 2421875ms 2343750ms 4218750ms 4296875ms
AES          1953125ms 1796875ms 1875000ms 1796875ms 1718750ms 1718750ms 2265625ms 2109375ms 1718750ms 1796875ms
AES192       2187500ms 2109375ms 2187500ms 2031250ms 2031250ms 2031250ms 2421875ms 2421875ms 2031250ms 2031250ms
AES256       2421875ms 2421875ms 2421875ms 2343750ms 2265625ms 2343750ms 2734375ms 2656250ms 2265625ms 2265625ms
TWOFISH      1562500ms 1640625ms 1718750ms 1875000ms 1718750ms 1640625ms 1796875ms 1718750ms 3515625ms 3515625ms
ARCFOUR      390625ms 468750ms
DES          2968750ms 3046875ms 3359375ms 3437500ms 3281250ms 3203125ms 3281250ms 3359375ms 5156250ms 5234375ms
TWOFISH128   1562500ms 1640625ms 1796875ms 1796875ms 1718750ms 1640625ms 1640625ms 1718750ms 3515625ms 3515625ms
SERPENT128   1875000ms 1796875ms 2109375ms 2109375ms 2031250ms 2031250ms 1953125ms 2109375ms 3828125ms 3828125ms
SERPENT192   1875000ms 1796875ms 2109375ms 2031250ms 2031250ms 2031250ms 2109375ms 2031250ms 3828125ms 3828125ms
SERPENT256   1875000ms 1796875ms 2109375ms 2031250ms 1953125ms 2031250ms 2031250ms 2109375ms 3828125ms 3828125ms
RFC2268_40   2578125ms 2031250ms 2812500ms 2421875ms 2656250ms 2734375ms 2656250ms 2734375ms 4609375ms 4609375ms
SEED         1875000ms 1875000ms 1953125ms 2187500ms 1953125ms 1953125ms 1953125ms 2109375ms 3828125ms 3828125ms
CAMELLIA128  3359375ms 3359375ms 3593750ms 3671875ms 3515625ms 3437500ms 3515625ms 3593750ms 5312500ms 5390625ms
CAMELLIA192  3828125ms 3828125ms 4062500ms 4140625ms 3984375ms 3984375ms 4062500ms 3984375ms 5859375ms 5703125ms
CAMELLIA256  3828125ms 3828125ms 4062500ms 4140625ms 3984375ms 3984375ms 4062500ms 4062500ms 5703125ms 5781250ms

Algorithm         generate  100*sign  100*verify
------------------------------------------------
RSA 1024 bit       8593750ms   78359375ms     2187500ms
RSA 2048 bit       45546875ms   418671875ms     5625000ms
RSA 3072 bit       1337109375ms   1147109375ms     10234375ms
RSA 4096 bit       881875000ms   2457812500ms     16640625ms
DSA 1024/160             -   37343750ms     40156250ms
DSA 2048/224             -   139531250ms     132343750ms
DSA 3072/256             -   299609375ms     275390625ms
ECDSA 192 bit      3437500ms   87734375ms     157812500ms
ECDSA 224 bit      4218750ms   107187500ms     192500000ms
ECDSA 256 bit      5078125ms   126328125ms     236875000ms
ECDSA 384 bit      10078125ms   253593750ms     478984375ms
ECDSA 521 bit      24062500ms   596796875ms     1134765625ms

powm       2890625ms 7812500ms 21250000ms

random     390625ms 468750ms

clang longling.h inline assmbler disable

MD5          234375ms 468750ms 3046875ms 468750ms 390625ms
SHA1         468750ms 703125ms 3359375ms 703125ms 390625ms
RIPEMD160    468750ms 703125ms 3281250ms 625000ms 390625ms
TIGER192     703125ms 1171875ms 3828125ms 1015625ms 625000ms
SHA256       781250ms 1328125ms 4062500ms 1015625ms 781250ms
SHA384       1328125ms 2187500ms 4687500ms 1562500ms 1328125ms
SHA512       1250000ms 2187500ms 4687500ms 1562500ms 1328125ms
SHA224       703125ms 1328125ms 4062500ms 937500ms 859375ms
MD4          156250ms 468750ms 2968750ms 468750ms 234375ms
CRC32        78125ms 156250ms 2578125ms 390625ms 234375ms
CRC32RFC1510 156250ms 156250ms 2500000ms 390625ms 312500ms
CRC24RFC2440 546875ms 546875ms 2890625ms 781250ms 703125ms
WHIRLPOOL    6015625ms 6406250ms 9296875ms 6328125ms 6093750ms
TIGER        781250ms 1093750ms 3906250ms 937500ms 859375ms
TIGER2       703125ms 1171875ms 3828125ms 937500ms 859375ms

                ECB/Stream         CBC             CFB             OFB             CTR      
             --------------- --------------- --------------- --------------- ---------------
IDEA         2187500ms 2109375ms 2421875ms 2500000ms 2343750ms 2187500ms 2265625ms 2343750ms 4062500ms 3984375ms
3DES         5000000ms 5000000ms 5234375ms 5312500ms 5156250ms 5156250ms 5234375ms 5234375ms 6875000ms 6953125ms
CAST5        1562500ms 1562500ms 1875000ms 2031250ms 1640625ms 1718750ms 1718750ms 1718750ms 3515625ms 3515625ms
BLOWFISH     1640625ms 1796875ms 2109375ms 2109375ms 1953125ms 1796875ms 1953125ms 1953125ms 3671875ms 3671875ms
AES          1406250ms 1406250ms 1250000ms 1250000ms 1250000ms 1250000ms 1562500ms 1640625ms 1250000ms 1250000ms
AES192       1640625ms 1484375ms 1484375ms 1406250ms 1406250ms 1406250ms 1796875ms 1875000ms 1406250ms 1484375ms
AES256       1796875ms 1718750ms 1718750ms 1562500ms 1640625ms 1640625ms 2031250ms 2031250ms 1640625ms 1640625ms
TWOFISH      1406250ms 1328125ms 1640625ms 1640625ms 1484375ms 1484375ms 1562500ms 1484375ms 3203125ms 3125000ms
ARCFOUR      468750ms 390625ms
DES          2265625ms 2265625ms 2500000ms 2656250ms 2343750ms 2421875ms 2421875ms 2500000ms 4140625ms 4140625ms
TWOFISH128   1328125ms 1406250ms 1562500ms 1640625ms 1484375ms 1562500ms 1484375ms 1640625ms 3125000ms 3125000ms
SERPENT128   1718750ms 1640625ms 1875000ms 1875000ms 1796875ms 1796875ms 1796875ms 1875000ms 3437500ms 3437500ms
SERPENT192   1562500ms 1562500ms 1875000ms 1875000ms 1796875ms 1796875ms 1796875ms 1953125ms 3437500ms 3437500ms
SERPENT256   1718750ms 1562500ms 1953125ms 1875000ms 1718750ms 1718750ms 1796875ms 1875000ms 3437500ms 3359375ms
RFC2268_40   1718750ms 2187500ms 2031250ms 2500000ms 1796875ms 1875000ms 1953125ms 1875000ms 3593750ms 3593750ms
SEED         1406250ms 1406250ms 1640625ms 1640625ms 1562500ms 1484375ms 1562500ms 1562500ms 3125000ms 3125000ms
CAMELLIA128  2812500ms 2734375ms 3125000ms 3125000ms 2890625ms 2890625ms 2890625ms 2890625ms 4531250ms 4609375ms
CAMELLIA192  3046875ms 3046875ms 3281250ms 3359375ms 3203125ms 3125000ms 3203125ms 3203125ms 4843750ms 4843750ms
CAMELLIA256  3125000ms 3046875ms 3359375ms 3359375ms 3046875ms 3203125ms 3203125ms 3281250ms 4843750ms 4765625ms

Algorithm         generate  100*sign  100*verify
------------------------------------------------
RSA 1024 bit       10000000ms   103359375ms     3125000ms
RSA 2048 bit       230468750ms   602031250ms     8437500ms
RSA 3072 bit       1168750000ms   1783750000ms     16640625ms
RSA 4096 bit       1171875000ms   3805000000ms     27109375ms
DSA 1024/160             -   50703125ms     53046875ms
DSA 2048/224             -   211640625ms     197968750ms
DSA 3072/256             -   489843750ms     439531250ms
ECDSA 192 bit      3515625ms   90390625ms     162968750ms
ECDSA 224 bit      4453125ms   111093750ms     207421875ms
ECDSA 256 bit      5468750ms   134062500ms     254296875ms
ECDSA 384 bit      11484375ms   281718750ms     528203125ms
ECDSA 521 bit      26640625ms   667500000ms     1300156250ms

powm       3671875ms 11015625ms 32031250ms

random     390625ms 234375ms

ちょっと、数値がいっぱい過ぎて、細かい検証はしてません。(爆

結局、longlong.h の使われ方にも左右されるのでしょうが、やっぱり、全体的に inline assembler enable な gcc の方が速いことが多い・・ように見えますね。これで、clang の方が速い!とかだったら、面白かったのにな〜。今はどうしても、asm コードが原因でビルドが通らないことが多いので、やっぱり、なんとか asm コードが通るようになってほしいものですね・・。

0 件のコメント:

コメントを投稿