Commit Graph

23 Commits

Author SHA1 Message Date
aPere3
e95c53f2ff feat: support signed execution
Author: aPere3 <alexandre.pere@zama.ai>
Co-authored-by: Umut <umutsahin@protonmail.com>
2023-02-03 16:19:43 +01:00
Quentin Bourgerie
63334e138f fix: Fixing integer extension for plaintext encoding (close #847) 2023-02-02 14:28:23 +01:00
Andi Drebes
73fd6c5fe7 refactor(compiler): FHE to TFHE: Use OpConversionPattern for dialect conversion
Use `OpConversionPattern` instead of `OpRewritePattern` for operation
conversion during dialect conversion. This makes explicit and in-place
type conversions unnecessary, since `OpConversionPattern` already
properly converts operand types and provides them to the rewrite rule
through an operation adaptor.

The main contributions of this commit are the two class templates
`TypeConvertingReinstantiationPattern` and
`GenericOneToOneOpConversionPattern`.

The former allows for the definition of a simple replacement rule that
re-instantiates an operation after the types of its operands have been
converted. This is especially useful for type-polymorphic operations
during dialect conversion.

The latter allows for the definition of patterns, where one operation
needs to be replaced with a different operation after conversion of
its operands.

The default implementations for the class templates provide
conversions rules for operations that have a generic builder method
that takes the desired return type(s), the operands and (optionally) a
set of attributes. How attributes are discarded during a conversion
(either by omitting the builder argument or by passing an empty set of
attributes) can be defined through specialization of
`ReinstantiationAttributeDismissalStrategy`.

Custom replacement rules that deviate from the scheme above should be
implemented by specializing
`TypeConvertingReinstantiationPattern::matchAndRewrite()` and
`GenericOneToOneOpConversionPattern::matchAndRewrite()`.
2023-02-01 14:27:10 +01:00
youben11
36f51ba0c2 feat: lower and exec boolean ops 2023-01-26 11:22:41 +01:00
rudy
bac3ed38e0 fix: apply_multi_lookup_table, remove costly workaround
Closes #881
2023-01-23 09:53:25 +01:00
Quentin Bourgerie
19fdbf652e fix(compiler): The crt loops are unary and should be init by a alloc_tensor 2022-12-13 17:01:52 +01:00
aPere3
2fd9b6f0e3 refactor(encodings): raise plaintext/lut encodings higher up in the pipeline 2022-12-13 17:01:52 +01:00
Quentin Bourgerie
9e16f31b87 refactor(bconcrete): Separate bufferization and CAPI call generation 2022-11-30 10:29:19 +01:00
youben11
ef778ac75b refactor: replace some operands by attrs in bs/ks 2022-10-20 10:36:32 +01:00
youben11
7cd45d1514 test: add GPU end2end tests 2022-10-20 10:36:32 +01:00
youben11
d615ff47f2 feat: support GPU keyswitching 2022-10-20 10:36:32 +01:00
youben11
a7a65025ff refactor: redesign GPU support
- unify CPU and GPU bootstrapping operations
- remove operations to build GLWE from table: this is now done in
  wrapper functions
- remove GPU memory management operations: done in wrappers now, but we
  will have to think about how to deal with it later in MLIR
2022-10-20 10:36:32 +01:00
Umut
5f845bf9ff feat: add axes argument to transpose 2022-10-17 10:46:03 +03:00
Umut
41c9f86803 feat: create encrypted signed integer type 2022-09-09 17:38:21 +03:00
Quentin Bourgerie
8cd3a3a599 feat(compiler): First draft to support FHE.eint up to 16bits
For now what it works are only levelled ops with user parameters. (take a look to the tests)

Done:
- Add parameters to the fhe parameters to support CRT-based large integers
- Add command line options and tests options to allows the user to give those new parameters
- Update the dialects and pipeline to handle new fhe parameters for CRT-based large integers
- Update the client parameters and the client library to handle the CRT-based large integers

Todo:
- Plug the optimizer to compute the CRT-based large interger parameters
- Plug the pbs for the CRT-based large integer
2022-08-12 16:35:11 +02:00
rudy
cc6c2576ec feat(optimizer): create optimizer dag and use it 2022-08-11 10:10:27 +02:00
rudy
bd3d462384 feat(multiprecision): enable real multiple precision computation 2022-08-11 10:10:27 +02:00
Quentin Bourgerie
534e683055 fix: Lowering from ConcreteToBConcrete of from_elements on ND tensor of Concrete.lwe_ciphertext 2022-08-09 10:26:32 +02:00
Andi Drebes
85ebc0cb7a Rebase onto llvm-project 3f81841474fe with patch for arbitrary types in linalg named ops
Rebase to llvm-project at 3f81841474fe with a pending upstream patch
for arbitrary element types in linalg named operations.

Co-authored-by: Ayoub Benaissa <ayoub.benaissa@zama.ai>
2022-07-27 22:45:38 +02:00
Quentin Bourgerie
511bcd99e7 Revert "feat(optimizer): create optimizer dag and use it"
This reverts commit 0b99f6d278.
2022-07-27 18:35:47 +02:00
rudy
0b99f6d278 feat(optimizer): create optimizer dag and use it 2022-07-25 21:06:14 +02:00
Umut
e24dbec249 feat: create FHELinalg.from_element operation
This commit is introduced because python bindings for `tensor.from_elements` are not generated automatically. Previously, we overcame this with string manipulation, but with the latest version of the compiler, it became a problem. This commit should be reverted eventually. See https://discourse.llvm.org/t/cannot-create-tensor-from-elements-operation-from-python-bindings/4768 for the discussion in LLVM forums.
2022-07-08 14:43:46 +03:00
Quentin Bourgerie
2cfccd8f89 refactor: restructure the tests directory layout 2022-07-07 17:10:09 +02:00