Skip to content

Commit

Permalink
.
Browse files Browse the repository at this point in the history
  • Loading branch information
yamaguchi1024 committed Oct 26, 2024
1 parent 92eefa3 commit 8f9ca85
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 25 deletions.
28 changes: 3 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,6 @@ You can use optional arguments to customize the output:
- The `--stem` argument allows you to specify custom names for the C file and header file.


# Examples

Take a look at [examples](examples/avx2_matmul/README.md) for scheduling examples, and [API documentation](docs/API.md) for scheduling interface documentation.


# Build Exo from source

We make active use of newer Python 3.x features. Please use Python 3.9 or 3.10 if you're getting errors about unsupported features.
Expand Down Expand Up @@ -63,7 +58,6 @@ Finally, you can build and install Exo.
(exo) $ pip install dist/*.whl
```


## PySMT

Depending on your setup, getting PySMT to work correctly may be difficult. You
Expand Down Expand Up @@ -119,25 +113,9 @@ pytest --cov=./ --cov-report=html
Then, if you want to see annotated source files, open `./htmlcov/index.html`.


# Repository structure

In this repository, folders are structured as follows:

1. `src/exo` is where the core Exo implementation resides.
- **APIs.** Documentation for the APIs can be found in the [API documentation](docs/API.md).
- `API.py` defines a stable API for top-level decorators (`proc`, `instr`, and `config`).
- `API_scheduling.py` defines a API for scheduling primitives.
- `API_cursors.py` defines a API for Cursors.
- **Standard libraries.** These could be user-defined, but we provide them for convenience.
- `libs/` contains some common memory definitions (`memories.py`) and custom malloc implementations.
- `platforms/` contains instruction definitions that are part of the release.
- `stdlib/` contains user-level scheduling functions such as `vectorize`.
- Other files are implementation details of Exo (e.g., `typecheck.py` implements typecheck), are not exposed to users.
2. `apps/` contains some sample applications written in Exo.
3. `dependencies/` contains submodules that Exo's apps and testing depends on.
4. `examples/` contains a step-by-step example of scheduling basic matrix multiplication on AVX2.
5. `tests/` contains the Exo test suite.
6. `docs/` contains additional Exo documentation.
# Learn about Exo

Take a look at [examples](examples/README.md) for scheduling examples, and [documentation](docs/README.md) for various documentation about Exo.


# Contact
Expand Down
18 changes: 18 additions & 0 deletions docs/System.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,24 @@ This document provides an overview of the Exo compilation process, as illustrate

The Exo compiler consists of a frontend and a backend, with user schedules applied in between. The input to the compiler is a set of Exo source files (`*.py`), and the output is generated C code (`*.c`).

In this repository, folders are structured as follows:

1. `src/exo` is where the core Exo implementation resides.
- **APIs.** Documentation for the APIs can be found in the [API documentation](docs/API.md).
- `API.py` defines a stable API for top-level decorators (`proc`, `instr`, and `config`).
- `API_scheduling.py` defines a API for scheduling primitives.
- `API_cursors.py` defines a API for Cursors.
- **Standard libraries.** These could be user-defined, but we provide them for convenience.
- `libs/` contains some common memory definitions (`memories.py`) and custom malloc implementations.
- `platforms/` contains instruction definitions that are part of the release.
- `stdlib/` contains user-level scheduling functions such as `vectorize`.
- Other files are implementation details of Exo (e.g., `typecheck.py` implements typecheck), are not exposed to users.
2. `apps/` contains some sample applications written in Exo.
3. `dependencies/` contains submodules that Exo's apps and testing depends on.
4. `examples/` contains a step-by-step example of scheduling basic matrix multiplication on AVX2.
5. `tests/` contains the Exo test suite.
6. `docs/` contains additional Exo documentation.

---

## Core
Expand Down
10 changes: 10 additions & 0 deletions examples/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Scheduling Examples

This directory contains several examples, along with documentation and code.
If you are new to Exo, we recommend going through the examples in the following order:

1. [AVX2 Matmul](./avx2_matmul/README.md): This example demonstrates how to take a simple matrix multiplication kernel and transform it into an implementation that can make use of AVX2 instructions. It provides an overview of Exo and its scheduling system.

2. [Cursor](./cursors/README.md): This example shows how to use Cursors to efficiently write schedules and define a new scheduling operator.

3. [RVM](./rvm_conv1d/README.md): This example illustrates how to use Exo to optimize a new hardware accelerator completely in the user code.

0 comments on commit 8f9ca85

Please sign in to comment.