| # "Custom Module" samples |
| |
| These samples demonstrate how to extend IREE with custom host code that can be |
| called from compiled modules. All modules regardless of type can call into each |
| other to allow for arbitrary module configurations. |
| |
| ## Basic sample |
| |
| [samples/custom_module/basic/](/samples/custom_module/basic/README.md) shows how |
| to add a basic C++ custom module and use many of the more advanced features of |
| the module system. |
| |
| * C++ VM wrappers for defining modules and using reference types |
| * Weak imports/fallback functions |
| * Custom types exposed to the compiler |
| |
| ## Tensor I/O |
| |
| ### Synchronous call sample |
| |
| [samples/custom_module/sync/](/samples/custom_module/sync/README.md) |
| shows how to pass tensors to and from custom module imports with synchronous |
| execution. This approximates what a classic ML synchronous custom op may do by |
| presenting the tensor I/O as if they were host-synchronous buffers. This is the |
| lowest-performance way of running custom code and should be avoided when |
| possible. |
| |
| * `tensor` types <-> HAL buffer views |
| * Host buffer mapping and manipulation |
| |
| ### Asynchronous call sample |
| |
| [samples/custom_module/async/](/samples/custom_module/async/README.md) |
| shows how to pass tensors to and from custom module imports with asynchronous |
| execution. This shows how to move tensors across threads/frameworks in a |
| non-blocking way that allows IREE to overlap execution with custom user code. |
| |
| * `tensor` types <-> HAL buffer views |
| * Fences for waiting on inputs and signaling readiness of outputs |
| * Side-effect annotations for wait-free imports |