44#include " ../include/tfhe++.hpp"
55#include " google-benchmark/include/benchmark/benchmark.h"
66
7- void BM_TRGSWenc (benchmark::State& state)
8- {
9- const std::unique_ptr<TFHEpp::SecretKey> sk (new TFHEpp::SecretKey ());
10- TFHEpp::TRGSWFFT<TFHEpp::lvl1param> res;
11- for (auto _ : state)
12- TFHEpp::trgswSymEncrypt<TFHEpp::lvl1param>(res, {},
13- TFHEpp::lvl1param::α,
14- sk->key .lvl1 );
15- }
16-
17- void BM_HomGate (benchmark::State& state)
18- {
19- std::random_device seed_gen;
20- std::default_random_engine engine (seed_gen ());
21- std::uniform_int_distribution<uint32_t > binary (0 , 1 );
22- const std::unique_ptr<TFHEpp::SecretKey> sk (new TFHEpp::SecretKey ());
23- TFHEpp::EvalKey ek;
24- ek.emplacebkfft <TFHEpp::lvl01param>(*sk);
25- ek.emplaceiksk <TFHEpp::lvl10param>(*sk);
26- TFHEpp::TLWE<TFHEpp::lvl0param> ca =
27- TFHEpp::tlweSymEncrypt<TFHEpp::lvl0param>(
28- binary (engine), TFHEpp::lvl0param::α, sk->key .lvl0 );
29- TFHEpp::TLWE<TFHEpp::lvl0param> cb =
30- TFHEpp::tlweSymEncrypt<TFHEpp::lvl0param>(
31- binary (engine), TFHEpp::lvl0param::α, sk->key .lvl0 );
32- TFHEpp::TLWE<TFHEpp::lvl0param> res;
33- for (auto _ : state) TFHEpp::HomNAND<TFHEpp::lvl0param>(res, ca, cb, ek);
34- }
35-
36- void BM_HomMUX (benchmark::State& state)
37- {
38- std::random_device seed_gen;
39- std::default_random_engine engine (seed_gen ());
40- std::uniform_int_distribution<uint32_t > binary (0 , 1 );
41- const std::unique_ptr<TFHEpp::SecretKey> sk (new TFHEpp::SecretKey ());
42- TFHEpp::EvalKey ek;
43- ek.emplacebkfft <TFHEpp::lvl01param>(*sk);
44- ek.emplaceiksk <TFHEpp::lvl10param>(*sk);
45- TFHEpp::TLWE<TFHEpp::lvl0param> ca =
46- TFHEpp::tlweSymEncrypt<TFHEpp::lvl0param>(
47- binary (engine), TFHEpp::lvl0param::α, sk->key .lvl0 );
48- TFHEpp::TLWE<TFHEpp::lvl0param> cb =
49- TFHEpp::tlweSymEncrypt<TFHEpp::lvl0param>(
50- binary (engine), TFHEpp::lvl0param::α, sk->key .lvl0 );
51- TFHEpp::TLWE<TFHEpp::lvl0param> cs =
52- TFHEpp::tlweSymEncrypt<TFHEpp::lvl0param>(
53- binary (engine), TFHEpp::lvl0param::α, sk->key .lvl0 );
54- TFHEpp::TLWE<TFHEpp::lvl0param> res;
55- for (auto _ : state) TFHEpp::HomMUX<TFHEpp::lvl0param>(res, cs, ca, cb, ek);
56- }
57-
587void BM_TLWE2TRLWE (benchmark::State& state)
598{
609 std::random_device seed_gen;
@@ -63,49 +12,17 @@ void BM_TLWE2TRLWE(benchmark::State& state)
6312 const std::unique_ptr<TFHEpp::SecretKey> sk (new TFHEpp::SecretKey ());
6413 TFHEpp::EvalKey ek;
6514 ek.emplacebkfft <TFHEpp::lvl01param>(*sk);
66- TFHEpp::TLWE<TFHEpp::lvl0param> ca =
67- TFHEpp::tlweSymEncrypt<TFHEpp::lvl0param>(
68- binary (engine), TFHEpp::lvl0param::α, sk->key .lvl0 );
15+ TFHEpp::TLWE<TFHEpp::lvl0param> ca;
16+ TFHEpp::tlweSymEncrypt<TFHEpp::lvl0param>(
17+ ca, static_cast <TFHEpp::lvl0param::T>(binary (engine)),
18+ TFHEpp::lvl0param::α, sk->key .get <TFHEpp::lvl0param>());
6919 TFHEpp::TRLWE<TFHEpp::lvl1param> res;
7020 for (auto _ : state)
7121 TFHEpp::BlindRotate<TFHEpp::lvl01param>(
72- res, ca, * ek.bkfftlvl01 ,
22+ res, ca, ek.getbkfft <TFHEpp::lvl01param>() ,
7323 TFHEpp::μpolygen<TFHEpp::lvl1param, TFHEpp::lvl1param::μ>());
7424}
7525
76- void BM_IKS (benchmark::State& state)
77- {
78- std::random_device seed_gen;
79- std::default_random_engine engine (seed_gen ());
80- std::uniform_int_distribution<uint32_t > binary (0 , 1 );
81- const std::unique_ptr<TFHEpp::SecretKey> sk (new TFHEpp::SecretKey ());
82- TFHEpp::EvalKey ek;
83- ek.emplaceiksk <TFHEpp::lvl10param>(*sk);
84- TFHEpp::TLWE<TFHEpp::lvl1param> ca =
85- TFHEpp::tlweSymEncrypt<TFHEpp::lvl1param>(
86- binary (engine), TFHEpp::lvl1param::α, sk->key .lvl1 );
87- TFHEpp::TLWE<TFHEpp::lvl0param> res;
88- for (auto _ : state)
89- TFHEpp::IdentityKeySwitch<TFHEpp::lvl10param>(res, ca, *ek.iksklvl10 );
90- }
91-
92- void BM_SEI (benchmark::State& state)
93- {
94- std::random_device seed_gen;
95- std::default_random_engine engine (seed_gen ());
96- std::uniform_int_distribution<uint32_t > binary (0 , 1 );
97- const std::unique_ptr<TFHEpp::SecretKey> sk (new TFHEpp::SecretKey ());
98- std::array<typename TFHEpp::lvl1param::T, TFHEpp::lvl1param::n> pmu;
99- for (int j = 0 ; j < TFHEpp::lvl1param::n; j++)
100- pmu[j] = binary (engine) ? TFHEpp::lvl1param::μ : -TFHEpp::lvl1param::μ;
101- TFHEpp::TRLWE<TFHEpp::lvl1param> ca =
102- TFHEpp::trlweSymEncrypt<TFHEpp::lvl1param>(pmu, TFHEpp::lvl1param::α,
103- sk->key .lvl1 );
104- TFHEpp::TLWE<TFHEpp::lvl1param> res;
105- for (auto _ : state)
106- TFHEpp::SampleExtractIndex<TFHEpp::lvl1param>(res, ca, 0 );
107- }
108-
10926void BM_CMUX (benchmark::State& state)
11027{
11128 std::random_device seed_gen;
@@ -117,17 +34,16 @@ void BM_CMUX(benchmark::State& state)
11734 pmu1[j] = binary (engine) ? TFHEpp::lvl1param::μ : -TFHEpp::lvl1param::μ;
11835 for (int j = 0 ; j < TFHEpp::lvl1param::n; j++)
11936 pmu0[j] = binary (engine) ? TFHEpp::lvl1param::μ : -TFHEpp::lvl1param::μ;
120- TFHEpp::TRLWE<TFHEpp::lvl1param> c0 =
121- TFHEpp::trlweSymEncrypt<TFHEpp::lvl1param>(pmu0, TFHEpp::lvl1param::α,
122- sk->key .lvl1 );
123- TFHEpp::TRLWE<TFHEpp::lvl1param> c1 =
124- TFHEpp::trlweSymEncrypt<TFHEpp::lvl1param>(pmu1, TFHEpp::lvl1param::α,
125- sk->key .lvl1 );
37+ TFHEpp::TRLWE<TFHEpp::lvl1param> c0, c1;
38+ TFHEpp::trlweSymEncrypt<TFHEpp::lvl1param>(c0, pmu0,
39+ sk->key .get <TFHEpp::lvl1param>());
40+ TFHEpp::trlweSymEncrypt<TFHEpp::lvl1param>(c1, pmu1,
41+ sk->key .get <TFHEpp::lvl1param>());
12642 const TFHEpp::Polynomial<TFHEpp::lvl1param> plainpoly = {binary (engine)};
12743 TFHEpp::TRGSWFFT<TFHEpp::lvl1param> cs;
12844 TFHEpp::trgswSymEncrypt<TFHEpp::lvl1param>(cs, plainpoly,
12945 TFHEpp::lvl1param::α,
130- sk->key .lvl1 );
46+ sk->key .get <TFHEpp::lvl1param>() );
13147 TFHEpp::TRLWE<TFHEpp::lvl1param> res;
13248 for (auto _ : state) TFHEpp::CMUXFFT<TFHEpp::lvl1param>(res, cs, c1, c0);
13349}
@@ -138,63 +54,29 @@ void BM_ExternalProduct(benchmark::State& state)
13854 std::default_random_engine engine (seed_gen ());
13955 std::uniform_int_distribution<uint32_t > binary (0 , 1 );
14056 const std::unique_ptr<TFHEpp::SecretKey> sk (new TFHEpp::SecretKey ());
141- std::array<typename TFHEpp::lvl1param::T, TFHEpp::lvl1param::n> pmu1, pmu0;
57+ std::array<typename TFHEpp::lvl1param::T, TFHEpp::lvl1param::n> pmu0;
14258 for (int j = 0 ; j < TFHEpp::lvl1param::n; j++)
143- pmu1 [j] = binary (engine) ? TFHEpp::lvl1param::μ : -TFHEpp::lvl1param::μ;
144- TFHEpp::TRLWE<TFHEpp::lvl1param> c0 =
145- TFHEpp::trlweSymEncrypt<TFHEpp::lvl1param>(pmu0, TFHEpp::lvl1param::α ,
146- sk->key .lvl1 );
59+ pmu0 [j] = binary (engine) ? TFHEpp::lvl1param::μ : -TFHEpp::lvl1param::μ;
60+ TFHEpp::TRLWE<TFHEpp::lvl1param> c0;
61+ TFHEpp::trlweSymEncrypt<TFHEpp::lvl1param>(c0, pmu0 ,
62+ sk->key .get <TFHEpp::lvl1param>() );
14763 const TFHEpp::Polynomial<TFHEpp::lvl1param> plainpoly = {binary (engine)};
14864 TFHEpp::TRGSWFFT<TFHEpp::lvl1param> cs;
14965 TFHEpp::trgswSymEncrypt<TFHEpp::lvl1param>(cs, plainpoly,
15066 TFHEpp::lvl1param::α,
151- sk->key .lvl1 );
67+ sk->key .get <TFHEpp::lvl1param>() );
15268 TFHEpp::TRLWE<TFHEpp::lvl1param> res;
15369 for (auto _ : state)
15470 TFHEpp::ExternalProduct<TFHEpp::lvl1param>(res, c0, cs);
15571}
15672
157- void BM_CB (benchmark::State& state)
158- {
159- std::random_device seed_gen;
160- std::default_random_engine engine (seed_gen ());
161- std::uniform_int_distribution<uint32_t > binary (0 , 1 );
162- const std::unique_ptr<TFHEpp::SecretKey> sk (new TFHEpp::SecretKey ());
163- TFHEpp::EvalKey ek;
164- using iksP = TFHEpp::lvl10param;
165- using bkP = TFHEpp::lvl02param;
166- using privksP = TFHEpp::lvl21param;
167- ek.emplaceiksk <iksP>(*sk);
168- ek.emplacebkfft <bkP>(*sk);
169- ek.emplaceprivksk4cb <privksP>(*sk);
170- TFHEpp::TLWE<TFHEpp::lvl1param> ca =
171- TFHEpp::tlweSymEncrypt<TFHEpp::lvl1param>(
172- binary (engine), TFHEpp::lvl1param::α, sk->key .lvl1 );
173- TFHEpp::TRGSWFFT<TFHEpp::lvl1param> res;
174- for (auto _ : state)
175- TFHEpp::CircuitBootstrapping<iksP, bkP, privksP>(res, ca, ek);
176- }
177-
178- BENCHMARK (BM_TRGSWenc)
179- ->Iterations(1 )
180- ->Repetitions(100 )
181- ->DisplayAggregatesOnly(true );
182- BENCHMARK (BM_HomGate)
183- ->Iterations(1 )
184- ->Repetitions(100 )
185- ->DisplayAggregatesOnly(true );
186- BENCHMARK (BM_HomMUX)->Iterations(1 )->Repetitions(10 )->DisplayAggregatesOnly(
187- true );
18873BENCHMARK (BM_TLWE2TRLWE)
18974 ->Iterations(1 )
19075 ->Repetitions(10 )
19176 ->DisplayAggregatesOnly(true );
192- BENCHMARK (BM_IKS)->Iterations(1 )->Repetitions(10 )->DisplayAggregatesOnly(true );
193- BENCHMARK (BM_SEI)->Iterations(1 )->Repetitions(10 )->DisplayAggregatesOnly(true );
19477BENCHMARK (BM_CMUX)->Iterations(1 )->Repetitions(10 )->DisplayAggregatesOnly(true );
19578BENCHMARK (BM_ExternalProduct)
19679 ->Iterations(1 )
19780 ->Repetitions(10 )
19881 ->DisplayAggregatesOnly(true );
199- // BENCHMARK(BM_CB)->Iterations(1)->Repetitions(10)->DisplayAggregatesOnly(true);
20082BENCHMARK_MAIN ();
0 commit comments