Commit Graph

104 Commits

Author SHA1 Message Date
Quentin Bourgerie
d0308dda43 chore: Use parameters curves generated files and expose security level options 2023-01-30 15:14:53 +01:00
tmontaigu
ee00672996 feat(rust): partially bind CircuitGate, EncryptionGate
This adds partial bindings of the CircuitGate, EncrytionGate
and Encoding types for the rust frontend
2023-01-24 15:49:44 +01:00
tmontaigu
8e8651c6a6 chore(rust): rename crate
Renames the crate from `concrete_compiler_rust` to
`concrete-compiler`.

- The `_rust` is removed as its redundant, the crate is a rust project.
- The `_` are replaced with `-` as its the naming scheme for our other
  crates
2023-01-23 11:01:23 +01:00
tmontaigu
ddf905b4db chore(rust): impl std::error::Error for CompilerError
All types which are errors should impl
the std::error::Error trait.

So that for example they could be put inside
a `Box<dyn std::error::Error>`.
2023-01-18 09:55:47 +01:00
tmontaigu
7c19da974a chore(rust): remove 'get_' prefix from getters
In rust the convention/guideline for getters is not to prefix them with `get_`.

This commit changes any `get_` getter function to follow that guideline.

See the API Guidelines: https://rust-lang.github.io/api-guidelines/naming.html?highlight=getter#getter-names-follow-rust-convention-c-getter
2023-01-17 15:24:59 +01:00
tmontaigu
e1171cf55f chore(rust): mark BufferRef::new as unsafe 2023-01-17 15:24:52 +01:00
tmontaigu
6f0fbc8a3d feat(rust): add from_tensor_[u32|u16] 2023-01-15 22:57:31 +01:00
tmontaigu
c9f3983577 fix(rust): serialize functions take self by ref 2023-01-14 11:45:58 +01:00
tmontaigu
6348eda50e fix(rust): properly give an array of location to mlirBlockCreate
The MlirBlock constructor expects one location per input argument
of the block.
2023-01-13 20:18:06 +01:00
tmontaigu
d188cfae54 fix(rust): change tinfo linking to ncurses
- tinfo is a part of the ncurses project.
- tinfo does not seem easily installable stand alone
  (no brew install tinfo, no dnf install tinfo-devel, etc)
  but installing ncurses is possible and generally makes tinfo
  'findable'
- on macos (M1 mac) it seems that even with ncurses installed
  tinfo is not found, but linking to ncurses fixes the problem
2023-01-13 19:32:50 +01:00
youben11
91d41a2ff8 fix: add call to init dfr from python
Co-authored-by: Antoniu Pop <antoniu.pop@zama.ai>
2023-01-11 14:45:14 +01:00
youben11
8c6a0859cd refactor(rust): add Rust wrapper for every CStruct
we want to wrap CStructs in RustStructs to own them, and free memeory
when they are no longer used. Users won't have to deal with the direct
binded CAPI, but the new wrappers
2023-01-02 12:10:14 +01:00
rudy
bb756a6426 fix: default is global-error-probability=1/100_000 2022-12-14 09:21:18 +01:00
Quentin Bourgerie
d15c9822db fix(rust-bindings): Fix rust bindings after raise-encoding 2022-12-13 17:01:52 +01:00
Antoniu Pop
0dbb86bb36 feat(compiler): add lowering and bufferization for SDFG dialect, generate code to Stream Emulator API. 2022-12-08 14:54:14 +01:00
Andi Drebes
3da32560b7 feat(compiler): Add pass converting operations into SDFG processes
This adds a new pass `ExtractSDGOps`, which scans a function for
operations that implement `SDFGConvertibleOpInterface`, replaces them
with SDFG processes and constructs an SDFG graph around the processes.

Initialization and teardown of the SDFG graph are embedded into the
function and take place at the beginning of the function and before
the function's terminator, respectively.

