Directed Acyclic Graph Execution Engine (DAGEE) is a C++ library that enables programmers to express computation and data movement, as tasks in a graph structure, where edges represent task dependencies. Computation can be HIP kernels on GPU and C++ functions on CPUs. DAGEE schedules tasks concurrently and asynchronously, at runtime, as soon as their dependencies are met, i.e., their preceding tasks finish execution. This is an emerging alternative to conventional GPU programming with HIP Streams that can lead to better performance due to improved concurrency, efficiency, and utilization of hardware resources. DAGEE builds on AMD Research’s ATMI library, and uses it for low-level scheduling and hardware management.
- ROCm compatible hardware. See ROCm Release Page
- ROCm version 3.5 or newer. DAGEE will no longer work with ROCm versions older than 3.5
- Make sure following packages are installed (in addition to a basic ROCm installation). All these are available from ROCm DEB or RPM repos:
atmi comgr hip-base hsa-ext-rocr-dev hsa-rocr-dev hsakmt-roct hsakmt-roct-dev rocm-cmake rocm-dev rocm-device-libs
- Optional packages
rocminfo rocprofiler-dev hsa-amd-aqlprofile rocm-smi rocm-utils
DAGEE builds on top of ATMI. We
recommend cloning the ATMI source repo instead of installing atmi
deb/rpm
package to get the latest updates.
Clone ATMI:
git clone https://github.com/RadeonOpenCompute/atmi
Clone this repository:
$ git clone <path-to-dagee>
Create a build directory:
$ mkdir build
cd build
Run CMake:
$ CXX=/opt/rocm/bin/hipcc cmake -DATMI_SRC=<absolute-path-to-atmi-repo-dir> ..
Now you can compile the benchmarks
$ make -j
To run the benchmarks:
ctest
Or, individually ,e.g.:
./examples/kiteDagCpu
./examples/kiteDagGpu
DAGEE-lib
: the source code for DAGEE libraryexamples
: some simple example code showing how DAGEE can be usedcppUtils
: helper C++ classes and functionstools
: various scriptscmakeUtils
: cmake utility functions and scriptsdoc
: Source code for doxygen documentation
- Add
DAGEE-lib/include
andcppUtils/include
to the compiler's include path - Add ATMI_ROOT/include to the compiler's include path
- Link the executable with ATMI_BUILD/lib/libatmi_runtime.so
We use Doxygen. Run make doc
in the build directory to generate API documentation and a basic tutorial for DAGEE in <dagee-build-dir>/html
.
This is a research project undergoing development. Please open a Github issue if you encounter a bug or a problem.