/HDagg-benchmark

HDagg's source code used to evaluate the paper "HDagg: Hybrid Aggregation of Loop-carried Dependence Iterations in Sparse Matrix Computations."

Primary LanguageC++GNU General Public License v3.0GPL-3.0

APM example workflow example workflow

HDagg

Hybrid Aggregation of Loop-carried Dependence Iterations in Sparse Matrix Computations (HDagg) is a DAG partitioning/scheduling algorithm used for making sparse matrix loops parallel. It can be used within code generators or libraries. It is integrated into Sympiler framework. This repository is the opensource reference implementation of the IPDPS 2022 paper. For more information see Sympiler documents.

Files

  • src/: source code
  • cmake/ and CMakeLists.txt: CMake files
  • input/: input folder where matrices reside
  • output/: output folder to store data
  • demo/: example folder to show HDagg usage
  • scripts/: Python and Bash scripts for generating and processing results

Install

Prerequisites

First following items should be installed:

  • CMake
  • C++ compiler (GCC, ICC, or CLang)
  • METIS (optional) dependency for running the demo efficiently and is handled by the cmake. If you have installed the package using a packet manager (e.g., apt of homebrew), CMake should be able to detect it. Otherwise, it installs METIS from source internally.
  • OpenMP (optional) for running some parts of the code in parallel. If you use GCC/ICC then OpenMP should be supported natively. If you use Apple CLang, you probably need to install OpenMP using homebrew install libomp. You can
  • also install LLVM usng brew install llvm which support OpenMP natively.

MKL

The cmake currently supports mkl library inside oneapi. To use it, please provide $MKLROOT environmental variable using export MKLROOT=<your-address>/make/latest.

  • For example: export MKLROOT=/opt/intel/oneapi/mkl/latest/

Relative Works

You can switch the HDAGG_WITH_SPMP and HDAGG_WITH_DAGP options in CMakeLists.txt to add the SpMP or DAGP. To use these tools, after installation, provide their addresses using $SPMPROOT and $DAGPROOT.

  • For example: export SPMPROOT=/home/behrooz/SpMP

Build

Then build HDagg, using the following:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make

You can always set -DCMAKE_CXX_COMPILER= and -DCMAKE_C_COMPILER= to use a different compiler. For example: cmake -DCMAKE_CXX_COMPILER=/usr/local/Cellar/gcc\@9/9.3.0_2/bin/g++-9 -DCMAKE_C_COMPILER=/usr/local/Cellar/gcc\@9/9.3.0_2/bin/gcc-9 ..

Run

For each executable file the inputs is as follows: ./<executable_address> <matrix_address> <num_threads> for example: ./build/demo/HDAGG_SpTRSV input/apache2.mtx 10