On Saturday, July 29, 2017 at 1:32:32 AM UTC-4, Jeffrey Walton wrote: > > On Friday, July 28, 2017 at 9:30:36 PM UTC-4, Jeffrey Walton wrote: >> >> ... >> We are experiencing some pain points trying to support SSE4, AVX and BMI >> instruction sets under the compilations models we support. We experimented >> with a few different ways to move forward, and we think we found a good one >> that involves splitting source files. The test project is located at >> https://github.com/noloader/CRC-Test... >> > > Changes to the library were checked-in on my testing branch at > https://github.com/noloader/cryptopp/. The check-in of interest is > https://github.com/noloader/cryptopp/commit/fe9e21dd >
Things are progressing well. One gap that needed addressing was, the body for TryXXX (like TryCRC() or TrySHA()) needed to be moved to the xxx-simd.cpp file. Below is what a compile looks like on an Aarch64 (ARM-64) HiKey. Notice the makefile adds the appropriate flags in the right places. We still have some features to cut-over, like CLMUL and AES. Benchmarks are showing the applicable speedup, like in CRC and SHA. Jeff ********** $ ./cryptest.exe v Using seed: 1501436617 Testing Settings... passed: Your machine is little endian. passed: Aligned data access (no CRYPTOPP_ALLOW_UNALIGNED_DATA_ACCESS). passed: sizeof(byte) == 1 passed: sizeof(word16) == 2 passed: sizeof(word32) == 4 passed: sizeof(word64) == 8 passed: sizeof(hword) == 2, sizeof(word) == 4, sizeof(dword) == 8 passed: hasNEON == 1, hasPMULL == 0, hasCRC32 == 1, hasAES == 0, hasSHA1 == 1, hasSHA2 == 1 Testing operating system provided blocking random number generator... passed: it took 0 seconds to generate 16 bytes passed: 16 generated bytes compressed to 19 bytes by DEFLATE passed: GenerateWord32 and Crop ... ********** # Two second benchmark on HiKey @ 1.2 GHz. CRC runs about 0.8 cpb, and SHA runs about 4.0 cpb. $ ./cryptest.exe b 2 1.14441 ... <TBODY style="background: yellow;"> <TR><TH>CRC32<TD>1450<TD>0.8 <TR><TH>CRC32C<TD>1450<TD>0.8 <TR><TH>Adler32<TD>284<TD>3.8 <TR><TH>MD5<TD>164<TD>6.7 <TR><TH>SHA-1<TD>266<TD>4.1 <TR><TH>SHA-256<TD>269<TD>4.1 <TR><TH>SHA-512<TD>72<TD>15.1 <TR><TH>Keccak-224<TD>51<TD>21.2 <TR><TH>Keccak-256<TD>49<TD>22.4 <TR><TH>Keccak-384<TD>37<TD>29.2 <TR><TH>Keccak-512<TD>26<TD>41.9 ... ********** $ CXXFLAGS="-DNDEBUG -g2 -O3" make g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c cryptlib.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c cpu.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c integer.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c 3way.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c adler32.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c algebra.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c algparam.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c arc4.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -march=armv8-a -c aria-simd.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c aria.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c asn.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c authenc.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c base32.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c base64.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c basecode.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c bfinit.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -march=armv8-a -c blake2-simd.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c blake2.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c blowfish.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c blumshub.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c camellia.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c cast.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c casts.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c cbcmac.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c ccm.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c chacha.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c channels.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c cmac.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -march=armv8-a+crc -c crc-simd.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c crc.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c default.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c des.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c dessp.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c dh.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c dh2.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c dll.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c dsa.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c eax.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c ec2n.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c eccrypto.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c ecp.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c elgamal.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c emsa2.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c eprecomp.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c esign.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c files.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c filters.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c fips140.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c fipstest.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -march=armv8-a -c gcm-simd.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c gcm.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c gf256.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c gf2_32.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c gf2n.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c gfpcrypt.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c gost.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c gzip.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c hex.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c hmac.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c hrtimer.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c ida.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c idea.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c iterhash.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c kalyna.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c kalynatab.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c keccak.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c luc.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c mars.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c marss.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c md2.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c md4.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c md5.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c misc.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c modes.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c mqueue.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c mqv.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c nbtheory.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -march=armv8-a -c neon.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c network.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c oaep.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c ospstore.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c osrng.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c panama.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c pkcspad.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c poly1305.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c polynomi.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c pssr.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c pubkey.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c queue.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c rabin.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c randpool.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c rc2.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c rc5.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c rc6.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c rdrand.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c rdtables.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c rijndael.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c ripemd.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c rng.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c rsa.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c rw.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c safer.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c salsa.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c seal.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c seed.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c serpent.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -march=armv8-a+crypto -c sha-simd.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c sha.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c sha3.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c shacal2.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c shark.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c sharkbox.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c skipjack.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c socketft.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c sosemanuk.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c square.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c squaretb.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c strciphr.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c tea.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c tftables.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c threefish.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c tiger.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c tigertab.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c trdlocal.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c ttmac.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c twofish.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c vmac.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c wait.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c wake.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c whrlpool.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c xtr.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c xtrcrypt.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c zdeflate.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c zinflate.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c zlib.cpp ar r libcryptopp.a cryptlib.o cpu.o integer.o ... zdeflate.o zinflate.o zlib.o ranlib libcryptopp.a g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c adhoc.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c test.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c bench1.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c bench2.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c validat0.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c validat1.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c validat2.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c validat3.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c datatest.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c regtest1.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c regtest2.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c regtest3.cpp g++ -DNDEBUG -g2 -O3 -fPIC -pipe -c dlltest.cpp g++ -o cryptest.exe -DNDEBUG -g2 -O3 -fPIC -pipe adhoc.o test.o bench1.o bench2.o validat0.o validat1.o validat2.o validat3.o datatest.o regtest1.o regtest2.o regtest3.o dlltest.o fipsalgt.o ./libcryptopp.a -pthread -- -- You received this message because you are subscribed to the "Crypto++ Users" Google Group. To unsubscribe, send an email to cryptopp-users-unsubscr...@googlegroups.com. More information about Crypto++ and this group is available at http://www.cryptopp.com. --- You received this message because you are subscribed to the Google Groups "Crypto++ Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to cryptopp-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.