Commit Graph

389 Commits

Author SHA1 Message Date
Antoniu Pop
2da8644e57 fix(compiler): fix lowering of tasks generated from loop tiling pass. 2024-05-16 12:07:51 +02:00
Andi Drebes
a5afb1f0a6 feat(compiler): Type Inference: Add support for multiple functions
The type inference pass currently only supports a single function as
it is unable to infer types across function boundaries. This commit
adds support for multiple functions and tracks types across
`func.func`, `func.call` and function `constant` operations.
2024-05-16 12:07:51 +02:00
Andi Drebes
d270886091 refactor(compiler): Type inference: Enable debugging output for entire modules 2024-05-16 12:07:51 +02:00
Andi Drebes
26bed92ee7 fix(compiler): Type Inference: Defer erasure of functions to the end of the rewriting
A function may be referenced at multiple sites, including at locations
that have not been visited by the rewriter when the function itself is
rewritten. By using `IRRewriter::replaceOp` after rewriting a
function, the function is erased immediately, which may cause the
rewriting to fail due to remaining uses of the function.

Defering the erasure of functions to the end of the entire rewriting
process ensures that all uses of the original functions have been
updated to the rewritten functions.
2024-05-16 12:07:51 +02:00
Andi Drebes
c1d742adf0 fix(compiler): Type Inference: Support ops with regions containing multiple blocks
Operations with regions containing multiple blocks are currently not
handled correctly, since the list of successors of an operation is not
updated with rewritten blocks when the operation is
rewritten. Furthermore, functions were assumed to have only a single
block.

This change supports operations with multiple blocks by fixing the
issues above.
2024-05-16 12:07:51 +02:00
Andi Drebes
c371269896 fix(compiler): Type Inference: Allow unresolved types in TypeInferenceUtils::getInferredType 2024-05-16 12:07:51 +02:00
Andi Drebes
ebb08c788f fix(compiler): Type Inference: Register dependencies between op and its related values
Updates of the types inferred for the values related to an operation
only propagate correctly to the operation if there is a direct
producer-consumer relationship or an indirect producer-consumer
relationship via some additional mechanism (e.g., region
successors). However, this is not sufficient to ensure updates of
values and operations that are related otherwise.

This change explicitly models the dependencies between related values
and an operation via `DataFlowAnalysis::addDependency` in order to
guarantee that all updates of the types of values are propagated to
all operations that the type resolver has designated as related
operations.

