Commit Graph

36 Commits

Author SHA1 Message Date
Andi Drebes
73fd6c5fe7 refactor(compiler): FHE to TFHE: Use OpConversionPattern for dialect conversion
Use `OpConversionPattern` instead of `OpRewritePattern` for operation
conversion during dialect conversion. This makes explicit and in-place
type conversions unnecessary, since `OpConversionPattern` already
properly converts operand types and provides them to the rewrite rule
through an operation adaptor.

The main contributions of this commit are the two class templates
`TypeConvertingReinstantiationPattern` and
`GenericOneToOneOpConversionPattern`.

The former allows for the definition of a simple replacement rule that
re-instantiates an operation after the types of its operands have been
converted. This is especially useful for type-polymorphic operations
during dialect conversion.

The latter allows for the definition of patterns, where one operation
needs to be replaced with a different operation after conversion of
its operands.

The default implementations for the class templates provide
conversions rules for operations that have a generic builder method
that takes the desired return type(s), the operands and (optionally) a
set of attributes. How attributes are discarded during a conversion
(either by omitting the builder argument or by passing an empty set of
attributes) can be defined through specialization of
`ReinstantiationAttributeDismissalStrategy`.

Custom replacement rules that deviate from the scheme above should be
implemented by specializing
`TypeConvertingReinstantiationPattern::matchAndRewrite()` and
`GenericOneToOneOpConversionPattern::matchAndRewrite()`.
2023-02-01 14:27:10 +01:00
Mayeul@Zama
0657767bae style(cmake): run format_cmake.sh 2022-11-18 15:15:41 +01:00
Antoniu Pop
2cf80e76eb feat(compiler): move the lowering of dataflow tasks to RT dialect before bufferization. 2022-09-15 11:55:37 +01:00
Antoniu Pop
93802d128b fix(dfr-compiler): clone memref task arguments using identity maps for serialization. 2022-08-12 16:35:11 +02:00
Antoniu Pop
a2ff61d1d7 cleanup(compiler): remove no longer needed function getAliasedUses. 2022-08-04 17:06:09 +01:00
Antoniu Pop
f9ce4d046b fix(testing-dfr): fix startup and ternimation call parameters to allow sequential test execution on root node when the runtime is instantiated for distributed execution. 2022-08-04 17:06:09 +01:00
Antoniu Pop
f541af8a8f fix(compiler): use ViewLikeOpInterface instead of checking specific op types. 2022-08-04 17:06:09 +01:00
Antoniu Pop
f051642f1f cleanup(compiler): rename getSizeInBytes function to match updated functionality. 2022-08-04 17:06:09 +01:00
Antoniu Pop
46b1dbcd34 cleanup(compiler): fix unused variable warning. 2022-08-04 17:06:09 +01:00
Antoniu Pop
20d19c2161 cleanup(dfr): remove unused key ids and unranked memref labels. 2022-08-04 17:06:09 +01:00
Antoniu Pop
da9dbcef1d feat(compiler): coarsen task granularity by aggregating lightweight operations. 2022-08-04 17:06:09 +01:00
Antoniu Pop
ba60d74da0 feat(dfr): add timing measurements. 2022-08-04 17:06:09 +01:00
Antoniu Pop
1bb3d04059 fix(dfr): broadcast evaluation keys early to avoid locking in HPX helper threads. 2022-08-04 17:06:09 +01:00
Antoniu Pop
fbca52f4a0 feat(dfr): add memory management for futures and associated data. 2022-08-04 17:06:09 +01:00
Antoniu Pop
615109d432 fix(dfr): simplify initialization and add namespaces where possible. 2022-08-04 17:06:09 +01:00
Antoniu Pop
bca85ea2b6 feat(compiler): delay the point where futures are waited on, when they are being synchronized back to their parent context, to the point of use. 2022-08-04 17:06:09 +01:00
Antoniu Pop
954b2098c6 feat(runtime): enable distributed execution. 2022-08-04 17:06:09 +01:00
youben11
63d84a3e4a refactor: remove code related to our custom conv2D named op
it was introduced as a workaround while linalng couldn't support other
types than int/float
2022-08-04 11:19:18 +01:00
Andi Drebes
85ebc0cb7a Rebase onto llvm-project 3f81841474fe with patch for arbitrary types in linalg named ops
Rebase to llvm-project at 3f81841474fe with a pending upstream patch
for arbitrary element types in linalg named operations.

Co-authored-by: Ayoub Benaissa <ayoub.benaissa@zama.ai>
2022-07-27 22:45:38 +02:00
youben11
f4166a4973 docs: use consistent style for comment blocks
prefix comment blocks with ///
2022-07-07 16:11:19 +01:00
Antoniu Pop
261e59d2b4 feat(dfr): add more operations to be converted to tasks. 2022-06-28 17:11:12 +01:00
Antoniu Pop
26084a68aa fix(compiler): delay all memref deallocation calls introduced by the bufferizer and that are made into futures until after the synchronization point. 2022-06-28 17:11:12 +01:00
Quentin Bourgerie
9dd776533a cleanup(compiler): Remove useless concrete types, simplify print and parse, and remove BConcreteToBConcreteCAPI pass 2022-06-24 11:00:08 +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
Antoniu Pop
d40ae16273 fix(compiler): make task work functions unique even across separate translation units. 2022-04-11 15:05:22 +01:00
Mayeul@Zama
b76839b8c9 fix(cmake): fix cmake dependencies 2022-03-30 17:20:20 +02:00
Mayeul@Zama
9ccced7d93 fix(cmake): unify tablegen headers generation dependencies 2022-03-30 17:20:20 +02:00
Quentin Bourgerie
254b4dc530 enhance(compiler): Enable deallocation pass to free temporary buffers 2022-03-28 09:41:54 +02:00
youben11
2009ee1c94 chore: changing ref to repo after its renaming
also formatting and update the check_license script to match that
2022-01-06 12:40:10 +01:00
youben11
f1161f7f6d chore: formatting
Quick fix due to ordering of includes, had to add #include
<mlir/Transforms/DialectConversion.h> to include/concretelang/Conversion/Utils/GenericOpTypeConversionPattern.h
2022-01-03 09:29:19 +01:00
youben11
940cb96be4 chore: rename dialects
HLFHE to FHE
MidLFHE to TFHE
LowLFHE to Concrete
2021-12-29 15:13:34 +01:00
youben11
e73291abdc chore: rename compiler to concrete-compiler
zamalang => concretelang
zamacompiler => concretecompiler
2021-12-29 15:13:34 +01:00
youben11
971cb56182 chore: licensing 2021-12-29 15:13:34 +01:00
Antoniu Pop
cdca7ca6f7 feat(compiler): add Dataflow/RT dialect and code generation for dataflow auto parallelization. 2021-12-23 15:57:53 +00:00
Quentin Bourgerie
db683f4a0e feat(compiler/runtime): Introduce a RT dialect 2021-12-23 15:57:53 +00:00