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 件のコメント:
コメントを投稿