Commit Graph

388 Commits

Author SHA1 Message Date
Quentin Bourgerie
d1ddd60a23 fix: Fixing the MANP computation for conv2d (close #883) 2023-01-19 13:32:59 +01:00
youben11
95d49f4657 feat: add boolean types/ops in FHE dialect 2023-01-18 09:13:26 +01:00
rudy
456e1952f5 fix: not private side effect in woppbs wrapper
Fix #865
2023-01-12 17:15:26 +01:00
rudy
bea7c6c1f6 fix: force a test to native encoding 2023-01-04 17:41:49 +01:00
Quentin Bourgerie
4e53b83045 test: Report bug 846 introduced by loop coalesce 2023-01-02 12:04:34 +01:00
rudy
ed2adceafa test: tensorized test/bench rely on p-error 2022-12-14 09:21:18 +01:00
rudy
de779b2f6f fix: display compilation error in benchmark
the checking of llvm expected was not correct
2022-12-14 09:21:18 +01:00
Quentin Bourgerie
19fdbf652e fix(compiler): The crt loops are unary and should be init by a alloc_tensor 2022-12-13 17:01:52 +01:00
aPere3
2fd9b6f0e3 refactor(encodings): raise plaintext/lut encodings higher up in the pipeline 2022-12-13 17:01:52 +01:00
rudy
b742ac35ae fix(ci): force crt for 9, 10, 11 for table lookup 2022-12-13 13:21:30 +01:00
Andi Drebes
e2e6df322e feat(compiler): Add support for full unrolling of loops with SDFG-convertible ops
This adds a new option `--unroll-loops-with-sdfg-convertible-ops`,
which causes loops containing SDFG-convertible operations to be fully
unrolled upon the extraction of SDFG-operations using the
`--emit-sdfg-ops` switch. This avoids constant roundtrips between an
SDFG-capable accelerator and the host during execution of a loop.

The option is limited to `scf.for` loops with static bounds and a
static step size. Since full unrolling of loops with large bounds
results in a large number of operations, the option is disabled by
default.
2022-12-13 12:03:51 +01:00
Quentin Bourgerie
607457d34a fix(compiler): CRT multiplication with negative value (close: #834) 2022-12-09 17:28:03 +01:00
Quentin Bourgerie
07aa334d8d chore(benchmarks): Refactor the benchmark tools 2022-12-09 09:51:23 +01:00
Antoniu Pop
fa1b2dc056 test(SDFG): add unit tests for SDFG and stream emulator. 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
Quentin Bourgerie
f552fa59e0 format: Cmake 2022-12-07 21:32:01 +01:00
Quentin Bourgerie
9cf506b0aa chore(tests): Add testing for gpu 2022-12-07 21:32:01 +01:00
Quentin Bourgerie
351bab0bc9 chore(tests): Add a make target for testing gpu 2022-12-07 21:32:01 +01:00
Quentin Bourgerie
735e78c141 chore(bench): Use batched concrete operators for gpu benchmarks 2022-12-07 21:32:01 +01:00
Quentin Bourgerie
33a0d1b9e9 chore(bench): Add a first warmup call 2022-12-07 21:32:01 +01:00
David Testé
2c48bdd9fe test(benchmark): execute on-demand benchmarks with gpu backend
When this type of benchmarks is triggered, only the tests that
benefits from GPU acceleration are run on a specific AWS EC2
instance. Note that this instance (p3.2xlarge) is not a bare metal
one, so performance may variate due to hypervisor controlling the
machine.
2022-12-07 21:32:01 +01:00
Quentin Bourgerie
90361f0b95 fix/chore: Remove custom gpu deleted target for tests 2022-12-07 21:32:01 +01:00
Quentin Bourgerie
b9ea163704 test(bench/gpu): Activate loop parallelism for e2e benchmark of gpu 2022-12-07 21:32:01 +01:00
rudy
f0457f74f2 fix: missing bench for 16bits tlu 2022-12-07 10:13:14 +01:00
rudy
75dd26d0ab feat: bench do not keygen on all keys 2022-12-05 13:57:54 +01:00
Quentin Bourgerie
07c1e8347e refactor(tests): Refactor test tools to easiest run tests with description files and different compilation options 2022-12-05 13:57:54 +01:00
Quentin Bourgerie
1f45b9dfa5 fix(compiler): Do not rely on the input type on ConcreteToBConcrete conversion as it could be already rewritten by a previous pattern (close #809) 2022-12-03 04:19:37 +01:00
Quentin Bourgerie
50973a39bd refactor(compiler): Remove async offloading of BS/KS 2022-11-30 10:29:19 +01:00
Quentin Bourgerie
9e16f31b87 refactor(bconcrete): Separate bufferization and CAPI call generation 2022-11-30 10:29:19 +01:00
Quentin Bourgerie
3efa8eb2a9 refactor(tests): Use f-strings in linalg_apply_lookup_table generator 2022-11-30 10:02:07 +01:00
Quentin Bourgerie
6eb4cec706 fix(wopbs): Fixing woppbs with tensor operators (close #789)
- Missing offset in woppbs routine
- Better error message for check of tensor result in end to end fixture
- Modify fixture generator for testing purpose
2022-11-30 10:02:07 +01:00
Quentin Bourgerie
3bade6603a fix(compiler): Fix lowering of tensor.from_elements with crt 2022-11-24 16:30:37 +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
Andi Drebes
fd362342f5 fix(compiler): Batching: Emit collapse/expand shape operations only for rank > 1
The batching pass passes operands to the batched operation as a flat,
one-dimensional vector produced through a `tensor.collapse_shape`
operation collapsing all dimensions of the original tensor of
operands. Similarly, the shape of the result vector of the batched
operation is expanded to the original shape afterwards using a
`tensor.expand_shape` operation.

The pass emits the `tensor.collapse_shape` and `tensor.expand_shape`
operations unconditionally, even for tensors, which already have only
a single dimension. This causes the verifiers of these operations to
fail in some cases, aborting the entire compilation process.

This patch lets the batching pass emit `tensor.collapse_shape` and
`tensor.expand_shape` for batched operands and batched results only if
the rank of the corresponding tensors is greater than one.
2022-11-21 14:53:43 +01:00
David Testé
3c2a75186f chore(ci): run ml benchmarks in a matrix with slab
This CI "feature" is meant to circumvent the 6 hours hard-limit
for a job in GitHub Action.
The benchmark is done using a matrix which is handled by Slab.
Here's the workflow:

  1. ML benchmarks are started in a fire and forget fashion via
     start_ml_benchmarks.yml
  2. Slab will read ci/slab.toml to get the AWS EC2 configuration
     and the matrix parameters
  3. Slab will launch at most max_parallel_jobs EC2 instances in
     parallel
  4. Each job will trigger ml_benchmark_subset.yml which will run
     only one of the generated YAML file via make generate-mlbench,
     based on the value of the matrix item they were given.
  5. As soon as a job is completed, the next one in the matrix
     will start promptly.

This is done until all the matrix items are exhausted.
2022-11-21 11:25:40 +01:00
Quentin Bourgerie
8e4be10eb9 chore(bench): Better number of ct for benchmarks 2022-11-21 11:18:23 +01:00
Mayeul@Zama
0657767bae style(cmake): run format_cmake.sh 2022-11-18 15:15:41 +01:00
Andi Drebes
84e0742fbe test(compiler): Add check tests for batching pass 2022-11-18 12:06:07 +01:00
Andi Drebes
ef26c73cb8 test(compiler): Add end-to-end test for batched operations
This adds a new end-to-end test `apply_lookup_table_batched`, which
forces batching of Concrete operations when invoking the compiler
engine, indirectly causing the `concrete.bootstrap_lwe` and
`concrete.keyswitch_lwe` operations generated from the
`FHELinalg.apply_lookup_table` operation of the test to be batched
into `concrete.batched_bootstrap_lwe` and
`concrete.batched_keyswitch_lwe` operations. The batched operations
trigger the generation of calls to batching wrapper functions further
down the pipeline, effectively testing the lowering and implementation
of batched operations altogether.
2022-11-18 12:06:07 +01:00
Antoniu Pop
c5ceccaeee tests: disable dataflow tests when compiler not built with dataflow support. 2022-11-17 16:37:44 +00:00
rudy
76c58c6305 fix: optimizer AST update 2022-11-16 11:44:46 +01:00
rudy
1bce0f3c01 fix: error rate test, no p_error overriding global_p_error 2022-11-14 11:08:18 +01:00
Quentin Bourgerie
84041557ab enhance(bench): Add benchmark generator for leveled operators 2022-11-08 14:27:30 +01:00
Quentin Bourgerie
0787eeb7e9 fix(bench): Fix linalg apply_lookup table generator that didn't well print separator 2022-11-04 15:42:46 +01:00
Quentin Bourgerie
ec0f49431b chore(bench): Rename default options to cpu 2022-11-04 11:03:19 +01:00
Quentin Bourgerie
46ec919abf fix(bench): Compiler options was badly set 2022-11-04 11:03:19 +01:00
rudy
018684fe2a chore: activate Wall Werror 2022-11-04 10:44:46 +01:00
David Testé
d1db4a5e45 tests(benchmarks): reduce number of test cases to speed-up execution
Bench just one compilation option for automatic benchmarks. Only 'loop'
option is tested to take advantage of hardware with a lot of available
CPUs. Running benchmarks with 'default' option is suboptimal for this
kind of hardware since it uses only one CPU.

This also remove time consuming MNIST test, as it should be in ML benchmarks.

Moreover Makefile is fixed to use provided Python executable instead of
relying on system one to generate MLIR Yaml files.
2022-11-03 19:07:39 +01:00
rudy
c684d658dc fix: use global p error for error rate test 2022-10-21 09:24:59 +02:00