The pass can be invoked using concretecompiler by specifying the new
compilation option `--emit-sdfg-ops` or programmatically on a
`CompilerEngine` using the new compilation option `extractSDFGOps`.
2022-12-08 14:54:14 +01:00
Andi Drebes
b7805f00d3 feat(compiler): Add op interface SDFGConvertibleOpInterface
This adds a new operation interface `SDFGConvertibleOpInterface` that
allows an operation to specify how it is converted to an SDFG
process. The interface consists of a single method `convert` that
receives as the arguments the DFG created using `SDFG.init`, a set of
SDFG input streams corresponding to the operands and a set of output
streams for results. The order of the input and output streams
corresponds to the order of the operands and output values,
respectively.
2022-12-08 14:54:14 +01:00
Andi Drebes
9f3615513b feat(compiler): Add new dialect SDFG for static data flow graphs
This adds a new dialect called "SDFG" for data flow graphs. An SDFG
data flow graph is composed of a set of processes, connected through
data streams. Special streams allow for data to be injected into and
to be retrieved from the data flow graph.

The dialect is intended to be lowered to API calls that allow for
offloading of the graph on hardware accelerators.
2022-12-08 14:54:14 +01:00
youben11
65235408bc chore: build rust package using install dir 2022-12-08 07:45:55 +01:00
tmontaigu
f36e1fe882 feat(CAPI): use const ptrs to create tensor lambda arguments 2022-12-07 15:55:52 +01:00
youben11
7d785eebec feat(rust): support serialization 2022-12-05 17:17:53 +01:00
youben11
fbc60097ab refactor(rust): resolve artifacts' path and better stringRef mgmnt 2022-12-05 17:17:53 +01:00
youben11
f05b1bd1ea feat(rust): support execution with tensor args 2022-12-02 14:03:02 +01:00
youben11
16f3b0bbf6 feat(rust): manage erros coming from compiler
C struct now contains an additonal char* pointer, which can be either
NULL in case there is no error, or a buffer containing the error
message. It's the responsability of destructor function to free that
memory.
2022-12-02 14:03:02 +01:00
youben11
15b4aac0a1 feat(rust): support keygen, encryption, execution 2022-12-02 14:03:02 +01:00
youben11
7f55385ea2 feat(rust): load server lambda for later execution 2022-12-02 14:03:02 +01:00
youben11
b00115f4ae feat(rust): compile mlir into library
CAPI covering a wider API of the Support library.
Better error handling. Could also be improved by returning an error
message back from C to rust (left TODO).
2022-12-02 14:03:02 +01:00
Quentin Bourgerie
5d89ad0f84 enhance(feedback): Add p_error and global_perror to the compiler feedback 2022-11-24 09:59:19 +01:00
Umut
722e4d2eba feat: give crt decomposition feedback 2022-11-24 09:59:19 +01:00
youben11
96c958bd06 feat(rust): add compiler module with round_trip feature 2022-11-23 14:01:25 +01:00
youben11
824aaaeff5 refactor(rust): separate generated CAPI under ffi module 2022-11-23 14:01:25 +01:00
youben11
c0d007e396 refactor: separate python bindings wrapper from CAPI
current CAPI of CompilerEngine isn't really a CAPI. It's initial need
was for the python bindings to have access to the CompilerEngine through
a convenient API. So we now make a clear separation of CAPI and python
wrappers. So we now have wrappers functions, that can be implemented
using C/C++, and will be exposed to python via pybind11. And we have a
CAPI (still need fixing as it still contains C++ code), that can be used
as is, or to build bindings for other languages (such as Rust).
2022-11-23 14:01:25 +01:00
Mayeul@Zama
0657767bae style(cmake): run format_cmake.sh 2022-11-18 15:15:41 +01:00
youben11
52d5d908bb test(rust): complete tests of rust bindings
updated also the API to make it easier to use by:
- creating MLIR components from native rust types instead of require
  MLIR components in the API
