Commit Graph

3302 Commits

Author SHA1 Message Date
Andi Drebes
8d71dc2028 feat(compiler): Add verifier to TFHE.encode_expand_lut_for_bootstrap nightly-2024.02.01 nightly-2024.01.30 nightly-2024.01.31 2024-01-29 15:35:14 +01:00
Andi Drebes
ea07239732 feat(compiler): Add verifiers to TFHE bootstrap operations 2024-01-29 15:35:10 +01:00
Andi Drebes
a133407035 test(compiler): Fix the size of lookup tables used in tests with bootstrap operations
Some of the tests use lookup tables whose numbers of elements do not
match the sizes of the polynoms of the bootstrap operations they are
passed to. This commit replaces these lookup tables with tables of the
right size.
2024-01-29 15:28:49 +01:00
Alexandre Péré
f113e8bcfe fix(ci): fix the doc verification nightly-2024.01.27 2024-01-26 17:15:03 +01:00
Alexandre Péré
a02bf3bae9 fix(optimizer): compiler output forwarding
In the optimizer, nodes without consumers are identified as outputs.
Since we can now return multiple values, this is inherently buggy,
since a value can then be both returned, and consumed to create another
input.

This commit fixes this by allowing the compiler to tag nodes as being
outputs.
2024-01-26 17:15:03 +01:00
Alexandre Péré
166a3217ad docs(frontend): add doc for weak composition nightly-2024.01.26 2024-01-25 17:21:54 +01:00
Umut
4999c1ebfe chore(ci): use apt instead of dnf when testing python frontend when releasing 2024-01-25 12:42:08 +03:00
yuxizama
06777f8556 docs: update badges and links 2024-01-25 10:28:00 +01:00
yuxizama
59133e4bec docs: update README.md
update support banner
2024-01-25 10:28:00 +01:00
Umut
037600112d feat(frontend-python): drawing nightly-2024.01.24 nightly-2024.01.25 2024-01-23 11:42:26 +03:00
Alexandre Péré
9beb98c141 chore(optimizer): allow debug mode compilation nightly-2024.01.23 2024-01-22 15:54:02 +01:00
Alexandre Péré
b2fbf8eb28 fix(frontend): fix composition bitwidth incompatibility nightly-2024.01.20 2024-01-19 18:25:23 +01:00
Ben
75132edf37 docs(frontend): include docs changes from #593 2024-01-19 12:06:32 +03:00
Ben
749096dda9 docs(frontend): v2.5 diff language 2024-01-19 12:06:32 +03:00
Alexandre Péré
4df041c399 chore(optimizer): fix new nightly lints nightly-2024.01.19 2024-01-18 14:03:35 +01:00
Alexandre Péré
75d33d4f94 fix(optimizer): enhance error reported on non-composability 2024-01-18 14:03:35 +01:00
Alexandre Péré
2746bda27e chore(optimizer): add dot partitioning visualization 2024-01-18 14:03:35 +01:00
Alexandre Péré
52427d129b fix(optimizer): add test for composition with 3 partitions 2024-01-18 14:03:35 +01:00
Alexandre Péré
939ae72292 fix(optimizer): allow composability of input only circuits 2024-01-18 14:03:35 +01:00
rudy
cd390b02dc fix(optimizer): do not mix lsb and tlu-0bits from round nightly-2024.01.17 nightly-2024.01.16 nightly-2024.01.18 2024-01-15 14:42:25 +01:00
Umut
b4ed398549 fix(frontend-python): reduce the failure rate of setting keys test nightly-2024.01.13 2024-01-12 16:25:51 +03:00
rudy
6db7c5c1fe fix(common): version tag major.minor.revision(-whatever)? nightly-2024.01.12 2024-01-11 17:40:00 +01:00
Umut
8ef84bed42 feat(frontend-python): add relu extension 2024-01-11 16:09:42 +01:00
rudy-6-4
cc14e7a4f9 docs(frontend-python): bit extract performance nightly-2024.01.10 nightly-2024.01.11 2024-01-09 14:57:08 +01:00
Bourgerie Quentin
c438fb21d0 fix(compiler/benchamrk): Fix command line for compilation options of e2e tools 2024-01-09 12:40:31 +01:00
rudy
8183d98605 feat(frontend-python): multi-parameters, Configuration, by-precision-and-norm2 strategy nightly-2024.01.09 2024-01-08 20:32:27 +01:00
rudy
cb0679fc03 fix(optimizer): multi-parameters, tolerate overspecified partition_cut 2024-01-08 20:32:27 +01:00
rudy
c298408f26 feat(optimizer): multi-parameters, partitionning using norm2 2024-01-08 20:32:27 +01:00
rudy
b2f382f63a feat(optimizer): multi-parameters, do not bottleneck on the default partition 2024-01-08 20:32:27 +01:00
Jeremy Kun
bee264a1bb docs(compiler): fix readme 2024-01-08 17:08:05 +01:00
Bourgerie Quentin
da3a3b7c07 fix(compiler/benchmark): Use default compiler options for default command line tools 2024-01-08 14:45:54 +01:00
Bourgerie Quentin
f9c7a79183 refactor(compiler/frontend): Rename option to compress_evaluation_keys 2024-01-08 09:49:06 +01:00
rudy
9b685300b4 fix(frontend-python): ensure shift strategies coverage 2024-01-08 09:38:08 +01:00
rudy
b680f3137d fix(frontend-python): some tests are broken due to compiler and cp bug
related to multi output in multi parameter
2024-01-08 09:36:34 +01:00
rudy
0f819d864c fix(optimizer): accept composable for v0-no-dag and woppbs 2024-01-08 09:30:20 +01:00
Benoit Chevallier-Mames
c952d7b1f7 chore(frontend): using fhe.bits() feature in Game of Life example 2024-01-08 09:14:17 +01:00
Antoniu Pop
69efcee01b test(compiler): make benchmarks framework compatible with distributed execution. nightly-2024.01.06 2024-01-05 19:03:56 +00:00
Antoniu Pop
541a9fb2eb fix(compiler): distributed execution: fix dataflow runtime termination. 2024-01-05 19:03:56 +00:00
Antoniu Pop
b91cef6362 test(compiler): fix command line options for parallelization in end-to-end tests and benchmarks. 2024-01-05 19:03:56 +00:00
Antoniu Pop
96f2b4538e fix(compiler): dataflow: fix generation of the dataflow graph. 2024-01-05 19:03:56 +00:00
Antoniu Pop
196a3ae4af fix(compiler): distributed execution: fix key transfer to remote nodes. 2024-01-05 19:03:56 +00:00
Antoniu Pop
6eed9a8e9e fix(ci): restrict run of CP GPU tests to push on main only due to length. 2024-01-05 13:15:12 +00:00
Antoniu Pop
822316b3d2 feat(compiler): add mixed scheduling of SDFG graphs on CPU and GPU. 2024-01-05 13:15:12 +00:00
Antoniu Pop
5d3fb6b98d fix(compiler): disable loop parallelization for loops containing SDFG put/get operations. 2024-01-05 13:15:12 +00:00
Antoniu Pop
acf5780ee3 fix(compiler): handle splice streams (streams originating on device, used both on device and on host) in SDFG for GPU scheduling. 2024-01-05 13:15:12 +00:00
Andi Drebes
6b5baca515 fix(compiler): Batching: Fix hoisting of indexed ops with mixed offsets
For `ExtractSliceOp` and `InsertSliceOp`, the code performing the
hoisting of indexed operations in the batching pass derives the
indexes of the hoisted operation from the indexes provided by
`ExtractSliceOp::getOffsets()` and
`InsertSliceOp::getOffsets()`. However, these methods only return
dynamic indexes, such that operations with mixed, dynamic and static
offsets are hoisted incorrectly.

