Preserve linear_transform in Lattigo backend - #3315
Conversation
|
Rebased over #3313. The new changes are the secret-to-ckks and scheme-to-backend conversion passes, as well as the e2e tests and enabling it in the lattigo config. Interestingly: openfhe's linear_transform op is not part of their public API (and it only supports dense mode anyway, so it's less useful) so that backend is not enabled. |
mdgrs
left a comment
There was a problem hiding this comment.
I mostly live in the CKKS world, but this has broken a BGV test:
tests/Examples/common/cmux.mlir:1:1
d55b94d to
8564c30
Compare
There was a problem hiding this comment.
There seems to be a several places where a soft error (notifyMatchFailure) is used where I think hard emitOpError would be more appropriate/ give users clearer feedback. I annotated a few in LWEToLattigo's conversion pattern, but I think it also applies to the other patterns.
9542005 to
76d2c28
Compare
This change: - Implements the LWE-to-Lattigo lowering pattern for kernel.linear_transform to lattigo.ckks.linear_transform. - Enables has_kernel_linear_transform = 1 in Lattigo target config. - Fixes the Lattigo emitter to dynamically convert float32 diagonals to float64 in Go. - Resolves LevelQ and Scale matching issues in the emitter using dynamic ciphertext level instead of compile-time constants. - Aligns encoding slots with actual slot counts for CKKS bootstrapping. After this change, the e2e lattigo tests using linalg.matvec lower to use the linear_transform op. Still TODO is lowering a conv operator to an intermediate matvec op so it can be preserved as a linear_transform op, which is a bit of a larger change because it requires extracting the lowering for conv ops to occur before layout-propagation, and hard-coding the layout choice. PiperOrigin-RevId: 975385318
76d2c28 to
cefe870
Compare
Preserve linear_transform in Lattigo backend
This change:
After this change, the e2e lattigo tests using linalg.matvec lower to use the linear_transform op.
Still TODO is lowering a conv operator to an intermediate matvec op so it can be preserved as a linear_transform op, which is a bit of a larger change because it requires extracting the lowering for conv ops to occur before layout-propagation, and hard-coding the layout choice.