ModReduce after EvalMult in BGV


I have a question regarding the BGV Scheme,
is it necessary to call modReduce after every EvalMult call?

I saw it was not needed in the CKKS Scheme,
as it is perfomed automatically.

Thank you in advance.

modReduce decreases the noise after a ciphertext-ciphertext multiplication (if it is not applied, the noise growth will be exponential). So typically you need to call modReduce whenever you have such a multiplication.

modReduce is not needed after a ciphertext-plaintext multiplication (it does not reduce the relative noise).

In the automated modes of both BGV and CKKS, we do not distinguish between ciphertext-ciphertext and ciphertext-plaintext multiplications (mostly for simplicity/usability reasons). So OpenFHE always call them in the automated modes.

If you use the FIXEDMANUAL mode, you can control where modReduce is called, but this is only advised for FHE experts as improper application of modReduce can lead to incorrect results.

1 Like