Hello, I’m trying to choose the right parameters for my application (in ckks). I am using
security = 128 bit
ring = 2^16
full packing
levelBudget = {3, 3}
approxBootstrapDepth = 4
levelsUsedBeforeBootstrap = 11
So the depth of the circuit is 15+11=26.
When i bootstrap though, the result is at level 20. Is that right or am i missing something? I think it should be at 15.
Thank you
I am not sure I follow your calculations. Why is approxBootstrapDepth
set to 4, and where do you get 15?
I suggest looking at the simple CKKS bootstrapping example. Below is the relevant code.
std::vector<uint32_t> levelBudget = {4, 4};
uint32_t approxBootstrapDepth = 8;
uint32_t levelsUsedBeforeBootstrap = 10;
usint depth =
levelsUsedBeforeBootstrap + FHECKKSRNS::GetBootstrapDepth(approxBootstrapDepth, levelBudget, secretKeyDist);
parameters.SetMultiplicativeDepth(depth);
15 is approxBootstrapDepth + levelBudget[0] + levelBudget[1] + 5 (just like is computed by FHECKKSRNS::GetBootstrapDepth)
I thought approxBootstrapDepth can be chosen by the user, so 8 is a fixed value?
8 is a fixed value. We will simplify the bootstrapping interface in a later version where approxBootstrapDepth
is automatically chosen by OpenFHE.
1 Like