Commit Graph

149 Commits

Author SHA1 Message Date
Andi Drebes
30374ebb2c refactor(compiler): Introduce compilation pipeline with multiple entries / exits
This refactoring commit restructures the compilation pipeline of
`zamacompiler`, such that it is possible to enter and exit the
pipeline at different points, effectively defining the level of
abstraction at the input and the required level of abstraction for the
output.

The entry point is specified using the `--entry-dialect`
argument. Valid choices are:

  `--entry-dialect=hlfhe`:   Source contains HLFHE operations
  `--entry-dialect=midlfhe`: Source contains MidLFHE operations
  `--entry-dialect=lowlfhe`: Source contains LowLFHE operations
  `--entry-dialect=std`:     Source does not contain any FHE Operations
  `--entry-dialect=llvm`:    Source is in LLVM dialect

The exit point is defined by an action, specified using --action.

  `--action=roundtrip`:
     Parse the source file to in-memory representation and immediately
     dump as text without any processing

  `--action=dump-midlfhe`:
     Lower source to MidLFHE and dump result as text

  `--action=dump-lowlfhe`:
     Lower source to LowLFHE and dump result as text

  `--action=dump-std`:
     Lower source to only standard MLIR dialects (i.e., all FHE
     operations have already been lowered)

  `--action=dump-llvm-dialect`:
     Lower source to MLIR's LLVM dialect (i.e., the LLVM dialect, not
     LLVM IR)

  `--action=dump-llvm-ir`:
     Lower source to plain LLVM IR (i.e., not the LLVM dialect, but
     actual LLVM IR)

  `--action=dump-optimized-llvm-ir`:
     Lower source to plain LLVM IR (i.e., not the LLVM dialect, but
     actual LLVM IR), pass the result through the LLVM optimizer and
     print the result.

  `--action=dump-jit-invoke`:
     Execute the full lowering pipeline to optimized LLVM IR, JIT
     compile the result, invoke the function specified in
     `--jit-funcname` with the parameters from `--jit-args` and print
     the functions return value.
