Commit Graph

114 Commits

Author SHA1 Message Date
Umut
790d6ffa94 feat(compiler): remove p+1 requirement for clear values 2024-03-21 13:17:14 +03:00
Andi Drebes
97292ed85f test(compiler): Add tests for type inference on IR with scf.forall operations 2024-03-14 06:45:53 +01:00
Andi Drebes
d79c76a872 feat(compiler): Add support for tiling of linalg.generic operations
This adds support for the tiling of `linalg.generic` operations that
have only parallel iterators or only parallel iterators and a single
reduction dimension via the linalg tiling infrastructure (i.e.,
`mlir::linalg::tileToForallOpUsingTileSizes()` and
`mlir::linalg::tileReductionUsingForall()`).

This allows for the tiling of FHELinalg operations by first replacing
them with appropriate `linalg.generic` oeprations and then invoking
the tiling pass in the pipeline. In order for the tiling to take
place, tile sizes must be specified using the `tile-sizes` operation
attribute, either directly for `linalg.generic` operations or
indirectly for the FHELinalg operation, e.g.,

  "FHELinalg.matmul_eint_int"(%a, %b) { "tile-sizes" = [0, 0, 7] } : ...

Tiling of operations with a reduction dimension is currently limited
to tiling of the reduction dimension, i.e., the tile sizes for the
parallel dimensions must be zero.
2024-03-14 06:45:53 +01:00
Andi Drebes
13a5dff4fb fix(ci): Disable levelled tests {signed_,}mul_eint_Xbits for X >= 10 on MacOS
The tests `end_to_end_leveled.jit.loop_dagmulti.mul_eint_10bits.0` and
`end_to_end_leveled.jit.loop_dagmulti.signed_mul_eint_10bits.0`
reproducibly fail on the mac2.metal instance used by the CI due to
insufficient memory. This change disables all instances of these tests
with 10 or more bits of precision on MacOS.
2024-03-14 06:32:19 +01:00
Benoit Chevallier-Mames
e37a840e7e docs(compiler): adding API doc 2024-03-13 17:10:00 +01:00
Bourgerie Quentin
3043573922 refactor(compiler/tests): Move bug and boolean to specific yaml files 2024-03-12 16:57:06 +01:00
Bourgerie Quentin
1804081064 refactor(compiler): Refactor options naming of the end-to-end-test tool 2024-03-12 16:57:06 +01:00
Bourgerie Quentin
d3cb43b517 fix(compiler): Put dag-multi as default optimizer strategy 2024-03-12 16:57:06 +01:00
Bourgerie Quentin
2ac4f52ca5 feat(compiler/tests): Add random-tests options to end-to-end-test tool 2024-03-12 16:57:06 +01:00
Andi Drebes
b9589146f4 test(compiler): Add tests generating explicit optimizer partition frontiers 2024-03-07 15:42:26 +01:00
Alexandre Péré
9b5a2e46da feat(compiler): support multi-circuit compilation 2024-03-01 15:35:52 +01:00
Umut
29503dfc17 feat(compiler): fusing table lookups 2024-02-20 12:39:57 +01:00
Bourgerie Quentin
22bbdec086 fix(ci/compiler): Remove KeySetCache directory on mac os CI to avoid space disk issues 2024-02-20 09:17:13 +01:00
Alexandre Péré
c53985f112 fix(compiler): fix double free on aliased outputs 2024-02-19 16:14:12 +01:00
Alexandre Péré
d1b62462f2 fix(compiler): fix mac arm exception propagation
On Mac arm, the c api backing the python bindings does not propagate the
exceptions properly to the concretelang python module. This makes all
exceptions raised through `CompilerEngine.cpp` fall in the catch-all
case of the pybind exceptions handler.

Since there is no particular need for a public c api, we just remove it
from the bindings, and move all the content of `CompilerEngine.cpp`
directly in the `CompilerAPIModule.cpp` file.
2024-02-14 15:08:19 +01:00
Bourgerie Quentin
ebea2e3cae chore(ci): Reduce number of compiler test for macos 2024-02-13 17:02:46 +01:00
Andi Drebes
972eb962ee test(compiler): Add check tests for type inference
Add various check tests for type inference testing forward and
backward propagation, including propagation into nested regions.
2024-02-01 16:18:45 +01:00
Andi Drebes
bc171dde82 test(compiler): Run canonicalizer in TFHE parametrization tests 2024-02-01 16:18:45 +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é
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é
75d33d4f94 fix(optimizer): enhance error reported on non-composability 2024-01-18 14:03:35 +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
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
0f819d864c fix(optimizer): accept composable for v0-no-dag and woppbs 2024-01-08 09:30:20 +01:00
Antoniu Pop
69efcee01b test(compiler): make benchmarks framework compatible with distributed execution. 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
Bourgerie Quentin
15835719b9 fix(compiler/optimizer): Returns error for optimization strategy that doesn't support composition 2024-01-04 15:00:25 +01:00
Bourgerie Quentin
398af2783d test(compiler): Add disabled test on composition (to fix later) 2024-01-04 15:00:25 +01:00
Bourgerie Quentin
f3ec1976ef fix(compiler/optimizer): Returns NotComposable error if not lookup table in dag 2024-01-04 15:00:25 +01:00
Alexandre Péré
60da713312 feat(optimizer): adds support for function composition 2024-01-04 15:00:25 +01:00
Bourgerie Quentin
e69a9ca520 fix(compiler/tests): bad options in end-to-end-test in macos 2023-12-22 15:51:02 +01:00
Bourgerie Quentin
fc10062b4b test(compiler): Add --input-compression to the end-to-end-test 2023-12-22 15:51:02 +01:00
Bourgerie Quentin
4d1d7bde7d test(compiler): Add --simulation options to end-to-end-test tool 2023-12-22 15:51:02 +01:00
Bourgerie Quentin
c67fac4082 feat(compiler): Introduce input compression and use tfhe-rs as backend
- added --compress-input compiler option which forces the use of seeded
  bootstrap keys and keyswitch keys
