Skip to content

Fboemer/better move semantics

Fabian Boemer requested to merge fboemer/better-move-semantics into master
  • 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

Merge request reports