dace

DaCe - Data Centric Parallel Programming

https://github.com/spcl/dace

Science Score: 72.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: arxiv.org
  • Committers with academic emails
    25 of 84 committers (29.8%) from academic institutions
  • Institutional organization owner
    Organization spcl has institutional domain (spcl.inf.ethz.ch)
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.7%) to scientific vocabulary

Keywords

cuda fpga high-level-synthesis high-performance-computing programming-language vivado-hls

Keywords from Contributors

build-tools hpsf radiuss spack mesh interactive distributed optim embedded hacking
Last synced: 4 months ago · JSON representation ·

Repository

DaCe - Data Centric Parallel Programming

Basic Info
  • Host: GitHub
  • Owner: spcl
  • License: bsd-3-clause
  • Language: Python
  • Default Branch: main
  • Homepage: http://dace.is/fast
  • Size: 149 MB
Statistics
  • Stars: 552
  • Watchers: 16
  • Forks: 140
  • Open Issues: 236
  • Releases: 27
Topics
cuda fpga high-level-synthesis high-performance-computing programming-language vivado-hls
Created almost 7 years ago · Last pushed 4 months ago
Metadata Files
Readme Contributing License Code of conduct Citation Authors

README.md

General Tests GPU Tests FPGA Tests Documentation Status PyPI version codecov

DaCe - Data-Centric Parallel Programming

Decoupling domain science from performance optimization.

DaCe is a fast 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 possible 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, IBM POWER9, and ARM with SVE) * NVIDIA GPUs and AMD GPUs (with HIP) * Xilinx and Intel FPGAs

DaCe can be written inline in Python and transformed in the command-line/Jupyter Notebooks or SDFGs can be interactively modified using our Visual Studio Code extension.

For more information, see the documentation

Quick Start

Install DaCe with pip: pip install dace

Having issues? See our full Installation and Troubleshooting Guide.

Using DaCe in Python is as simple as adding a @dace decorator: ```python import dace import numpy as np

@dace def myprogram(a): for i in range(a.shape[0]): a[i] += i return np.sum(a) ```

Calling myprogram with any NumPy array or GPU array (e.g., PyTorch, Numba, CuPy) will generate data-centric code, compile, and run it. From here on out, you can optimize (interactively or automatically), instrument, and distribute your code. The code creates a shared library (DLL/SO file) that can readily be used in any C ABI compatible language (C/C++, FORTRAN, etc.).

For more information on how to use DaCe, see the samples or tutorials below:

Publication

The paper for the SDFG IR can be found here. Other DaCe-related publications are available on our website.

If you use DaCe, cite us: bibtex @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} }

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.

Owner

  • Name: SPCL
  • Login: spcl
  • Kind: organization

Citation (CITATION.cff)

cff-version: 1.2.0
title: "DaCe - Data Centric Parallel Programming"
message: "Please cite as"
# this can be parsed from the AUTHORS file using .github/citation_format_authors.py
authors:
  - family-names: Ben-Nun
    given-names: Tal
  - family-names: de Fine Licht
    given-names: Johannes
  - family-names: Nikolaos Ziogas
    given-names: Alexandros
  - family-names: Schneider
    given-names: Timo
  - family-names: Hoefler
    given-names: Torsten
  - family-names: De Matteis
    given-names: Tiziano
  - family-names: Hofer
    given-names: Dominic
  - family-names: Haag
    given-names: Roman
  - family-names: Niederer
    given-names: Silvan
  - family-names: Raje
    given-names: Saurabh
  - family-names: Schaad
    given-names: Philipp
  - family-names: Rausch
    given-names: Oliver
  - family-names: Gavrilas
    given-names: Gabriel
  - family-names: Ivanov
    given-names: Andrei
  - family-names: Lavarini
    given-names: Luca
  - family-names: Burger
    given-names: Manuel
  - family-names: Kleine
    given-names: Jan
  - family-names: Groner
    given-names: Linus
  - family-names: Backes
    given-names: Thierry
  - family-names: Anklin
    given-names: Valentin
  - family-names: Kuster
    given-names: Andreas
  - family-names: Baumann
    given-names: Thomas
  - family-names: Ates
    given-names: Berke
  - family-names: Scholbe
    given-names: Stefan
  - family-names: Johnsen
    given-names: Carl-Johannes
  - family-names: Widmer
    given-names: Jannis
  - family-names: Walo
    given-names: Neville
  - family-names: Trümper
    given-names: Lukas