- adding helpers around the creation of standard dialects
2022-11-17 09:54:51 +01:00
youben11
0a57af37af feat(rust): add API for FHEDialect's op creation 2022-11-17 09:54:51 +01:00
youben11
ff3f1afd59 refactor(rust): separate API into modules
- mlir module contains the MLIR API and generic helper functions
- fhe module contains helper functions for the FHE dialect
2022-11-17 09:54:51 +01:00
youben11
5e1a6f0069 feat(rust): complete FHE dialect API
helper functions to create all operations of the FHE dialect
2022-11-17 09:54:51 +01:00
youben11
472e762fbf feat(rust): enhance API to create func with FHE dialect 2022-11-09 12:53:25 +01:00
youben11
eabd8b959d fix(CAPI): remove Cpp code from CAPI
this required to have a CAPI that when asked for types, returns a
structure that can report if an error was faced during type creation.
This is required since a failure at that stage in the compiler would
lead to a segfault in the python bindings for example, and we want to be
able to handle this scenario gracefully.
2022-11-09 12:53:25 +01:00
tmontaigu
6b0f6e9f10 feat(rust): print mlir string repr directly into a String
Instead of overriding the process stderr to get
the string representation from mlir we can can
directly capture in into a string using mlir's
printOperation.

Another problem with overriding stderr is that
each `#[test]` runs as a different thread meaning that
as soon as we have 2+ tests the tests could panic
due to conflicts/races between the different overrides.

This also moves the expected string directly into the test
as a literal.
2022-11-03 22:16:24 +01:00
youben11
0ac21fd037 feat: add rust bindings
The rust bindings are intented to access both LLVM/MLIR CAPI as well as
the concrete-compiler one. This initial commit provide the API for
LLVM/MLIR only. Tests should be used as an example to how to generate a
valid DAG of operations in MLIR.
2022-11-02 14:46:38 +01:00
Quentin Bourgerie
dbfde466bc feat(python): Add compilation feedback to the python bindings 2022-09-14 10:03:25 +02:00
Quentin Bourgerie
f4673e8276 feat(compiler): First draft or compilation feedback 2022-09-14 10:03:25 +02:00
rudy
48bf6e2696 feat(optimizer): report or warn using global p-error 2022-09-12 17:22:38 +02:00
Quentin Bourgerie
30df69366d enhance(python-bindings): Expose the option to set or not the v0 strategy of the optimizer. 2022-09-01 10:37:00 +02:00
Quentin Bourgerie
9257404f5f fix(python-bindings): Support np.array with dtype upt to 64 bits 2022-08-19 14:15:21 +02:00
Mayeul@Zama
928a44d243 chore(ci): enforce ending files with a newline 2022-06-16 17:04:25 +02:00
Andi Drebes
45577fb79e Rebase onto llvm-project f69328049e9e with local changes
This commit rebases the compiler onto commit f69328049e9e from
llvm-project.

Changes:

* Use of the one-shot bufferizer for improved memory management

* A new pass `OneShotBufferizeDPSWrapper` that converts functions
  returning tensors to destination-passing-style as required by the
  one-shot bufferizer

* A new pass `LinalgGenericOpWithTensorsToLoopsPass` that converts
  `linalg.generic` operations with value semantics to loop nests

* Rebase onto a fork of llvm-project at f69328049e9e with local
  modifications to enable bufferization of `linalg.generic` operations
  with value semantics

* Workaround for the absence of type propagation after type conversion
  via extra patterns in all dialect conversion passes

* Printer, parser and verifier definitions moved from inline
  declarations in ODS to the respective source files as required by
  upstream changes

* New tests for functions with a large number of inputs

* Increase the number of allowed task inputs as required by new tests

* Use upstream function `mlir_configure_python_dev_packages()` to
  locate Python development files for compatibility with various CMake
  versions

Co-authored-by: Quentin Bourgerie <quentin.bourgerie@zama.ai>
Co-authored-by: Ayoub Benaissa <ayoub.benaissa@zama.ai>
Co-authored-by: Antoniu Pop <antoniu.pop@zama.ai>
2022-06-14 14:35:25 +02:00
youben11
1354759884 chore: rename refs to main branch 2022-06-09 09:19:06 +01:00
youben11
5636342097 feat: add option to enable/disable optimization 2022-06-01 14:35:12 +01:00