Fboemer/better move semantics
- Fixes #250 (closed)
- Better use of move semantics => ~1-2% speedup in most CKKS benchmarks
- Note, the CKKS_MultNoRelin seems to be ~2% slower, but seems to result in similar speedups on the other benchmarks.
- Tested using gcc-9.
Before
CKKS_KeyGen 1212 us 1206 us 3488
CKKS_MultKeyGen 2082 us 2071 us 2013
CKKS_EvalAtIndexKeyGen 2111 us 2103 us 1996
CKKS_Encryption 1101 us 1098 us 3823
CKKS_Decryption 396 us 395 us 10630
CKKS_Add 21.8 us 21.7 us 196674
CKKS_MultNoRelin 92.3 us 92.2 us 45418
CKKS_MultRelin 1748 us 1746 us 2374
CKKS_Relin 1831 us 1830 us 2300
CKKS_Rescale 368 us 368 us 11378
CKKS_EvalAtIndex 1711 us 1710 us 2444
After
Benchmark Time CPU Iterations
-----------------------------------------------------------------
CKKS_KeyGen 1183 us 1181 us 3558
CKKS_MultKeyGen 2043 us 2041 us 2044
CKKS_EvalAtIndexKeyGen 2079 us 2077 us 2022
CKKS_Encryption 1098 us 1097 us 3832
CKKS_Decryption 398 us 396 us 10612
CKKS_Add 21.3 us 21.2 us 195368
CKKS_MultNoRelin 94.4 us 94.0 us 44513
CKKS_MultRelin 1731 us 1726 us 2431
CKKS_Relin 1808 us 1804 us 2329
CKKS_Rescale 365 us 364 us 11409
CKKS_EvalAtIndex 1682 us 1680 us 2518
- BFV is sped up as well:
Before:
BFVrns_KeyGen 1196 us 1194 us 3516
BFVrns_MultKeyGen 3881 us 3876 us 1082
BFVrns_EvalAtIndexKeyGen 3918 us 3914 us 1073
BFVrns_Encryption 1169 us 1168 us 3599
BFVrns_Decryption 208 us 208 us 20088
BFVrns_Add 16.8 us 16.8 us 255023
BFVrns_MultNoRelin 3506 us 3502 us 1196
BFVrns_MultRelin 5171 us 5134 us 816
BFVrns_EvalAtIndex 1625 us 1617 us 2599
After:
BFVrns_KeyGen 1185 us 1184 us 3548
BFVrns_MultKeyGen 3843 us 3839 us 1093
BFVrns_EvalAtIndexKeyGen 3874 us 3871 us 1086
BFVrns_Encryption 1171 us 1170 us 3586
BFVrns_Decryption 209 us 209 us 20125
BFVrns_Add 16.7 us 16.6 us 252695
BFVrns_MultNoRelin 3536 us 3516 us 1196
BFVrns_MultRelin 5166 us 5144 us 817
BFVrns_EvalAtIndex 1617 us 1613 us 2600
Edited by Fabian Boemer