preferred-citation:
  title: "Stateful Dataflow Multigraphs: A Data-Centric Model for Performance Portability on Heterogeneous Architectures"
  year: "2019"
  type: conference-paper
  collection-title: "Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis"
  conference:
    name: "SC '19"
  authors:
    - family-names: Ben-Nun
      given-names: Tal
    - family-names: de Fine Licht
      given-names: Johannes
    - family-names: Ziogas
      given-names: Alexandros Nikolaos
    - family-names: Schneider
      given-names: Timo
    - family-names: Hoefler
      given-names: Torsten

Committers

Last synced: 7 months ago

All Time
  • Total Commits: 7,897
  • Total Committers: 84
  • Avg Commits per committer: 94.012
  • Development Distribution Score (DDS): 0.567
Past Year
  • Commits: 175
  • Committers: 20
  • Avg Commits per committer: 8.75
  • Development Distribution Score (DDS): 0.777
Top Committers
Name Email Commits
Tal Ben-Nun t****n@g****m 3,418
Alexandros Nikolaos Ziogas a****s@i****h 1,389
Johannes de Fine Licht j****s@m****k 751
Tiziano De Matteis t****t@i****h 365
Carl Johnsen c****n@n****k 215
Oliver Rausch o****9@g****m 184
Philipp Schaad s****l@g****m 164
Saurabh Raje s****e@g****m 153
andreaskuster m****l@a****h 151
Silvan Niederer n****n@s****h 112
Lukas Trümper l****r@o****e 100
Neville Walo n****o@g****m 83
Manuel Burger b****m@s****h 79
Marcin Copik m****k@g****m 75
Tiziano De Matteis t****s@i****h 74
luca l****v@s****h 67
sscholbe s****e@s****h 52
Philip Müller 1****r 49
Dominic Hofer d****6@g****m 36
am-ivanov a****v 34
Gabriel Gavrilas g****s@g****m 29
thobauma t****a@e****h 25
Alexandru Calotoiu a****u@e****h 23
Linus Groner l****r@c****h 21
Jannis Widmer w****a@s****h 19
dependabot[bot] 4****] 17
BenWeber42 b****r@i****h 14
Berke Ates b****s@s****h 12
Fu-Chiang, Chang f****7@g****m 10
Florian Deconinck d****n@g****m 10
and 54 more...

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 215
  • Total pull requests: 1,144
  • Average time to close issues: 11 months
  • Average time to close pull requests: 26 days
  • Total issue authors: 50
  • Total pull request authors: 57
  • Average comments per issue: 1.78
  • Average comments per pull request: 0.65
  • Merged pull requests: 801
  • Bot issues: 0
  • Bot pull requests: 18
Past Year
  • Issues: 78
  • Pull requests: 681
  • Average time to close issues: 8 days
  • Average time to close pull requests: 5 days
  • Issue authors: 15
  • Pull request authors: 25
  • Average comments per issue: 0.54
  • Average comments per pull request: 0.56
  • Merged pull requests: 477
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • philip-paul-mueller (34)
  • tbennun (29)
  • FlorianDeconinck (18)
  • ThrudPrimrose (16)
  • edopao (12)
  • pratyai (11)
  • BenWeber42 (7)
  • phschaad (7)
  • alexnick83 (7)
  • TizianoDeMatteis (5)
  • rohanrayan (5)
  • tim0s (5)
  • lamyiowce (4)
  • kylosus (4)
  • gronerl (4)
