Hello everyone!
I have a question regarding the CiphertextImpl
class in OpenFHE, specifically about the GetLevel
function. According to the documentation, the function is described as:
inline size_t GetLevel() const
Get the number of scalings performed
The term “level” here refers to the number of scalings that have been performed. For CKKS, you need to perform bootstrapping once the value of GetLevel
reaches the multiplicative depth.
I’m a bit confused about the terminology. In the papers I’ve read, the level typically decreases as multiplications are performed, but here it seems to increase. There’s also a LevelReduce
function in CiphertextImpl
that removes unnecessary RNS limbs, which reduces the level after multiplication. This seems to follow the convention from papers, where the level decreases, unlike GetLevel
, which increases.
I’m curious about the reasoning behind counting the levels up from zero, rather than down from the multiplicative depth, which is more common in the literature and is consistent with the behavior of LevelReduce
. Can anyone explain the motivation for this approach?
Thank you in advance!
From original CKKS bootstrapping paper:
From original CKKS paper: