Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update readme. Add build instructions #69

Merged
merged 36 commits into from
May 21, 2024
Merged
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
877b923
add cpu runner
May 11, 2024
70468bb
Merge branch 'main' of https://github.com/intel/graph-compiler into y…
May 13, 2024
096a88c
dyn link
May 13, 2024
5fc3f3a
stash
May 13, 2024
e752dd6
fix
May 13, 2024
b152188
Merge branch 'yijie/add-cpu-runner' into yijie/dyn_link
May 13, 2024
98553a3
fix
May 13, 2024
dd39dc0
fix
May 13, 2024
e96b040
fix
May 13, 2024
eea64fb
Merge branch 'yijie/add-cpu-runner' into yijie/dyn_link
May 13, 2024
b975989
fix
May 13, 2024
6f8d4c7
Merge branch 'yijie/add-cpu-runner' into yijie/dyn_link
May 13, 2024
57c7e6c
fix
May 13, 2024
7935361
add link
May 13, 2024
8306108
remove if(NOT LLVM_LINK_LLVM_DYLIB)
May 13, 2024
772d072
remove replica
May 13, 2024
f1a1549
Merge branch 'main' of https://github.com/intel/graph-compiler into y…
May 14, 2024
4861a4c
rename
May 14, 2024
77698d8
update readme
May 14, 2024
6f4d766
update
May 14, 2024
7b70f33
remove clone
May 14, 2024
551844c
Merge branch 'main' of https://github.com/intel/graph-compiler into y…
May 15, 2024
7f8e8d7
Merge branch 'main' of https://github.com/intel/graph-compiler into y…
May 15, 2024
3dccf85
Merge branch 'yijie/dyn_link' into yijie/update_doc
May 15, 2024
dd80b41
Update README.md
May 15, 2024
2c73717
Update README.md
May 15, 2024
e7ac3ee
Update README.md
May 15, 2024
ca98872
Merge branch 'main' of https://github.com/intel/graph-compiler into y…
May 15, 2024
4f22e01
Merge branch 'yijie/update_doc' of https://github.com/intel/graph-com…
May 15, 2024
5871ab5
update llvm cmake
May 15, 2024
423eee9
update doc
May 17, 2024
9646b34
Merge branch 'main' into yijie/update_doc
May 17, 2024
1e47975
fix typo
May 17, 2024
ba83ac2
Merge branch 'yijie/update_doc' of https://github.com/intel/graph-com…
May 17, 2024
6911118
Update README.md
May 20, 2024
81405ec
Merge branch 'main' into yijie/update_doc
May 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 65 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,66 @@
# Graph Compiler
Graph Compiler is in active development stage.
Graph Compiler is an end-to-end, MLIR-based compiler designed to enhance the performance of deep learning workloads. It accepts computation graphs from the frontend, applies domain-specific optimizations and transformations, generates code, and manages runtime execution.

The current frontend for Graph Compiler is [oneDNN Graph API](https://oneapi-src.github.io/oneDNN/graph_extension.html).

## Build instructions

### All-in-one compile script

It is recommended for the users to use the all-in-one compile script at `scripts/compile.sh`. It downloads the LLVM dependency and builds the project.

### Step-by-step build intructions

To build this project step by step, first you need to find the LLVM commit-id we are using at `cmake/llvm-version.txt`. Then clone specific version of LLVM:

```bash
export LLVM_COMMIT_HASH=$(< cmake/llvm-version.txt)
git clone https://github.com/llvm/llvm-project
cd llvm-project
git checkout $LLVM_COMMIT_HASH
```

Build LLVM with the command lines given in `.github/workflows/build-llvm.yml`:

```bash
mkdir llvm-install
cmake -G Ninja llvm -B build -DCMAKE_INSTALL_PREFIX=llvm-install \
-DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=true -DLLVM_ENABLE_PROJECTS="mlir" -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_INSTALL_UTILS=true -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DLLVM_INSTALL_GTEST=ON
ciyongch marked this conversation as resolved.
Show resolved Hide resolved
cmake --build build --target install
```

Notes
* It is recommended to add optional options `-DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON` to the command `cmake -G Ninja llvm ...` above. These will enable the build of LLVM/MLIR dynamic libraries and let MLIR/LLVM tools link to them, to reduce the installed binary size of LLVM/MLIR. These options also enable the `GC_DEV_LINK_LLVM_DYLIB` option of graph-compiler repo (see below).
* The option `-DLLVM_INSTALL_GTEST=ON` is optional, if the tests of graph-compiler are disabled (see `GC_TEST_ENABLE` below).

We have now installed LLVM at `llvm-project/llvm-install`.

Change working directory to graph-compiler repo and prepare the build directory:

```bash
cd /PATH/TO/graph-compiler
mkdir build && cd build
```

Build and run tests:

```bash
cmake .. -G Ninja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DMLIR_DIR=/PATH/TO/llvm-project/llvm-install/lib/cmake/mlir \
-DLLVM_EXTERNAL_LIT=$(which lit)
cmake --build . --target gc-check
```

Notes:
* `/PATH/TO/llvm-project/llvm-install` should be the install path of LLVM. If you installed LLVM elsewhere by `-DCMAKE_INSTALL_PREFIX` option when building LLVM, you need to change the path in `-DMLIR_DIR` accordingly.
* The cmake option `-DLLVM_EXTERNAL_LIT` is for the tests of this project. It requires the `lit` tool to be installed in the system. You can install it via `pip install lit`. If you don't need to run the tests of this repo, you can omit this option in the command line.

Graph Compiler supports the following build-time options.

| CMake Option | Supported values (defaults in bold) | Description |
|:--------------------------------|:---------------------------------------|:---------------------------------------------------------------------------------------|
| GC_LEGACY_ENABLE | **ON**, OFF | Controls building the legacy graph-compiler component |
| GC_TEST_ENABLE | **ON**, OFF | Controls building the tests |
| GC_DEV_LINK_LLVM_DYLIB | ON, **OFF** | Controls dynamic link LLVM/MLIR libraries, mainly for developer |