This patch replaces the invocations of `ExtractSliceOp::getOffsets()`
and `InsertSliceOp::getOffsets()` with invocations of
`ExtractSliceOp::getMixedOffsets()` and
`InsertSliceOp::getMixedOffsets()`, respectively in order to take into
account both static and dynamic indexes.
2024-01-05 13:15:12 +00:00
Andi Drebes
c24d9c9553 fix(compiler): Batching: Do not generate tensor.collapse_shape operations reproducing the same shape
The IR generated by the batching pattern introduces intermediate
tensor values omitting the batched dimensions for batched
operands. This happens uncondiationally, leading to the generation of
`tensor.collapse_shape` operations with the same output and inout
shape. However, verification for such operation fails, since the
verifier assumes that the rank of the resulting tensor is reduced at
least by one.

This commit modified the check in `flattenTensor`, such that no
flattening operation is generated if the input and output shapes would
be identical.
2024-01-05 13:15:12 +00:00
Andi Drebes
51f10e38b3 fix(compiler): Batching: Ensure identical order of indexing IVs in cleanup pattern
Currently, the cleanup pattern matches sequences of `tensor.extract` /
`tensor.extract_slice`, `tensor.insert` / `tensor.insert_slice` and
`scf.yield` operations that are embedded into perfect loop nests whose
IVs are referenced in quasi-affine expressions with constant
steps. The pattern ensures that the extraction and insertion operation
use the same IVs for indexing, but does not check whether they appear
in the same order.

However, the order in which IVs are used for indexing is crucial when
replacing the operations with `tensor.extract_slice` and
`tensor.insert_slice` operations in order to preserve the shape of the
slices and the order of elements.

For example, when the cleanup pattern is applied to the following IR:

```
 %c0 = arith.constant 0 : index
 %c1 = arith.constant 1 : index
 %c2 = arith.constant 2 : index
 %c3 = arith.constant 3 : index

 scf.for %i = %c0 to %c3 step %c1 ... {
   scf.for %j = %c0 to %c2 step %c1 ... {
      %v = tensor.extract ... [%i, %j]
      %t = tensor.insert ... [%j, %i]
      scf.yield %t
   }
   ...
 }
```

The extracted slice has a shape of 3x2, while the insertion should be
happening with a slice with the shape 2x3.

This commit adds an additional check to the cleanup pattern that
ensures that loop IVs are used for indexing in the same order and
appear the same number of times.
2024-01-05 13:15:12 +00:00
Andi Drebes
dbcfa92bd3 refactor(compiler): Batching: Do not shift / scale already normalized indexes
Normalization of indexes in the batching pass currently
unconditionally emits arithmetic operations to shift and scale indexes
regardless of whether these indexes are already normalized. This leads
to unnecessary subtractions with 0 and divisions by 1.

This commit introduces two additional checks to the code normalizing
indexes that prevent arithmetic operations to be emitted for indexes
that do not need to be shifted or scaled.
2024-01-05 13:15:12 +00:00
Bourgerie Quentin
1dec886770 feat(compiler/frontend-python): Expose default GPU CompilerOptions set and use it in concrete-python 2024-01-05 13:15:12 +00:00