Skip to content

Latest commit

 

History

History
82 lines (55 loc) · 4.26 KB

README.md

File metadata and controls

82 lines (55 loc) · 4.26 KB

Build Status

DaCe - Data-Centric Parallel Programming

Decoupling domain science from performance optimization.

DaCe compiles code in various programming languages and paradigms (Python/Numpy, MATLAB, TensorFlow) and maps it efficiently to CPUs, GPUs, and FPGAs with high utilization, on par with the state-of-the-art. The key feature driving DaCe is its Stateful DataFlow multiGraph (SDFG) data-centric intermediate representation: A transformable, interactive representation of code based on data movement. With data-centric parallel programming, we enable direct knowledge transfer of performance optimization, regardless of the scientific application or the target processor.

DaCe can be written inline in Python and transformed in the command-line/Jupyter Notebooks, or SDFGs can be interactively modified using the Data-centric Interactive Optimization Development Environment (DIODE, currently experimental).

For more information, see our paper.

Tutorials

Installation and Dependencies

To install: pip install dace

Runtime dependencies:

  • A C++14-capable compiler (e.g., gcc 5.3+)
  • Python 3.5 or newer
  • CMake 2.8.12 or newer (for Windows, CMake 3.15 is recommended)

To run DIODE (experimental), either run the installed script diode, or call python3 -m diode.diode_rest from the shell. Then, follow the printed instructions.

DaCe is Jupyter Notebook-compatible. If a result is an SDFG, it will show up directly in the notebook.

To view SDFGs separately, use SDFV (the SDFG Viewer). Run the sdfv installed script with the .sdfg file as an argument. Alternatively, you can open diode/sdfv.html directly and choose a file in the browser.

Publication

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}
}

Configuration

DaCe creates a file called .dace.conf in the user's home directory. It provides useful settings that can be modified either directly in the file (YAML), within DIODE, or overriden on a case-by-case basis using environment variables that begin with DACE_ and specify the setting (where categories are separated by underscores). The full configuration schema is located here.

Useful environment variable configurations include:

  • DACE_CONFIG (default: ~/.dace.conf): Override DaCe configuration file choice.

Context configuration:

  • DACE_use_cache (default: False): Uses DaCe program cache instead of re-optimizing and compiling programs.
  • DACE_debugprint (default: True): Print debugging information.

SDFG processing:

  • DACE_optimizer_interface (default: dace.transformation.optimizer.SDFGOptimizer): Controls the SDFG optimization process by choosing a Python handler. If empty or class name is invalid, skips process. By default, uses the transformation command line interface.

Profiling:

  • DACE_profiling (default: False): Enables profiling measurement of the DaCe program runtime in milliseconds. Produces a log file and prints out median runtime.
  • DACE_treps (default: 100): Number of repetitions to run a DaCe program when profiling is enabled.

Contributing

DaCe is an open-source project. We are happy to accept Pull Requests with your contributions!

License

DaCe is published under the New BSD license, see LICENSE.