Data-Centric Parallel Programming Framework
Project description
aCe - 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 multiGraph (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 posible to optimize a program without changing its source, so that it stays readable. On the other hand, transformations 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 and IBM POWER9)
- NVIDIA GPUs
- AMD GPUs (with HIP)
- Xilinx FPGAs
- Intel FPGAs
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.
See an example SDFG in the standalone viewer (SDFV).
Tutorials
- Getting Started
- Explicit Dataflow in Python
- NumPy API Reference
- SDFG API
- Using and Creating Transformations
- Extending the Code Generator
Installation and Dependencies
To install: pip install dace
Runtime dependencies:
- A C++14-capable compiler (e.g., gcc 5.3+)
- Python 3.6 or newer
- CMake 3.15 or newer
Running
Python scripts: Run DaCe programs (in implicit or explicit syntax) using Python directly.
SDFV (standalone SDFG viewer): To view SDFGs separately, run the sdfv installed script with the .sdfg file as an argument. Alternatively, you can use the link or open diode/sdfv.html directly and choose a file in the browser.
Visual Studio Code plugin: Install from the VSCode marketplace or open an .sdfg file for interactive SDFG viewing and transformation.
DIODE interactive development (experimental):: Either run the installed script diode, or call python3 -m diode from the shell. Then, follow the printed instructions to enter the web interface.
The sdfgcc tool: Compile .sdfg files with sdfgcc program.sdfg. Interactive command-line optimization is possible with the --optimize flag.
Jupyter Notebooks: DaCe is Jupyter-compatible. If a result is an SDFG or a state, it will show up directly in the notebook. See the tutorials for examples.
Octave scripts (experimental): .m files can be run using the installed script dacelab, which will create the appropriate SDFG file.
Note for Windows/Visual C++ users: If compilation fails in the linkage phase, try setting the following environment variable to force Visual C++ to use Multi-Threaded linkage:
X:\path\to\dace> set _CL_=/MT
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.
General configuration:
DACE_debugprint(default: False): Print debugging information.DACE_compiler_use_cache(default: False): Uses DaCe program cache instead of re-optimizing and compiling programs.DACE_compiler_default_data_types(default:Python): Chooses default types for integer and floating-point values. IfPythonis chosen,intandfloatare both 64-bit wide. IfCis chosen,intandfloatare 32-bit wide.
GPU programming and debugging:
DACE_compiler_cuda_backend(default:cuda): Chooses the GPU backend to use (can becudafor NVIDIA GPUs orhipfor AMD GPUs).DACE_compiler_cuda_syncdebug(default: False): If True, calls device-synchronization after every GPU kernel and checks for errors. Good for checking crashes or invalid memory accesses.
FPGA programming:
DACE_compiler_fpga_vendor: (default:xilinx): Can bexilinxfor Xilinx FPGAs, orintel_fpgafor Intel FPGAs.
SDFG interactive transformation:
DACE_optimizer_transform_on_call(default: False): Uses the transformation command line interface every time a@dacefunction is called.DACE_optimizer_interface(default:dace.transformation.optimizer.SDFGOptimizer): Controls the SDFG optimization process iftransform_on_callis enabled. By default, uses the transformation command line interface.DACE_optimizer_automatic_strict_transformations(default: True): If False, skips automatic strict transformations in the Python frontend (see transformations tutorial for more information).
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! Please follow the contribution guidelines before submitting a pull request.
License
DaCe is published under the New BSD license, see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file dace-0.11.2.tar.gz.
File metadata
- Download URL: dace-0.11.2.tar.gz
- Upload date:
- Size: 3.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/3.10.0 pkginfo/1.7.1 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9bea5a7f5342857ce7f01bda4704332e31ddab9122e9c2158c24030b9e6e3426
|
|
| MD5 |
0b168fb62ce55ba6591079f8f0d4e9d1
|
|
| BLAKE2b-256 |
3a2bd9a914ad6abc373f76de66b850d1a5f45e528d43bf7d9e09d279acbb1d5e
|