Optimizations
In this section, we will describe three further optimizations to the CKKS scheme.
- All-real slots roughly doubles throughput when the application doesn't need full complex numbers, packing $65536$ real values into a single plaintext polynomial instead of $32768$ complex ones. This requires changing how polynomials are represented in both coefficient form and slot form.
- Meta-bootstrapping lets bootstrapping retain arbitrarily high precision, at the cost of making each bootstrap slower.
- Grafting speeds up the homomorphic operations themselves by switching the modulus chain to $32$-bit primes — and including $2^{32}$ itself as one of them. This lets the chain use the minimal number of primes for a given computation, and hence the minimal number of RNS residues to track in every operation, saving work.
All-real slots
[WORK IN PROGRESS]
How to store polynomials in the all-real subfield, and how to modify the bootstrapping algorithm to operate on them.
Meta-bootstrapping
[WORK IN PROGRESS]
Meta-bootstrapping is a way of modifying the bootstrapping algorithm to retain arbitrarily high precision.
Grafting
[WORK IN PROGRESS]
Switching the modulus chain to 32-bit primes, and including $2^{32}$ itself in the chain alongside them.