Commit Graph

35 Commits

Author SHA1 Message Date
Antoniu Pop
7c59c64564 fix(ci): [distributed CI] fix workflow and move build/test outside docker (needed to run on multiple nodes). 2024-04-12 09:56:30 +02:00
Antoniu Pop
312f505063 feat(ci): add distributed CI test run target 2024-03-18 13:39:03 +00:00
Bourgerie Quentin
e0a7aaa479 test(compiler): Run all tests only on default options and run random tests on several options to tests 2024-03-12 16:57:06 +01:00
Antoniu Pop
da1f30023f feat(compiler): upgrade HPX library version to 1.9.1. 2024-02-23 10:31:18 +00: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
Alexandre Péré
e82a8f6ddb chore(compiler): fix broken retry for flaky tests 2023-12-18 15:54:25 +01:00
Bourgerie Quentin
39e27d3766 chore(compiler/bench): Remove useless bench 2023-12-15 11:00:45 +01:00
Bourgerie Quentin
23c721996a refactor(compiler/tests): Refactor internal test utils 2023-12-15 11:00:45 +01:00
Bourgerie Quentin
588075ddc8 test(compiler): Add retry for fixing some flaky tests 2023-11-16 12:48:58 +01:00
Andi Drebes
ed8d1f3857 fix(compiler): Force linking of libomp with libstdc++ in debug builds
Debug builds preserve assertions in libomp, which are implemented
using code form libstdc++. However, the build rules for libomp
explicitly prevent the library from being linked with libstdc++ by
default, resulting in a linker error for debug builds.

This patch sets the option `LIBOMP_USE_STDCPPLIB` for libomp to `ON`
for debug builds in order to force linking with libstdc++.
2023-11-16 11:09:52 +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
rudy
a28a7bf397 feat(compiler): bench, activate levelled ops 2023-09-08 10:03:42 +02:00
aquint-zama
25754a656a docs(common): add FHE dialects autogenerated docs 2023-07-13 14:33:54 +02:00
Andi Drebes
934e25de0d test(compiler): Let entire Makefile rules for tests / benchmarks fail if subcommand fails
The commands for the Makefile rules `run-end-to-end-tests` and
`run-cpu-benchmarks` are generated using the `$(foreach)` builtin
function with a trailing `;` for each subcommand. The result is a
sequence of commands separated by `;`, which only fails if the last
command fails. This causes any code for which the last test /
benchmark passes, but for which any of the preceding subcommands fails
to pass the CI and thus to leave failing tests undiscovered.

This commit adds a trailing `&& exit $$?` to each command, such that
the entire sequence fails if a single command fails.
2023-06-26 22:49:56 +02:00
Bourgerie Quentin
f7f94a1663 feat(compiler/client-lib): Implement ValueExporter to allows partial encryption 2023-06-09 13:01:27 +02:00
Quentin Bourgerie
5df44ad6f8 chore(compiler/build): Remove script to get BUILD_DIR 2023-05-17 13:57:37 +02:00
Andrei Stoian
817ee6b637 feat(compiler): add matmul eint eint op 2023-05-15 11:36:47 +02:00
Mayeul@Zama
3558ba5586 feat(backend-cpu): choose fastest aes implementation at runtime 2023-04-24 15:02:22 +02:00
Mayeul@Zama
8033c934f3 chore(compiler): remove old makefile targets 2023-04-20 15:11:38 +02:00
Quentin Bourgerie
dfa0c8b202 feat(compiler): Add dag-multi benchmark to the run-cpu-benchmark target 2023-04-20 09:46:24 +02:00
aPere3
85c29c2e39 chore(compiler): move end-to-end linalg tests to fixtures 2023-04-18 13:36:15 +02:00
aPere3
141efc8db2 bench(compiler): Add e2e benchmark for rounded PBS 2023-04-14 15:01:18 +02:00
Quentin Bourgerie
3ada182c22 test(compiler): Enable dag-multi tests on all yaml tests 2023-04-14 15:01:18 +02:00
rudy
311ac8ce99 feat(compiler,ci): parallel tests 2023-04-14 15:01:18 +02:00
aPere3
0ba154fca8 test(compiler): add multi precision tests 2023-04-14 15:01:18 +02:00
Agnes Leroy
df5f1837fc test(compiler): add test for N = 16384 on GPU 2023-03-24 15:29:43 +01:00
Quentin Bourgerie
67e2518df9 chore(compiler): Build rust libraries with target-feature 2023-03-23 15:54:30 +01:00
youben11
23bfb7f00a tests: add option to minimize tests
also removes 80 bits of security tests
2023-03-21 07:21:56 +01:00
Mayeul@Zama
570ad78442 cleanup: remove concrete-core references 2023-03-15 10:55:13 +01:00
Andi Drebes
c8c969773e Rebase onto llvm-project 465ee9bfb26d with local changes
This commit rebases the compiler onto commit 465ee9bfb26d from
llvm-project with locally maintained patches on top, i.e.:

  * 5d8669d669ee: Fix the element alignment (size) for memrefCopy
  * 4239163ea337: fix: Do not fold the memref.subview if the offset are
                  != 0 and strides != 1
  * 72c5decfcc21: remove github stuff from llvm
  * 8d0ce8f9eca1: Support arbitrary element types in named operations
                  via attributes
  * 94f64805c38c: Copy attributes of scf.for on bufferization and make
                  it an allocation hoisting barrier

Main upstream changes from llvm-project that required modification of
concretecompiler:

  * Switch to C++17
  * Various changes in the interfaces for linalg named operations
  * Transition from `llvm::Optional` to `std::optional`
  * Use of enums instead of string values for iterator types in linalg
  * Changed default naming convention of getter methods in
    ODS-generated operation classes from `some_value()` to
    `getSomeValue()`
  * Renaming of Arithmetic dialect to Arith
  * Refactoring of side effect interfaces (i.e., renaming from
    `NoSideEffect` to `Pure`)
  * Re-design of the data flow analysis framework
  * Refactoring of build targets for Python bindings
  * Refactoring of array attributes with integer values
  * Renaming of `linalg.init_tensor` to `tensor.empty`
  * Emission of `linalg.map` operations in bufferization of the Tensor
    dialect requiring another linalg conversion pass and registration
    of the bufferization op interfaces for linalg operations
  * Refactoring of the one-shot bufferizer
  * Necessity to run the expand-strided-metadata, affine-to-std and
    finalize-memref-to-llvm passes before converson to the LLVM
    dialect
  * Renaming of `BlockAndValueMapping` to `IRMapping`
  * Changes in the build function of `LLVM::CallOp`
  * Refactoring of the construction of `llvm::ArrayRef` and
    `llvm::MutableArrayRef` (direct invocation of constructor instead
    of builder functions for some cases)
  * New naming conventions for generated SSA values requiring rewrite
    of some check tests
  * Refactoring of `mlir::LLVM::lookupOrCreateMallocFn()`
  * Interface changes in generated type parsers
  * New dependencies for to mlir_float16_utils and
    MLIRSparseTensorRuntime for the runtime
  * Overhaul of MLIR-c deleting `mlir-c/Registration.h`
  * Deletion of library MLIRLinalgToSPIRV
  * Deletion of library MLIRLinalgAnalysis
  * Deletion of library MLIRMemRefUtils
  * Deletion of library MLIRQuantTransforms
  * Deletion of library MLIRVectorToROCDL
2023-03-09 17:47:16 +01:00
Antoniu Pop
604d993f28 fix(DFRuntime): fix make_ready_future compilation with GCC 12+ (wrt. -Werror=use-after-free). 2023-03-09 16:34:46 +01:00
Quentin Bourgerie
6cd9fa6eff chore: concrete-optimizer is no more build by make 2023-03-06 17:19:39 +01:00
Quentin Bourgerie
a279cbe88e chore: Move llvm-project in third_party 2023-03-06 10:50:21 +01:00
Quentin Bourgerie
f975415e86 chore: Integrate concrete-compiler to the mono-repo 2023-03-03 09:20:01 +01:00