The DaCe framework is designed to be user-extensible. Developers can externally extend DaCe by adding new types of nodes, frontend languages, transformations, and hardware architecture backends.
The three key mechanisms of extensibility are class inheritance, replacements, and enums.
Class inheritance is used for new library nodes, data types, transformations, passes, code generator targets, instrumentation providers, and others.
Replacements are used to extend the frontends with new language constructs and specialized library functions (e.g., a custom implementation for
Enumerations can be extended to add new entries to device types, storage locations, and others. See the enumerations in
dace.dtypesfor more examples.
For more examples of how to extend DaCe, see the following resources:
Library nodes: Einsum specialization library node
Transformations: Using and Creating Transformations
Code generators: Extending the Code Generator
Frontend extensions (enumerations and replacements): Tensor Core code sample