This directory provides detailed documentation about Exo's interface and internal systems.
- To learn about the design principles of Exo, read Design.md.
- To understand how the Exo system is implemented, read System.md.
- For information on writing Exo object code, APIs, and imports, refer to Procedures.md, object_code.md, and Imports.md.
- To learn how to define hardware targets externally to the compiler, refer to externs.md, instructions.md, and memories.md.
- To learn how to define new scheduling operations externally to the compiler, refer to Cursors.md and inspection.md.
- To understand the available scheduling primitives and how to use them, look into the primitives/ directory.
The scheduling primitives are classified into six categories:
- Buffer Transformations
- Loop and Scope Transformations
- Configuration States
- Subprocedure Operations
- Memory, Precision, and Parallelism Transformations
- Other Operations
The following papers provide a high-level and holistic view of Exo as a project:
For more documentation with running Exo code, refer to the Examples directory.