From efaf72880cc12e26d7a15ca0316b945147552cce Mon Sep 17 00:00:00 2001 From: youben11 Date: Mon, 13 Sep 2021 15:27:24 +0100 Subject: [PATCH] docs(dev): mlir conversion --- docs/_static/mlir/MLIR_conversion.png | Bin 0 -> 22244 bytes docs/dev/explanation/COMPILATION.md | 4 ++-- docs/dev/explanation/MLIR.md | 27 +++++++++++++++++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 docs/_static/mlir/MLIR_conversion.png diff --git a/docs/_static/mlir/MLIR_conversion.png b/docs/_static/mlir/MLIR_conversion.png new file mode 100644 index 0000000000000000000000000000000000000000..3f78d77f21f509a72b366f3168d824e92e5a7ba6 GIT binary patch literal 22244 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 literal 0 HcmV?d00001 diff --git a/docs/dev/explanation/COMPILATION.md b/docs/dev/explanation/COMPILATION.md index 5b9dc9321..b715e70d4 100644 --- a/docs/dev/explanation/COMPILATION.md +++ b/docs/dev/explanation/COMPILATION.md @@ -197,9 +197,9 @@ Assigned Data Types: - `3`: Clear\<**uint2**> - `+`: Encrypted\<**uint4**> -## MLIR Lowering +## MLIR Conversion -TODO: Ayoub +The actual compilation will be done by the concrete compiler, which is expecting an MLIR input. The MLIR conversion goes from an operation graph to its MLIR equivalent. You can read more about it [here](./MLIR.md) ## Example Walkthrough #1 diff --git a/docs/dev/explanation/MLIR.md b/docs/dev/explanation/MLIR.md index ad49e6ca3..4c8f520ce 100644 --- a/docs/dev/explanation/MLIR.md +++ b/docs/dev/explanation/MLIR.md @@ -1,4 +1,29 @@ # MLIR -To be done by Ayoub, #311 +MLIR is the intermediate representation used by the concrete compiler, so we need to convert the operation graph to MLIR, which will look something like the following, for a graph performing the dot between two input tensors. + +``` +func @main(%arg0: tensor<4xi7>, %arg1: tensor<4x!HLFHE.eint<6>>) -> !HLFHE.eint<6> { + %0 = "HLFHE.dot_eint_int"(%arg1, %arg0) : (tensor<4x!HLFHE.eint<6>>, tensor<4xi7>) -> !HLFHE.eint<6> + return %0 : !HLFHE.eint<6> +} +``` + +The different steps of the transformation are depicted in the figure below. We will explain each part separately later on. + +![MLIR Conversion](../../_static/mlir/MLIR_conversion.png) + +The conversion uses as input the operation graph to convert, as well as a dictionary of node converter functions. + +## Define function signature + +The first step would be to define the function signature (excluding return value at this point). We will convert input node's types to MLIR (e.g. convert `EncryptedTensor(Integer(64, is_signed=False), shape=(4,))` to `tensor<4xi64>`) and map their values to the argument of the function. So if we had an operation graph with one `EncryptedScalar(Integer(7, is_signed=False))`, we will get an MLIR function like `func @main(%arg0 : !HLFHE.eint<7>) -> ()`. Note that the return type would be detected automatically later on when returning MLIR values. + +## Convert nodes in the OpGraph + +After that, we will iterate over the operation graph, node by node, and fetch the appropriate conversion function for that node to do the conversion. Converters should be stored in a dictionary mapping a node to the converter function. All functions need to have the same signature `converter(node: IntermediateNode, preds: List[IntermediateNode], ir_to_mlir_node: dict, context: mlir.Context)`. +- The `node` will be just the node to convert, it will be used to get information about inputs and outputs. Each specific conversion might require a different set of information, so each function fetches those separately. +- `preds` would be the operands of the operation, as they are the input for the converted `node`. +- The `ir_to_mlir_node` is a mutable dict that we update as we traverse the graph. It maps nodes to their respective values in MLIR. We need this during the creation of an MLIR operation out of a node, the node's inputs will be operands for the operation, but we can't use them as is, we need their MLIR value. The first nodes to be added are the input nodes, which should map to the arguments of the MLIR function. Everytime we convert a node to its MLIR equivalent, we add the mapping between the node and the MLIR value, so that whenever this node will be used as input to another one, we can retrieve its MLIR value. This will also be useful to know which MLIR value(s) to return at the end, as we already can identify output node(s), it will be easy to retrieve their MLIR values using this data structure. +- The `context` should be loaded with the required dialects to be able to create MLIR operations and types for the compiler.