Info: Zenodo’s user support line is staffed on regular business days between Dec 23 and Jan 5. Response times may be slightly longer than normal.

There is a newer version of the record available.

Published August 26, 2022 | Version v0.14
Software Open

DaCe - Data Centric Parallel Programming

Description

What's Changed

This release brings forth a major change to how SDFGs are simplified in DaCe, using the Simplify pass pipeline. This both improves the performance of DaCe's transformations and introduces new types of simplification, such as dead dataflow elimination.

Please let us know if there are any regressions with this new release.

Features
  • Breaking change: The experimental dace.constant type hint has now achieved stable status and was renamed to dace.compiletime
  • Major change: Only modified configuration entries are now stored in ~/.dace.conf. The SDFG build folders still include the full configuration file. Old .dace.conf files are detected and migrated automatically.
  • Detailed, multi-platform performance counters are now available via native LIKWID instrumentation (by @lukastruemper in https://github.com/spcl/dace/pull/1063). To use, set .instrument to dace.InstrumentationType.LIKWID_Counters
  • GPU Memory Pools are now supported through CUDA's mallocAsync API. To enable, set desc.pool = True on any GPU data descriptor.
  • Map schedule and array storage types can now be annotated directly in Python code (by @orausch in https://github.com/spcl/dace/pull/1088). For example: ```python import dace from dace.dtypes import StorageType, ScheduleType

N = dace.symbol('N')

@dace def add_on_gpu(a: dace.float64[N] @ StorageType.GPU_Global, b: dace.float64[N] @ StorageType.GPU_Global):

This map will become a GPU kernel

for i in dace.map[0:N] @ ScheduleType.GPU_Device: b[i] = a[i] + 1.0

* Customizing GPU block dimension and OpenMP threading properties per map is now supported
* Optional arrays (i.e., arrays that can be None) can now be annotated in the code. The simplification pipeline also infers non-optional arrays from their use and can optimize code by eliminating branches. For example:
```python
@dace
def optional(maybe: Optional[dace.float64[20]], always: dace.float64[20]):
  always += 1  # "always" is always used, so it will not be optional
  if maybe is None:  # This condition will stay in the code
    return 1
  if always is None:  # This condition will be eliminated in simplify
    return 2
  return 3
Minor changes

Full Changelog: https://github.com/spcl/dace/compare/v0.13.3...v0.14

Notes

Please cite as

Files

spcl/dace-v0.14.zip

Files (2.1 MB)

Name Size Download all
md5:c0f809f945c3a6089d30204fc1a4bb80
2.1 MB Preview Download

Additional details

Related works