DDC, is a C++-17 library that aims to offer to the C++/MPI world an equivalent to the xarray.DataArray
/dask.Array
python environment.
Where these two libraries are based on numpy, DDC relies on Kokkos and mdspan to offer CPU/GPU performance-portable multi-dimensional arrays and iterators.
DDC aims to offer abstractions to represent:
- tagged continuous dimensions,
- discretizations of these (multiple kinds of meshes, function spaces, Fourier, etc.),
- domains in these discretized dimensions,
- associating data to the elements of these discrete domains,
- efficient distribution and iteration over this data.
All these abstractions are handled at compilation using C++ template meta-programming to ensure zero overhead at execution and enable developers to change their design choices (e.g. from a regular mesh to a non-uniform one) with performance portability.
If you like the project, please leave us a github star.
If you want to know more, join un on Slack
To use DDC core, one needs the following dependencies:
- a C++17-compliant compiler
- CMake 3.22...<4
- Kokkos 4.4...<5
- (optional, micro benchmarking) Benchmark 1.8...<2
- (optional, documentation) Doxygen 1.8.13...<2
- (optional, unit-testing) GoogleTest 1.14...<2
To use DDC components, one needs the following dependencies:
- (optional, fft interface) DDC::fft
- Kokkos-fft 0.2.1...<1
- (optional, IO interface) DDC::pdi
- PDI 1.6...<2
- (optional, spline interpolation) DDC::splines
- Ginkgo 1.8...<2
- Kokkos Kernels 4.5.1...<5
git clone --recurse-submodules --jobs 4 https://github.com/CExA-project/ddc.git
cd ddc
cmake -D DDC_BUILD_KERNELS_FFT=OFF -D DDC_BUILD_KERNELS_SPLINES=OFF -D DDC_BUILD_PDI_WRAPPER=OFF -B build
cmake --build build --parallel 4
Please see this page for details on how to contribute.
- Kokkos 4.5.0 embeds a version of mdspan that is not compatible with DDC, see kokkos/mdspan#368. This issue has been fixed in Kokkos 4.5.1.