We are happy to announce DaCe version 1.0!
It is a major release milestone, and we went over many of the known issues over the years to ensure that this is the most stable version we can release without making fundamental changes to the framework. The Stateful DataFlow multiGraph (SDFG) intermediate representation used in this version is faithful to the original paper, which was published in 2019.
On a fundamental level, this release is no different from a minor version release (this version could have been DaCe 0.17), so there are no breaking changes from v0.x.
We would like to thank everyone who contributed to DaCe over the years and helped reach this milestone! It would not have been possible without you.
Release Notes
In addition to many issues and bugfixes courtesy of @acalotoiu, @tim0s, @htorst, @tbennun, @phschaad, @BenWeber42, @philip-paul-mueller, @luigifusco, @ThrudPrimrose, @FlorianDeconinck, @pratyai, @edopao, @kotsaloscv, and @iBug, several new features for quality of life and future development were added.
New features introduced into the SDFG IR and builder API:
- Add GUIDs to SDFG elements and SDFG diff support (by @phschaad)
- Added
can_be_applied_to()
to Transformation API (by @philip-paul-mueller) SDFG.auto_optimize
,SDFG.regenerate_code
, andSDFG.as_schedule_tree
are now easily accessible as API methods and fields
New Python frontend features
- You can now specify the storage location of expressions inline using the
@
operator or type hints. Examples:a = np.ones(M) @ dace.StorageType.CPU_ThreadLocal
b: dace.float64[M, N] @ dace.StorageType.GPU_Global = np.zeros(...)
New transformations
WCRToAugAssign
transformation (by @alexnick83)
New code generation features
clang-format
can now be configured to be called on generated code (by @ThrudPrimrose)
Experimental features
- Control flow (loop, conditional, named) regions (by @phschaad and @luca-patrignani). Stay tuned for more updates in the next development releases!
Other changes and bugfix highlights
- Support for SymPy 1.13 (by @BenWeber42)
- Rename misleading topological_sort to bfs_nodes by @BenWeber42 in #1590
- Add multidimensional maps to GPU docs by @tbennun in #1608
- Improve SDFG work-depth analysis and add SDFG simulated operational intensity analysis by @phschaad in #1607
- Scalar return values are now disallowed by @philip-paul-mueller in #1609
- Fixed
RedundantArray
's handling of "reshaping" Memlets by @philip-paul-mueller in #1603 - Loop Region Code Generation by @phschaad in #1597
- Bump certifi from 2023.7.22 to 2024.7.4 by @dependabot in #1614
- Fix incorrect input/output of nested dace programs by @phschaad in #1615
- Return correct state in
nest_sdfg_subgraph
by @tbennun in #1627 - Made
TransientReuse
Less Verbose by @philip-paul-mueller in #1622 - Improving the Usage of
#pragma unroll
by @philip-paul-mueller in #1621 - Added
PatternNode
todace.transformation
imports. by @philip-paul-mueller in #1618 - Implement user regions and function call regions by @luca-patrignani in #1623
- Add UUIDs to SDFG elements by @phschaad in #1631
- framecode: Fix missing BasicCFBlock argument by @iBug in #1630
- Specified behaviour of
Subset.covers()
for different dimensionality by @philip-paul-mueller in #1637 - More robust loop detection by @tbennun in #1646
- Fix missed exploration of edges in constant propagation by @luigifusco in #1635
- Fix infinite loop with control flow blocks by @tbennun in #1634
- Print out exception on parsing fail early by @FlorianDeconinck in #1651
- Reworked Optional Serializing by @philip-paul-mueller in #1647
- Modified
SetProperty
by @philip-paul-mueller in #1653 - Made
CompiledSDFG
in the main namespace available. by @philip-paul-mueller in #1567 - SDFG Diff Tool by @phschaad in #1632
- Made the
SDFGState.add_mapped_tasklet()
more convenient by @philip-paul-mueller in #1655 - Maps With Zero Parameters by @philip-paul-mueller in #1649
- Bug in constant propagation with multiple constants by @tbennun in #1658
- Fixed
PruneConnectors
by @philip-paul-mueller in #1660 - Fix array indirection to memlet subset promotion by @BenWeber42 in #1406
- Renamed
graph.bfs_edges
toedge_bfs
by @BenWeber42 in #1604 - Inter-state edge assignment race test by @tbennun in #1672
- Fix race conditions in Constant Propagation and Reference-To-View by @tbennun in #1679
- Improve memlet label and string initialization by @tbennun in #1680
- Control Flow Raising by @phschaad in #1657
- Updated
InlineMultistateSDFG
by @philip-paul-mueller in #1689 - Extend TrivialTaskletElimination for map scope by @edopao in #1650
- Fix to Read and Write Sets by @philip-paul-mueller in #1678
- Make
is_empty()
andpropagate_subset()
not unnecessarily rely on thesrc
anddst
by @pratyai in #1699 - fix(codegen/prettycode): Use base_indentation as intended by @iBug in #1697
- Warn on potential data races by @phschaad in #1712
- Python frontend stability and inline storage specification by @tbennun in #1711
- infer_symbols_from_datadescriptor : modification to infer offset by @kotsaloscv in #1525
- Add CFG to generate_scope in tutorials by @ThrudPrimrose in #1706
- Better
CopyToMap
by @philip-paul-mueller in #1675 - More NumPy operation implementations by @tbennun in #1498
- Fix jupyter's version of SDFV by @phschaad in #1714
- Fix broken codegen tutorial by @romanc in #1720
- CI: Update checkout and setup-python actions by @romanc in #1718
- Bump version and update dependencies by @tbennun in #1722
- Various Cutout Fixes by @phschaad in #1662
- Various stability improvements and convenience APIs by @tbennun in #1724
- Rename FORTRAN frontend tests by @pratyai in #1729
- Add back clang-format support by @ThrudPrimrose in #1732
- Fix problem with struct reads on interstate edges by @phschaad in #1512
- Quality of life: Improved error messages by @romanc in #1731
- Cherry-picked a handful of intrinsic related commits out of
multi_sdfg
branch. by @pratyai in #1728 - Used valid FORTRAN test program for a couple frontend tests + Made
floatlit2string()
convert the FORTRAN real literal strings into python floats. by @pratyai in #1733 - Fix pure reduce expansion for squeezed output memlets. by @pratyai in #1709
- Make the import of
typing.Literal
portable between python versions 3.7 and 3.12 by @pratyai in #1700 - Fix type inference and code generation for typeclasses and numpy types by @tbennun in #1725
- SDFG API additions for version 1.0 by @tbennun in #1740
- Replace another FORTRAN test program with
gfortran -Wall
certified test program. by @pratyai in #1736 - Unskip unit tests and provide reasons for skipped tests by @tbennun in #1742
- Fix OpenMP dynamic loop bounds that use persistent memory by @tbennun in #1746
- Fixes for
SDFGState._read_and_write_sets()
by @philip-paul-mueller in #1747 - Fix temporary transient counter during Python parsing of nested calls by @tbennun in #1745
- Fix
pystr_to_symbolic
not correctly interpreting constants as boolean values in boolean comparisons by @phschaad in #1756 - Fixed
dace::math::pi
anddace::math::nan
on GPU by @philip-paul-mueller in #1759 - Make scalar to symbol promotion robust to node order in state by @tbennun in #1766
Full Changelog: v0.16.1...v1.0.0