Andi Drebes
7062052ca6
fix(compiler): Remove unused variables in lib/Dialect/TFHE/IR/TFHEOps.cpp
2022-01-07 12:03:13 +01:00
Andi Drebes
ce9d86014d
fix(compiler): Force same signedness of integers in _verifyGLWEIntegerOperator
2022-01-07 12:03:13 +01:00
Andi Drebes
d83a462e20
fix(compiler): Fix initialization order in constructor of MaxMANPPass
2022-01-07 12:03:13 +01:00
Andi Drebes
0b73586178
fix(compiler): Fix initialization order in constructor of MANPAnalysis
2022-01-07 12:03:13 +01:00
Andi Drebes
258480dab6
fix(compiler): Remove unused variable in lib/Dialect/FHE/Analysis/MANP.cpp
2022-01-07 12:03:13 +01:00
Andi Drebes
94f160eef1
fix(compiler): Remove unused variables in lib/Dialect/FHE/IR/FHEOps.cpp
2022-01-07 12:03:13 +01:00
Quentin Bourgerie
4ecae140ca
doc(compiler): Enhance FHE Dialect documentation
2022-01-06 18:07:19 +01:00
youben11
2009ee1c94
chore: changing ref to repo after its renaming
...
also formatting and update the check_license script to match that
2022-01-06 12:40:10 +01:00
youben11
f1161f7f6d
chore: formatting
...
Quick fix due to ordering of includes, had to add #include
<mlir/Transforms/DialectConversion.h> to include/concretelang/Conversion/Utils/GenericOpTypeConversionPattern.h
2022-01-03 09:29:19 +01:00
youben11
940cb96be4
chore: rename dialects
...
HLFHE to FHE
MidLFHE to TFHE
LowLFHE to Concrete
2021-12-29 15:13:34 +01:00
youben11
e73291abdc
chore: rename compiler to concrete-compiler
...
zamalang => concretelang
zamacompiler => concretecompiler
2021-12-29 15:13:34 +01:00
youben11
971cb56182
chore: licensing
2021-12-29 15:13:34 +01:00
rudy
d8fee32cea
feat(HLFHELinalg): add apply_mapped_table_lookup
...
Resolves #182
2021-12-27 15:34:33 +01:00
Antoniu Pop
cdca7ca6f7
feat(compiler): add Dataflow/RT dialect and code generation for dataflow auto parallelization.
2021-12-23 15:57:53 +00:00
Quentin Bourgerie
db683f4a0e
feat(compiler/runtime): Introduce a RT dialect
2021-12-23 15:57:53 +00:00
rudy
5ed2dcb3c1
fix(compiler): MANP segfault bug in case of missing MANP value
2021-12-20 10:40:58 +01:00
Andi Drebes
f319ba37d2
feat(compiler): Integrate HLFHELinalg tiling passes into compilation pipeline
2021-12-17 16:09:59 +01:00
Andi Drebes
bc75831c86
feat(compiler): Add passes for tiling of HLFHELinalg.matmul_eint_int
...
Add two passes related to the tiling of `HLFHELinalg.matmul_eint_int`
operations.
The `HLFHELinalgTilingMarker` pass takes a vector of tile sizes and
adds an integer array attribute "tile-sizes" to each instance of
`HLFHELinalg.matmul_eint_int`, e.g.,
"HLFHELinalg.matmul_eint_int"(%arg0, %arg1) {"tile-sizes" = [2, 2, 2]} :
(tensor<4x2x!HLFHE.eint<6>>, tensor<2x2xi7>) -> tensor<4x2x!HLFHE.eint<6>>
The `HLFHELinalgTiling` performs the actual tiling of each
`HLFHELinalg.matmul_eint_int` operation marked with a "tile-sizes"
attribute. The tiling preserves the level of abstraction of
HLFHELinalg and is implemented as a perfect loop nest of SCF for loops
with a `HLFHELinalg.matmul_eint_int` in the body.
For example,
func @main(%arg0: tensor<4x2x!HLFHE.eint<6>>, %arg1: tensor<2x2xi7>)
-> tensor<4x2x!HLFHE.eint<6>>
{
%0 = "HLFHELinalg.matmul_eint_int"(%arg0, %arg1) {"tile-sizes" = [2, 2, 2]} :
(tensor<4x2x!HLFHE.eint<6>>, tensor<2x2xi7>) -> tensor<4x2x!HLFHE.eint<6>>
return %0 : tensor<4x2x!HLFHE.eint<6>>
}
becomes:
func @main(%arg0: tensor<4x2x!HLFHE.eint<6>>, %arg1: tensor<2x2xi7>)
-> tensor<4x2x!HLFHE.eint<6>>
{
%c2 = arith.constant 2 : index
%c0 = arith.constant 0 : index
%c4 = arith.constant 4 : index
%0 = "HLFHELinalg.zero"() : () -> tensor<4x2x!HLFHE.eint<6>>
%1 = scf.for %arg2 = %c0 to %c4 step %c2 iter_args(%arg3 = %0)
-> (tensor<4x2x!HLFHE.eint<6>>) {
%2 = scf.for %arg4 = %c0 to %c2 step %c2 iter_args(%arg5 = %arg3)
-> (tensor<4x2x!HLFHE.eint<6>>) {
%3 = scf.for %arg6 = %c0 to %c2 step %c2 iter_args(%arg7 = %arg5)
-> (tensor<4x2x!HLFHE.eint<6>>) {
%4 = tensor.extract_slice %arg0[%arg2, %arg4] [2, 2] [1, 1] :
tensor<4x2x!HLFHE.eint<6>> to tensor<2x2x!HLFHE.eint<6>>
%5 = tensor.extract_slice %arg1[%arg4, %arg6] [2, 2] [1, 1] :
tensor<2x2xi7> to tensor<2x2xi7>
%6 = tensor.extract_slice %arg7[%arg2, %arg6] [2, 2] [1, 1] :
tensor<4x2x!HLFHE.eint<6>> to tensor<2x2x!HLFHE.eint<6>>
%7 = "HLFHELinalg.matmul_eint_int"(%4, %5) :
(tensor<2x2x!HLFHE.eint<6>>, tensor<2x2xi7>)
-> tensor<2x2x!HLFHE.eint<6>>
%8 = "HLFHELinalg.add_eint"(%6, %7) :
(tensor<2x2x!HLFHE.eint<6>>, tensor<2x2x!HLFHE.eint<6>>)
-> tensor<2x2x!HLFHE.eint<6>>
%9 = tensor.insert_slice %8 into %arg7[%arg2, %arg6] [2, 2] [1, 1] :
tensor<2x2x!HLFHE.eint<6>> into tensor<4x2x!HLFHE.eint<6>>
scf.yield %9 : tensor<4x2x!HLFHE.eint<6>>
}
scf.yield %3 : tensor<4x2x!HLFHE.eint<6>>
}
scf.yield %2 : tensor<4x2x!HLFHE.eint<6>>
}
return %1 : tensor<4x2x!HLFHE.eint<6>>
}
Only full tiles are supported, i.e., the size of the dimensions of the
operands must be a multiple of the respective tile sizes.
2021-12-17 16:09:59 +01:00
Quentin Bourgerie
bb1add2a6f
enhance(compiler): Remove the restriction of analysis on the HLFHELinalg.dot
...
While the manp analysis wasn't handle tensor the dot operation restrict the operands to come from a block argument. Since the tensor are handled in the manp pass this restriction has no more meaning.
2021-12-07 11:17:33 +01:00
Quentin Bourgerie
fb58dcc59d
enhance(compiler/lowlfhe): Give the runtime context as function argument instead of a global variable ( close #195 )
2021-12-02 10:56:47 +01:00
Andi Drebes
4883eebfa3
feat(compiler): Add HLFHELinalg.zero operation
...
Add a new operation `HLFHELinalg.zero`, broadcasting an encrypted,
zero-valued integer into a tensor of encrypted integers with static
shape.
Example creating a one-dimensional tensor with five elements all
initialized to an encrypted zero:
%tensor = "HLFHELinalg.zero"() : () -> tensor<5x!HLFHE.eint<4>>
2021-12-01 11:24:27 +01:00
Quentin Bourgerie
ddbafd713d
feat(compiler): Add the HLFHELinalg.matmul_int_eint operator
2021-11-24 09:19:25 +01:00
Quentin Bourgerie
100862e484
feat(compiler): Add the support of linalg.tensor_expand_shape and linalg.tensor_collapse_shape on encrypted tensors
2021-11-17 14:19:15 +01:00
youben11
ac7f1f5a6b
feat(compiler): add HLFHELinalg.apply_multi_lut
...
Apply a lookup table on the different elements of the encrypted tensors,
but using different lookup tables.
MANP support as well as tests
2021-11-15 11:25:44 +01:00
Quentin Bourgerie
5df775a51b
feat(compiler): MANP Analysis of HLFHELinalg.matmul ( closes #178 )
2021-11-12 16:50:29 +01:00
Quentin Bourgerie
12b4771405
feat(compiler/linalg): Definition of HLFHELinalg.matmul_eint_int ( closes #176 )
2021-11-12 16:50:29 +01:00
youben11
a888a6b329
typo: bad function name
2021-11-10 15:24:31 +01:00
youben11
99d6d11616
feat(compiler): support HLFHELinalg.neg_eint in MANP
2021-11-10 15:24:31 +01:00
youben11
d9adbab036
feat(compiler): add HLFHELinalg.neg_eint op
2021-11-10 15:24:31 +01:00
youben11
efacd7d8a1
feat(compiler): support HLFHE.neg_eint in MANP
2021-11-10 15:24:31 +01:00
youben11
c1cd6bb380
feat(compiler): add MidLFHE.neg_glwe op
2021-11-10 15:24:06 +01:00
youben11
cc4e403e7a
feat(compiler): add HLFHE.neg_eint op
2021-11-10 14:52:35 +01:00
rudy
97389a3b06
Move HLFHE.dot_eint_int to HLFHELinalg.
...
Resolves #183
2021-11-09 11:39:08 +01:00
youben11
03c1588db4
chore: update to LLVM 8b7cc93e
...
major changes:
- https://llvm.discourse.group/t/psa-removed-arithmetic-ops-from-standard/4455
- use add_mlir_public_c_api_library helper to correctly add a CAPI library
2021-10-29 16:08:41 +01:00
Quentin Bourgerie
5bb58453aa
feat(compiler): MANP Analysis of HLFHELinalg.apply_lookup_table ( close #175 )
2021-10-29 13:47:38 +02:00
Quentin Bourgerie
2900c9a2a1
feat(compiler): Add support of HLFHELinalg binary operators in MANP pass ( close #172 )
2021-10-29 13:47:38 +02:00
Quentin Bourgerie
be92b4580d
Merge branch 'master' into hlfhelinalg-binary-op-lowering
2021-10-29 13:47:35 +02:00
Andi Drebes
d4b4839d6e
fix(compiler): Take into account function parameters in MaxMANPPass
...
When determining the maximum MANP and precision, the `MaxMANPPass`
only takes into account results generated by an operation, but ignores
function parameters. However, encrypted function parameters are
assumed to have a MANP value of 1 and can have an arbitrary
precision. This patch takes into account function arguments by using
their default MANP values and the extracting their precision.
2021-10-29 13:44:34 +02:00
Andi Drebes
0423a05db8
feat(compiler): Add support for tensor.extract operations in MANP pass
...
Add support for `tensor.extract` operations in the MANP pass. This
currently only supports extract operations on tensors of encrypted
integers, which are passed as function arguments, e.g.:
func @extract_ith(%t: tensor<10x!HLFHE.eint<5>>, %i: index) -> !HLFHE.eint<5>{
%c = tensor.extract %t[%i] : tensor<10x!HLFHE.eint<5>>
return %c : !HLFHE.eint<5>
}
2021-10-29 13:44:34 +02:00
Quentin Bourgerie
dea1be9d52
feat(compiler): HLFHELinalg.apply_lookup_table definition
2021-10-29 12:17:38 +02:00
Quentin Bourgerie
64e327209f
feat(compiler): HLFHELinalg.sub_int_eint
2021-10-29 12:17:32 +02:00
Quentin Bourgerie
3b02a16f7b
feat(compiler): HLFHELinalg.add_eint definition
2021-10-29 12:16:41 +02:00
Quentin Bourgerie
0d4e10169b
feat(compiler): Introduce the HLFHELinalg dialect and a first operator HLFHELinalg.add_eint_int
2021-10-29 12:16:41 +02:00
Quentin Bourgerie
1c202ebaff
enhance(compiler): Support of tensor operators in MANP pass ( close #169 )
2021-10-20 16:21:52 +02:00
Quentin Bourgerie
966160bc2c
fix(compiler): apply_lookup_table operators take tensor of i64
...
We decide to make this choice as they are issue to crate tensor of custom integer type in python.
+ we don't do the integer extension before convert to the concrete CAPI that requires i64
2021-10-13 10:28:35 +02:00
youben11
ebdc95f827
chore: update llvm and fix API breaks
2021-10-08 12:11:34 +01:00
Andi Drebes
5ce3fd5f43
refactor(compiler): Move ceilLog2 to separate header file
2021-09-28 11:35:58 +02:00
Andi Drebes
1200a46e49
feat(compiler): Add HLFHE pass selecting maximum MANP and encrypted integer width
...
This pass calculates the squared Minimal Arithmetic Noise Padding
(MANP) for each operation using the MANP pass and extracts the maximum
(non-squared) Minimal Arithmetic Noise Padding and the maximum
ecrypted integer width from.
2021-09-28 11:35:58 +02:00
Andi Drebes
ed762942c1
feat(compiler): Add pass for Minimal Arithmetic Noise Padding
...
This pass calculates the squared Minimal Arithmetic Noise Padding
(MANP) for each operation of a function and stores the result in an
integer attribute named "sqMANP". This metric is identical to the
squared 2-norm of the constant vector of an equivalent dot product
between a vector of encrypted integers resulting directly from an
encryption and a vector of plaintext constants.
The pass supports the following operations:
- HLFHE.dot_eint_int
- HLFHE.zero
- HLFHE.add_eint_int
- HLFHE.add_eint
- HLFHE.sub_int_eint
- HLFHE.mul_eint_int
- HLFHE.apply_lookup_table
If any other operation is encountered, the pass conservatively
fails. The pass further makes the optimistic assumption that all
values passed to a function are either the direct result of an
encryption of a noise-refreshing operation.
2021-09-28 11:35:58 +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