Furthermore, all operations are visited once initially in order to
guarantee that updates propagate to operations, for which the dataflow
framework does not invoke `visitOperation`.
2024-05-16 12:07:51 +02:00
Andi Drebes
ea41400b90 feat(compiler): Type inference: Delegate enumeration of related values to TypeResolver
This delegates the enumeration of values related to an operation to
the class `TypeResolver`. This allows for the customization of this
process via a class inheriting `TypeResolver`.
2024-05-16 12:07:51 +02:00
Andi Drebes
c3366d9eef feat(compiler): Type Inference: Add support for tensor.dim 2024-05-16 12:07:51 +02:00
Andi Drebes
b297de93c4 refactor(compiler): Type inference: Generalize constraint for equal element types to nested types 2024-05-16 12:07:51 +02:00
youben11
b6a43cfc5c feat(compiler/simu): support signed integers 2024-05-15 10:53:42 +01:00
youben11
c655856b1c test(compiler): overflow in simulation 2024-05-15 10:53:42 +01:00
youben11
cae77e89bf feat(compiler/simu): add loc in overflow warnings 2024-05-15 10:53:42 +01:00
youben11
b953d57fe4 feat(compiler): warn when there is overflow in sim (native encoding) 2024-05-15 10:53:42 +01:00
youben11
001aba6809 refactor(compiler, simu): rewrite add/mul to CAPI calls 2024-05-15 10:53:42 +01:00
Umut
d954b279e8 fix(compiler): use exact passes on check tests to avoid reordering when new passes are introduced 2024-05-15 11:21:46 +03:00
Umut
8e4d237364 feat(compiler): fancy assignment 2024-05-15 11:21:46 +03:00
Umut
6e36d0f801 feat(compiler): tensor.generate to scf.forall 2024-05-15 11:21:46 +03:00
Umut
0b161c436f feat(compiler): fancy indexing operation 2024-05-15 11:21:46 +03:00
Bourgerie Quentin
efe223e181 fix(compiler): Share the decompress state instead of try to avoid copies
This partially reverts commit 081e8b7b74.
2024-05-14 15:08:34 +02:00
Bourgerie Quentin
081e8b7b74 fix(compiler): Decompression of evaluation keys was done several times 2024-05-06 11:53:34 +02:00
Antoniu Pop
73d254162b feat(compiler): [GPU runtime] add heuristic estimate of GPU vs. CPU core ratio and update CPU HW threads usedwhen not specified by user. 2024-05-03 11:58:56 +01:00
Antoniu Pop
05ee0a59c9 fix(compiler): [GPU backend] add SDFG_MAX_BATCH_SIZE environment variable to control batching limit. 2024-05-03 11:58:56 +01:00
Antoniu Pop
904cbae70a fix(compiler): [GPU backend] Restrict SDFG generation and batching to bootstrapping subgraphs to limit overhead. Restricts loop parallelism in loop nests where SDFG put/get operations occur as they have side effects. 2024-05-03 11:58:56 +01:00
Antoniu Pop
a431c9d4ef feat(compiler): [GPU backend] enable parallel loop collapsing for GPU backend using batching and fix loop coalescing infrastructure in MLIR to allow operation before bufferization. 2024-05-03 11:58:56 +01:00
Antoniu Pop
a3a6216cbf feat(compiler): [GPU runtime] add basic support for multiple keys on GPU. 2024-05-03 11:58:56 +01:00
Alexandre Péré
d033102a3c feat(optimizer): allow circuit manipulation in optimizer dag 2024-04-30 10:16:52 +02:00
Bourgerie Quentin
9beaeac007 feat(compiler): Allow concat with only one operand 2024-04-26 10:13:54 +02:00
Andi Drebes
51b5b42c05 fix(compiler): Support indirect references to IVs in indexes when hoisting RT.await_future ops
Until now, the pass hoisting `RT.await_future` operations only
supports `tensor.parallel_insert_slice` operations that use loop
induction variables directly as indexes. Any more complex indexing
expressions produce a domination error, since a
`tensor.parallel_insert_slice` cloned by the pass into an additional
parallel for loop is left with references to values from the original
loop.

This change properly clones operations producing intermediate values
within the original parallel for loop and thus adds support for
indexing expressions that reference loops IVs only indirectly.
2024-04-25 11:05:54 +02:00
Andi Drebes
16f00416fc fix(compiler): Fix RT type parser: Remove unconditional parsing of prefix "future"
The type parser of the RT dialect unconditionally attempts to parse
the string "future". This breaks the parsing of any RT type. Remove
unconditional parsing of this prefix.
2024-04-23 13:26:35 +02:00
Andi Drebes
e238067cd8 fix(compiler): Type inference rewriter: Handle return-like operations correctly
Return-like operations require special treatment by the type inference
rewriter, since their operand types are both tied to the result types
of their producers and to result types of their parent operations.

The inference scheme for ordinary operations, in which the initial
local inference state is composed of the operand types of the
rewritten producers and the old types of related operations before
rewriting is insufficient, since this may result in a mismatch between
the inferred types and the actual types of the already rewritten
parent operation.

Until now, precedence of the new result types of the parent operation
has been implemented by simply designating these types as the operand
types of a return-like operation. However, while this works as
intended for return-like operations, which simply forward values
(e.g., `func.return`), this creates invalid IR for other return-like
operations (e.g., `tensor.yield`).

