Hi Jeff, I am using an ARM64 cross compiler. I source into the sdk using:
*source /opt/fsl-imx-xwayland/5.10-hardknott/environment-setup-cortexa53-crypto-poky-linux* I compile it on x86 and the move it to the embedded machine for testing. This is the compiler command when I issue the make command : *aarch64-poky-linux-g++ -mcpu=cortex-a53 -march=armv8-a+crc+crypto -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/opt/fsl-imx-xwayland/5.10-hardknott/sysroots/cortexa53-crypto-poky-linux -O2 -pipe -g -feliminate-unused-debug-types -DCRYPTOPP_ARM_ACLE_AVAILABLE=0 -DCRYPTOPP_DISABLE_ASM -fPIC -pthread -pipe -c zlib.cpp* I am right now compiling the latest library and will let you know the results. Let me know if you see anything in the compiler flags. On Friday, May 12, 2023 at 9:37:50 AM UTC-4 Jeffrey Walton wrote: > On Fri, May 12, 2023 at 9:09 AM Dwight Kulkarni <dwi...@realtime-7.com> > wrote: > > > > See below benchmark test results: > > > > root@imx8mpevk:~/p2p_sockets# ./cryptest.exe b 2 1.8 > > [...] > > <TR><TD>AES/CTR (128-bit key)<TD>C++<TD>63<TD>27.3<TD>0.886<TD>1595 > > <TR><TD>AES/CTR (192-bit key)<TD>C++<TD>55<TD>31.3<TD>0.882<TD>1587 > > <TR><TD>AES/CTR (256-bit key)<TD>C++<TD>49<TD>35.2<TD>0.910<TD>1637 > > <TR><TD>AES/CBC (128-bit key)<TD>C++<TD>56<TD>30.4<TD>0.732<TD>1317 > > <TR><TD>AES/CBC (192-bit key)<TD>C++<TD>50<TD>34.4<TD>0.728<TD>1311 > > <TR><TD>AES/CBC (256-bit key)<TD>C++<TD>45<TD>38.3<TD>0.756<TD>1361 > > <TR><TD>AES/OFB (128-bit key)<TD>C++<TD>59<TD>29.0<TD>0.933<TD>1679 > > <TR><TD>AES/CFB (128-bit key)<TD>C++<TD>63<TD>27.1<TD>1.135<TD>2043 > > <TR><TD>AES/ECB (128-bit key)<TD>C++<TD>63<TD>27.4<TD>0.329<TD>592 > > [...] > > For completeness, AES/CFB is 27.1 cycles-per-byte (cpb). Cycles per > byte is what I am interested in when comparing benchmarks. The other > number you are probably interested in is 63, which is 63 > megabytes-per-second (MB/s). > > These numbers are software-only implementations. And the provider is > "C++", which is software only. > > Here is what an aarch64 machine looks like, from an early Pine64 board: > > <TR><TD>AES/CTR (128-bit key)<TD>ARMv8<TD>428<TD>2.67<TD>1.174<TD>1408 > <TR><TD>AES/CTR (192-bit key)<TD>ARMv8<TD>376<TD>3.05<TD>1.190<TD>1428 > <TR><TD>AES/CTR (256-bit key)<TD>ARMv8<TD>343<TD>3.33<TD>1.230<TD>1476 > <TR><TD>AES/CBC (128-bit key)<TD>ARMv8<TD>280<TD>4.08<TD>0.994<TD>1192 > <TR><TD>AES/CBC (192-bit key)<TD>ARMv8<TD>245<TD>4.67<TD>1.007<TD>1208 > <TR><TD>AES/CBC (256-bit key)<TD>ARMv8<TD>218<TD>5.26<TD>1.047<TD>1256 > <TR><TD>AES/XTS (256-bit key)<TD>ARMv8<TD>225<TD>5.09<TD>1.728<TD>2074 > <TR><TD>AES/XTS (384-bit key)<TD>ARMv8<TD>210<TD>5.46<TD>1.765<TD>2117 > <TR><TD>AES/XTS (512-bit key)<TD>ARMv8<TD>199<TD>5.76<TD>1.854<TD>2225 > <TR><TD>AES/OFB (128-bit key)<TD>ARMv8<TD>226<TD>5.06<TD>1.152<TD>1383 > <TR><TD>AES/CFB (128-bit key)<TD>ARMv8<TD>249<TD>4.60<TD>1.414<TD>1697 > <TR><TD>AES/ECB (128-bit key)<TD>ARMv8<TD>604<TD>1.90<TD>0.525<TD>630 > > AES/CFB is 4.6 cpb. The provider is "ARMv8." 249 is 249 MB/s. > > Modern aarch64 machines can usually get down to 2.5 cpb or so for CFB > mode. This is from a MacMini M1: > > <TR><TD>AES/CTR (128-bit key)<TD>ARMv8<TD>9316<TD>0.33<TD>0.109<TD>349 > <TR><TD>AES/CTR (192-bit key)<TD>ARMv8<TD>8194<TD>0.37<TD>0.117<TD>376 > <TR><TD>AES/CTR (256-bit key)<TD>ARMv8<TD>7303<TD>0.42<TD>0.129<TD>412 > <TR><TD>AES/CBC (128-bit key)<TD>ARMv8<TD>1083<TD>2.82<TD>0.097<TD>310 > <TR><TD>AES/CBC (192-bit key)<TD>ARMv8<TD>938<TD>3.25<TD>0.106<TD>339 > <TR><TD>AES/CBC (256-bit key)<TD>ARMv8<TD>834<TD>3.66<TD>0.118<TD>379 > <TR><TD>AES/XTS (256-bit key)<TD>ARMv8<TD>1807<TD>1.69<TD>0.181<TD>578 > <TR><TD>AES/XTS (384-bit key)<TD>ARMv8<TD>1768<TD>1.73<TD>0.203<TD>650 > <TR><TD>AES/XTS (512-bit key)<TD>ARMv8<TD>1712<TD>1.78<TD>0.227<TD>726 > <TR><TD>AES/OFB (128-bit key)<TD>ARMv8<TD>1133<TD>2.69<TD>0.106<TD>340 > <TR><TD>AES/CFB (128-bit key)<TD>ARMv8<TD>1121<TD>2.72<TD>0.117<TD>374 > <TR><TD>AES/ECB (128-bit key)<TD>ARMv8<TD>10883<TD>0.28<TD>0.072<TD>232 > > AES/CFB is running at 2.7 cpb. 1121 is 1.12 GB/s. > > There's something unusual about your setup. You will need to determine > why it is not providing ARMv8 acceleration, or why the library is not > picking it up. > > Since your benchmarks are missing AES/XTR results, I know you are > using an old version of the library. Maybe you should update to > Crypto++ 8.7 for starters. > > Jeff > > > On Thursday, May 11, 2023 at 5:30:26 PM UTC-4 Jeffrey Walton wrote: > >> > >> On Thu, May 11, 2023 at 4:24 PM Dwight Kulkarni <dwi...@realtime-7.com> > wrote: > >> > > >> > I created a 5 MB message and encrypted it. The message takes 3 > seconds to encrypt. I needed something around 200 ms, even if the > encryption is weaker. > >> > > >> > My code is below, should I be setting any flags when compiling the > library to make it fast ? > >> > > >> > Got message str at: 05/11/2023 20:21:31.346 > >> > in encrypt aes > >> > Encrypted at: 05/11/2023 20:21:33.027 > >> > > >> > message_bytes = encrypt_aes(message_bytes, key, iv); > >> > cout << " Encrypted at: " << get_curr_datetime_str() << endl; > >> > > >> > > >> > std::string encrypt_aes(std::string message, SecByteBlock key, > SecByteBlock iv) { > >> > try { > >> > cout <<" in encrypt aes " <<endl; > >> > AlgorithmParameters params = MakeParameters(Name::FeedbackSize(), > 1/*8-bits*/) > >> > (Name::IV(), ConstByteArrayParameter(iv)); > >> > CFB_Mode<AES>::Encryption e; > >> > std::string cipher; > >> > e.SetKey(key, key.size(), params); > >> > StringSource ss(message, true, new StreamTransformationFilter(e, new > StringSink(cipher))); > >> > cout << " returning cipher " << endl; > >> > return cipher; > >> > } > >> > catch (CryptoPP::Exception e) { > >> > std::cerr << e.what() << std::endl; > >> > return ""; > >> > } > >> > } > >> > >> You should probably avoid multiple resizes on cipher object. Add > something like: > >> > >> std::string cipher; > >> cipher.reserve(message.size()+16); > >> > >> Otherwise, please run the benchmarks and report back: > >> > >> cryptest.exe b2 3 <cpufreq in GHz> > >> > >> Also see https://cryptopp.com/wiki/Benchmarks . > -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/cryptopp-users/e1cd4b80-f0e2-465a-b76f-49fe4e8653dbn%40googlegroups.com.