DaCe: Data-Centric Parallel Programming
Decoupling domain science from performance optimization.
DaCe is a parallel programming framework that takes code in Python/NumPy and other programming languages, and maps it to high-performance CPU, GPU, and FPGA programs, which can be optimized to achieve state-of-the-art. Internally, DaCe uses the Stateful Dataflow multiGraphs (SDFG) data-centric intermediate representation: A transformable, interactive representation of code based on data movement. Since the input code and the SDFG are separate, it is possible to optimize a program without changing its source, so that it stays readable. On the other hand, the used optimizations are customizable and user-extensible, so they can be written once and reused in many applications. With data-centric parallel programming, we enable direct knowledge transfer of performance optimization, regardless of the application or the target processor.
DaCe generates high-performance programs for:
Multi-core CPUs (tested on Intel, IBM POWER9, and ARM with SVE)
NVIDIA GPUs and AMD GPUs (see how to use HIP in DaCe)
If you use DaCe, cite us:
@inproceedings{dace,
author = {Ben-Nun, Tal and de~Fine~Licht, Johannes and Ziogas, Alexandros Nikolaos and Schneider, Timo and Hoefler, Torsten},
title = {Stateful Dataflow Multigraphs: A Data-Centric Model for Performance Portability on Heterogeneous Architectures},
year = {2019},
booktitle = {Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis},
series = {SC '19}
}
User Guide
Developer Guide
- Project Structure
- Debugging
- Properties and Serialization
- SDFG Transformation Internals
- Schedule Tree
- DaCe Python Frontend
- Code Generation
- Extending DaCe
- Libraries and Environments
- Working with Symbolic Expressions
- Writing a New Frontend
- Python DSL Support via SDFG-Convertible Objects
- New Backends
- Writing a Custom Instrumentation Provider
- Development Errors and Gotchas
Module Reference