- replaced the concrete-cpu FHE implementation with tfhe-rs

Co-authored-by: Nikita Frolov <nf@mkmks.org>
2023-12-22 15:51:02 +01:00
Bourgerie Quentin
0379f3676c fix(compiler/tests): Recreate the entire testCicuit when retrying a test as the keyset is also used by the clientProgram 2023-12-22 15:51:02 +01:00
Bourgerie Quentin
4a8356c18d feat(compiler/tests): Add optimizer-key-sharing option to the end-to-end tests tool 2023-12-22 15:51:02 +01:00
Bourgerie Quentin
8ecea9d625 fix(compiler/tests): Print values when a test fail 2023-12-22 15:51:02 +01:00
Alexandre Péré
e82a8f6ddb chore(compiler): fix broken retry for flaky tests 2023-12-18 15:54:25 +01:00
Bourgerie Quentin
23c721996a refactor(compiler/tests): Refactor internal test utils 2023-12-15 11:00:45 +01:00
rudy
687502d4e2 feat(compiler): tests showing ReLU scenario 2023-12-04 10:20:06 +01:00
rudy
34ffd6f97a feat(compiler): new ops, reinterpret_precision and lsb 2023-12-04 10:20:06 +01:00
Bourgerie Quentin
588075ddc8 test(compiler): Add retry for fixing some flaky tests 2023-11-16 12:48:58 +01:00
Bourgerie Quentin
09af803754 feat(compiler): Add support for multi output function up to python bindings 2023-11-13 09:22:54 +01:00
Alexandre Péré
e8ef48ffd8 feat(compiler): introduce concrete-protocol
This commit:
 + Adds support for a protocol which enables inter-op between concrete,
   tfhe-rs and potentially other contributors to the fhe ecosystem.
 + Gets rid of hand-made serialization in the compiler, and
   client/server libs.
 + Refactors client/server libs to allow more pre/post processing of
   circuit inputs/outputs.

The protocol is supported by a definition in the shape of a capnp file,
which defines different types of objects among which:
 + ProgramInfo object, which is a precise description of a set of fhe
   circuit coming from the same compilation (understand function type
   information), and the associated key set.
 + *Key objects, which represent secret/public keys used to
   encrypt/execute fhe circuits.
 + Value object, which represent values that can be transferred between
   client and server to support calls to fhe circuits.

The hand-rolled serialization that was previously used is completely
dropped in favor of capnp in the whole codebase.

The client/server libs, are refactored to introduce a modular design for
pre-post processing. Reading the ProgramInfo file associated with a
compilation, the client and server libs assemble a pipeline of
transformers (functions) for pre and post processing of values coming in
and out of a circuit. This design properly decouples various aspects of
the processing, and allows these capabilities to be safely extended.

In practice this commit includes the following:
 + Defines the specification in a concreteprotocol package
 + Integrate the compilation of this package as a compiler dependency
   via cmake
 + Modify the compiler to use the Encodings objects defined in the
   protocol
 + Modify the compiler to emit ProgramInfo files as compilation
   artifact, and gets rid of the bloated ClientParameters.
 + Introduces a new Common library containing the functionalities shared
   between the compiler and the client/server libs.
 + Introduces a functional pre-post processing pipeline to this common
   library
 + Modify the client/server libs to support loading ProgramInfo objects,
   and calling circuits using Value messages.
 + Drops support of JIT.
 + Drops support of C-api.
 + Drops support of Rust bindings.

Co-authored-by: Nikita Frolov <nf@mkmks.org>
2023-11-09 17:09:04 +01:00
youben11
6a41c31370 fix(compiler): revert to old MANP values
this commit need to be reverted when we start computing the MANP on
linalg.genric ops
2023-10-03 16:17:27 +01:00
youben11
48b2d884c6 fix(compiler): use args to have an init MANP of 1
As the MANP value of zero tensors becomes 0 (instead of 1 previously) we
switch to using argument
2023-10-03 16:17:27 +01:00
youben11
88dd13756a feat(compiler): support linalg.generic in the MANP Analysis 2023-10-03 16:17:27 +01:00
youben11
e4835bd002 feat(compiler): support woppbs in simulation 2023-09-28 09:29:48 +01:00
Umut
49dc0578f4 fix(compiler-bindings): don't crash on unknown location formats 2023-09-20 15:01:58 +02:00