Files
concrete/docs/explanations/layout.md
2024-04-26 16:31:35 +02:00

29 lines
2.5 KiB
Markdown

# Project layout
## Concrete layout
Concrete is a modular framework composed by sub-projects using different technologies, all having theirs own build system and test suite. Each sub-project have is own README that explain how to setup the developer environment, how to build it and how to run tests commands.
Concrete is made of 4 main categories of sub-project that are organized in subdirectories from the root of the Concrete repo:
* `frontends` contains **high-level transpilers** that target end users developers who want to use the Concrete stack easily from their usual environment. There are for now only one frontend provided by the Concrete project: a Python frontend named `concrete-python`.
* `compilers` contains the sub-projects in charge of actually solving the compilation problem of an high-level abstraction of FHE to an actual executable. `concrete-optimizer` is a Rust based project that solves the optimization problems of an FHE dag to a TFHE dag and `concrete-compiler` which use `concrete-optimizer` is an end-to-end MLIR-based compiler that takes a crypto free FHE dialect and generates compilation artifacts both for the client and the server. `concrete-compiler` project provide in addition of the compilation engine, a client and server library in order to easily play with the compilation artifacts to implement a client and server protocol.
* `backends` contains CAPI that can be called by the `concrete-compiler` runtime to perform the cryptographic operations. There are currently two backends:
* `concrete-cpu`, using TFHE-rs that implement the fastest implementation of TFHE on CPU.
* `concrete-cuda` that provides a GPU acceleration of TFHE primitives.
* `tools` are basically every other sub-projects that cannot be classified in the three previous categories and which are used as a common support by the others.
## Concrete Python layout
The module structure of **Concrete Python**. You are encouraged to check individual `.py` files to learn more.
* concrete
* fhe
* **dtypes:** data type specifications (e.g., int4, uint5, float32)
* **values:** value specifications (i.e., data type + shape + encryption status)
* **representation:** representation of computation (e.g., computation graphs, nodes)
* **tracing:** tracing of python functions
* **extensions:** custom functionality (see [Extensions](../core-features/extensions.md))
* **mlir:** computation graph to mlir conversion
* **compilation:** configuration, compiler, artifacts, circuit, client/server, and anything else related to compilation