2021-09-28 11:35:58 +02:00
Andi Drebes
ddebedd1d6 refactor(compiler): Make function getV0Parameter return a pointer to a constant
The function `getV0Parameter()` returns a pointer to a static array,
which is not intended to be mutable. Reflect this in the return type
of the function.
2021-09-28 11:35:58 +02:00
Andi Drebes
6a76177a47 refactor(compiler): Move JIT functionality to separate source file 2021-09-28 11:35:58 +02:00
Andi Drebes
b9e2690823 refactor(compiler): Replace LOG_{VERBOSE,ERROR} macros with C++-style streams
Replace the macros `LOG_VERBOSE` and `LOG_ERROR` with C++-style
streams retrieved through `log_verbose()` and `log_error()`. This
aligns with the `MLIR` infrastructure and avoids pollution of the
global namespace through a common header file in subsequent
refactoring commits splitting the functionality of `src/main.cpp` into
multiple files.
2021-09-28 11:35:58 +02:00
Quentin Bourgerie
b4776a619d test(compiler): Reenable 7 bits test, we should change how the test are done to take care of the probability of exactness 2021-09-27 13:37:11 +02:00
Quentin Bourgerie
0f93fa1dcc fix(compiler/parameters): new parameters for v0 (p=0.99993 for 1-6 and 0.95 for 7) 2021-09-27 13:37:11 +02:00
Quentin Bourgerie
2cc72dd721 test(compiler): Fix end to end test we loss the 7 bits 2021-09-27 13:37:11 +02:00
Quentin Bourgerie
7454c30485 fix(compiler/parameters): Update parameters 2021-09-27 13:37:11 +02:00
Quentin Bourgerie
d9be22c1b1 fix(compiler/runtime): decode with integers 2021-09-27 13:37:11 +02:00
youben11
3feab09c88 test(LUT): random function 2021-09-27 13:37:11 +02:00
Quentin Bourgerie
3a254bcb87 fix(compiler): Integrate the security estimator to compute variances 2021-09-20 13:46:08 +02:00
youben11
967fda07a0 feat(execution): run on both int and tensor args 2021-09-10 10:00:04 +01:00
Quentin Bourgerie
c37ac41c1a test(compiler): LowLFHEUnpametrize 2021-09-09 20:57:18 +02:00
Quentin Bourgerie
8cc0af1220 fix(compiler): Add a pass to unparametrize LowLFHE ciphertext to remove unrelized_convesrion_cast for linalg bufferization 2021-09-09 20:35:28 +02:00
youben11
d0e71dd4f1 fix: use IndexType for size of LWE allocation 2021-09-09 20:35:28 +02:00
youben11
746d991af6 refactor: ins forward decl w generic ty @pass-init
Insert forward declarations with generic types at pass initialization.
More docs for all the pass for lowering LUT
2021-09-09 20:35:28 +02:00
youben11
d97512f507 tests: remove RunJit tests
It's better to have execution tests as unittest (that we have now),
better control of the execution than just MLIR.
2021-09-09 20:35:28 +02:00
youben11
3893ad39bb fix: divide and round to decode decrypted ct
Doing a right shift will ommit the bits that can be used to round to the
nearest integer
2021-09-09 20:35:28 +02:00
youben11
272a725e9a feat(lower_LUT): add precision attribute to encode LUT at runtime 2021-09-09 20:35:28 +02:00
youben11
c4dd639ea7 tests(LUT): use relative error 2021-09-09 20:35:28 +02:00
youben11
1e07733257 fix(lower-LUT): keep output size of KS during lowering
output size of keyswiting wasn't set properly. As this information must
come from the selected parameters, it should goes down from the MidLFHE
to the appropriate call to ciphertext allocation
2021-09-09 20:35:28 +02:00
youben11
cae9af36b0 fix: print ksLogBase correctly 2021-09-09 20:35:28 +02:00
youben11
c3d6bea247 fix: jit arguments must be uint64 2021-09-09 20:35:28 +02:00
youben11
855dabc91e tests: apply_univ complete lowering and execution 2021-09-09 20:35:28 +02:00
youben11
51c7b49144 ci: setup appropriate ENV for runtime lib 2021-09-09 20:35:28 +02:00
youben11
5f16cfabbf fix(Runtime): link missing libraries
We currently use LD_PRELOAD with the python extension to make the JIT
execution find the appropriate symbols, however, not linking with some
libraries caused other tools such as make to complain of not finding
symbols from libpthread and others
2021-09-09 20:35:28 +02:00
youben11
32d67726e2 feat(LowToCAPI): replace key alloc w getters from RT 2021-09-09 20:35:28 +02:00
youben11
c6b1480cc6 feat: generate runtime context at Argument creation 2021-09-09 20:35:28 +02:00
youben11
d1332dfd9a fix(compiler): polynomialSize from logPolynomialSize
The polynomialSize is currently holding its log2 instead of the actual
value. This should be fixed later, but in the meantime, we need to
compute it from log2
2021-09-09 20:35:28 +02:00
youben11
50d2ff82af chore(compiler): disable bitwidth check for table lookup 2021-09-09 20:35:28 +02:00
youben11
8aee5dd5c3 chore(runtime): link concrete statically with runtime lib 2021-09-09 20:35:28 +02:00
youben11
de81ac3f3e feat: Runtime library 2021-09-09 20:35:28 +02:00
youben11
ea3c940f4a feat: lower LowLFHE types (apply_lut) to llvm.ptr 2021-09-09 20:35:28 +02:00
youben11
6e2ac3af4e feat: parameterize KS operation 2021-09-09 20:35:28 +02:00
youben11
14f171bef9 feat: parameterize bst operation
This is needed to have the right parameters when calling concrete
2021-09-09 20:35:28 +02:00
youben11
2b0cfce1f6 feat(compiler): LowToCAPI of apply_lut 2021-09-09 20:35:28 +02:00
youben11
3b5ae0657d feat: MidToLowLFHE lowering of apply_lut 2021-09-09 20:35:28 +02:00
youben11
b6c3eceadd refactor: remove keys from BS and KS ops in LowLFHE 2021-09-09 20:35:28 +02:00
Quentin Bourgerie
d2a3214bba clean(compiler): Return nullptr when conversion fails (should not happens but more safe in release mode) and remove dead code 2021-09-08 11:44:51 +02:00
Quentin Bourgerie
d03adbd7dc enhance(compiler): Add options for verbose passes 2021-09-08 11:44:51 +02:00
Quentin Bourgerie
1077c9167c enhance(compiler): Full lowering of hlfhe.zero, make dot_eint_int fully lowerable 2021-09-08 11:44:51 +02:00
Quentin Bourgerie
de7129fe8e feat(compiler/llvm-pipeline): Bufferize linalg and convert to loops 2021-09-08 11:44:51 +02:00
Quentin Bourgerie
a654fb2d0e enhance(compiler/midlfhe): Handle linalg.generic in parametrization pass 2021-09-08 11:44:51 +02:00
Quentin Bourgerie
15fd194075 fix(compiler): Since the patterns could be call in any order take care of already lowered types in mid to low conversion 2021-09-08 11:44:51 +02:00
Quentin Bourgerie
697d4033e1 fix(compiler): typo 2021-09-06 10:26:40 +02:00
Quentin Bourgerie
bfa4eece9d chore(compiler): Add build target for e2e test 2021-09-06 10:26:40 +02:00
youben11
c3db68298e fix: checking wrong state of the error 2021-09-06 10:26:40 +02:00
Quentin Bourgerie
9ccc03b02f fix(compiler/python): Fix api break 2021-09-06 10:26:40 +02:00
Quentin Bourgerie
be7301387c chore: add then end-to-end-jit test to the make test target 2021-09-06 10:26:40 +02:00
Quentin Bourgerie
88d896cb64 refactor: Rename unittests 2021-09-06 10:26:40 +02:00