This change implements precedence of the result types of the parent
operation of a return-like operation by adding the return types of the
already rewritten parent operation to the initial local inference
state before final invocation of type inference.
2024-04-19 09:10:57 +02:00
Bourgerie Quentin
676a787ff2 fix(compiler): Use concrete-cpu function to compute key size in compilation feedbacks 2024-04-18 14:55:43 +02:00
Alexandre Péré
ba1d049d95 fix(compiler): increases deserialization limit for values 2024-04-18 14:22:51 +02:00
Andi Drebes
a88968d8df fix(compiler): Type inference rewriter: Fix use-after-free in function renaming
The type inference rewriter changes the name of the rewritten function
to the name of the original function when the rewriting process is
complete. However, the name is retrieved from the original function
operation after the operation has already been replaced and thus
destroyed, resulting in a null pointer dereference.

This change retrieves the name of the original function before it is
replaced and saves it in a copy, which is then used to safely assign
the new name to the rewritten function.
2024-04-17 09:55:10 +02:00
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
2eb9c19de2 test(compiler): use mono parameters for dataflow/distributed tests until multi-parameter support is available. 2024-04-12 09:56:30 +02:00
Antoniu Pop
e16487e2c9 fix(compiler): create a copy of return memref for task work functions where the return is not allocated within the function. This is necessary to ensure deallocation cannot occur before the use. 2024-04-12 09:56:30 +02:00
Andi Drebes
204810580d feat(compiler): Add support for tiling of optimizer.partition_frontier 2024-04-12 09:05:41 +02:00
Andi Drebes
fcfaaee2ef feat(compiler): Add support for tiling of fhelinalg.transpose 2024-04-12 09:05:41 +02:00
Andi Drebes
12ab53ba92 refactor(compiler): Remove attribute "tile-sizes" from operations after tiling
The tiling infrastructure preserves attributes of tiled
`linalg.generic` operations, such that the attribute for the tile
sizes specified for the `linalg.generic` operation before tiling is
copied to the `linalg.generic` operation that is part of the generated
IR for a single tile.

This change causes the attribute to be removed after tiling, since it
does not make sense to preserve the attribute for per-tile operations.
2024-04-12 09:05:41 +02:00
Andi Drebes
a8231ce19f feat(compiler): Add support for tiling of fhelinalg.sum 2024-04-12 09:05:41 +02:00
Andi Drebes
c6d2dfc916 feat(compiler): Add support for tiling of fhelinalg.apply_multi_lookup_table 2024-04-12 09:05:41 +02:00
Andi Drebes
46e28c648f feat(compiler): Add support for tiling of fhelinalg.apply_mapped_lookup_table 2024-04-12 09:05:41 +02:00
Andi Drebes
58c1315205 feat(compiler): Copy tile sizes for all matmul ops when lowering to linalg.generic
For now, the attribute "tile-sizes" is copied from the FHELinalg
operation to the corresponding `linalg.generic` operation only for
multiplications of encrypted matrices with plaintext matrices.

The changes of this commit also cause the attribute to be copied for
multiplications between plaintext ad ciphertext matrices, as well as
for multiplications between two ciphertext matrices.
2024-04-12 09:05:41 +02:00
Andi Drebes
09a6702301 feat(compiler): Add support for tiling of element-wise FHELinalg operations 2024-04-12 09:05:41 +02:00
Miles
5d68424531 fix typos 2024-04-11 14:50:16 +02:00
Alexandre Péré
5537eb53de fix(frontends): add catch-all for exceptions 2024-04-11 14:49:24 +02:00
Bourgerie Quentin
f6308394b6 test(compiler): Test compress_input_ciphertext + simulation 2024-04-11 14:42:28 +02:00
Bourgerie Quentin
f6aa484ee2 fix(compiler): Do not use input ciphertext compression in simulation
close zama-ai/concrete-internal#656
2024-04-11 14:42:28 +02:00
Andi Drebes
f506f5f7e3 test(compiler): Add check tests for pass hoisting RT.await_future operations 2024-04-08 16:16:07 +02:00