Pull Request Authors
  • pratyai (231)
  • tbennun (149)
  • phschaad (133)
  • philip-paul-mueller (131)
  • alexnick83 (86)
  • ThrudPrimrose (61)
  • romanc (36)
  • mcopik (28)
  • BenWeber42 (27)
  • edopao (24)
  • lukastruemper (23)
  • Berke-Ates (20)
  • dependabot[bot] (18)
  • FlorianDeconinck (16)
  • luca-patrignani (15)
Top Labels
Issue Labels
bug (24) enhancement (11) frontend (11) good first issue (9) codegen (9) transformations (4) core (4) fortran (3) critical (3) fpga (2) test (1) 1.x (1) libraries (1) dependencies (1) 2.0 (1) visualization (1)
Pull Request Labels
in the merge queue (32) no-ci (30) bug (20) dependencies (18) transformations (9) enhancement (7) core (5) 2.0 (5) codegen (5) question (3) critical (3) tutorials (2) cherry-pick-v1 (2) fortran (1) waiting for author (1) frontend (1) dace performance (1) visualization (1)

Packages

  • Total packages: 2
  • Total downloads:
    • pypi 2,777 last-month
  • Total docker downloads: 59
  • Total dependent packages: 5
    (may contain duplicates)
  • Total dependent repositories: 8
    (may contain duplicates)
  • Total versions: 28
  • Total maintainers: 3
pypi.org: dace

Data-Centric Parallel Programming Framework

  • Versions: 28
  • Dependent Packages: 5
  • Dependent Repositories: 8
  • Downloads: 2,777 Last month
  • Docker Downloads: 59
Rankings
Dependent packages count: 1.9%
Downloads: 2.2%
Docker downloads count: 3.1%
Stargazers count: 3.2%
Average: 3.3%
Forks count: 4.5%
Dependent repos count: 5.2%
Maintainers (2)
Last synced: 4 months ago
spack.io: py-dace

DaCe is a fast 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 programmatically or interactively.

  • Versions: 0
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent repos count: 0.0%
Average: 29.0%
Dependent packages count: 58.0%
Maintainers (1)
Last synced: 4 months ago

Dependencies

.github/workflows/fpga-ci.yml actions
  • actions/checkout v2 composite
.github/workflows/general-ci.yml actions
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
.github/workflows/gpu-ci.yml actions
  • actions/checkout v2 composite
.github/workflows/hardware_test.yml actions
  • actions/checkout v2 composite
.github/workflows/heterogeneous-ci.yml actions
  • actions/checkout v2 composite
.github/workflows/verilator_compatibility.yml actions
  • BSFishy/pip-action v1 composite
  • actions/checkout v2 composite
  • actions/setup-python v2 composite
requirements.txt pypi
  • Flask ==2.3.2
  • Jinja2 ==3.1.2
  • MarkupSafe ==2.1.3
  • PyYAML ==6.0
  • Werkzeug ==2.3.5
  • aenum ==3.1.12
  • astunparse ==1.6.3
  • blinker ==1.6.2
  • certifi ==2023.7.22
  • charset-normalizer ==3.1.0
  • click ==8.1.3
  • dill ==0.3.6
  • fparser ==0.1.3
  • idna ==3.4
  • importlib-metadata ==6.6.0
  • itsdangerous ==2.1.2
  • mpmath ==1.3.0
  • networkx ==3.1
  • numpy ==1.24.3
  • ply ==3.11
  • requests ==2.31.0
  • six ==1.16.0
  • sympy ==1.9
  • urllib3 ==2.0.3
  • websockets ==11.0.3
  • zipp ==3.15.0
setup.py pypi
  • aenum *
  • astunparse *
  • dataclasses *
  • dill *
  • flask *
  • fparser *
  • networkx *
  • numpy *
  • ply *
  • pyreadline *
  • pyyaml *
  • requests *
  • sympy <=1.9
  • typing-compat *
  • websockets *