Skip to content

Directed Acyclic Graph Execution Engine (DAGEE) is a C++ library that enables programmers to express computation and data movement, as task graphs that are scheduled concurrently and asynchronously on both CPUs and GPUs.

License

Notifications You must be signed in to change notification settings

AMDResearch/DAGEE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DAGEE (Directed Acyclic Graph Execution Engine)

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.

Prerequisites

  1. ROCm compatible hardware. See ROCm Release Page
  2. ROCm version 3.5 or newer. DAGEE will no longer work with ROCm versions older than 3.5
  3. 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

  1. Optional packages

rocminfo rocprofiler-dev hsa-amd-aqlprofile rocm-smi rocm-utils

Building & Running

Building

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

Source Tree Organization

  • DAGEE-lib : the source code for DAGEE library
  • examples : some simple example code showing how DAGEE can be used
  • cppUtils : helper C++ classes and functions
  • tools : various scripts
  • cmakeUtils : cmake utility functions and scripts
  • doc : Source code for doxygen documentation

Using DAGEE with your project

  • Add DAGEE-lib/include and cppUtils/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

Documentation

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.

Support

This is a research project undergoing development. Please open a Github issue if you encounter a bug or a problem.

About

Directed Acyclic Graph Execution Engine (DAGEE) is a C++ library that enables programmers to express computation and data movement, as task graphs that are scheduled concurrently and asynchronously on both CPUs and GPUs.

Resources

License

Stars

Watchers

Forks

Packages

No packages published