ALP User Documentation 0.7.0
Algebraic Programming User Documentation
Classes | Enumerations
Backends

ALP code is compiled using a compiler wrapper, which optionally takes a backend parameter as an argument. More...

Classes

class  Properties< backend >
 Collection of various properties on the given ALP/GraphBLAS backend. More...
 

Enumerations

enum  Backend {
  reference , reference_omp , hyperdags , nonblocking ,
  shmem1D , NUMA1D , GENERIC_BSP , BSP1D ,
  doublyBSP1D , BSP2D , autoBSP , optBSP ,
  hybrid , hybridSmall , hybridMid , hybridLarge ,
  minFootprint , banshee , banshee_ssr
}
 A collection of all backends. More...
 

Detailed Description

ALP code is compiled using a compiler wrapper, which optionally takes a backend parameter as an argument.

The backend selection controls for which use case the code is compiled. Options that are always included are:

  1. grb::reference, a single-process, auto-vectorising, sequential backend;
  2. grb::reference_omp, a single-process, auto-parallelising, shared-memory parallel backend based on OpenMP and the aforementioned vectorising backend;
  3. grb::hyperdags, a backend that captures the meta-data of computations while delegating the actual work to the grb::reference backend. At program exit, the grb::hyperdags backend dumps a HyperDAG of the computations performed.

Additionally, the following backends may be enabled by providing their dependences before building ALP:

  1. grb::BSP1D, an auto-parallelising, distributed-memory parallel backend based on the Lightweight Parallel Foundations (LPF). This is a multi-process backend and may rely on any single-process backend for process-local computations, which by default is grb::reference. Distributed-memory auto-parallelisation is achieved using a row-wise one-dimensional block-cyclic distributon. Its combination with the grb::reference_omp backend results in a fully hybrid shared- and distributed-memory GraphBLAS implementation.
  2. grb::hybrid, essentially the same backend as grb::BSP1D, but now composed with the grb::reference_omp backend for process-local computations. This backend facilitates full hybrid shared- and distributed-memory parallelisation.
  3. grb::banshee, a single-process, reference-based backend for the Banshee RISC-V hardware simulator making use of indirection stream semantic registers (ISSR). Written by Dan Iorga in collaboration with ETHZ. This backend is outdated, but, last tested, remained functional.

The grb::Backend enum lists all backends known to ALP. Properties of a backend that may affect more advanced user code are collected in grb::Properties.

Author
A. N. Yzelman, Huawei Technologies Switzerland AG (2020-current)

Enumeration Type Documentation

◆ Backend

enum Backend

A collection of all backends.

Depending on which dependences were configured during the bootstrapping of this ALP installation, some of these backends may be disabled.

Enumerator
reference 

The sequential reference implementation.

Supports fast operations with both sparse and dense vectors, and employs auto-vectorisation.

reference_omp 

The threaded reference implementation.

Supports fast operations with both sparse and dense vectors. Employs OpenMP used with a mixture of fork/join and SPMD programming styles.

hyperdags 

A backend that automatically extracts hyperDAGs from user computations.

It only captures metadata for recording the hyperDAG, and relies on another backend to actually execute the requested computations– by default, this is the reference backend.

nonblocking 

The threaded nonblocking implementation.

Supports fast operations with both sparse and dense vectors. This backend is currently under development.

BSP1D 

A parallel implementation based on a row-wise 1D data distribution, implemented using LPF.

This backend manages multiple user processes, manages data distributions of containers between those user processes, and decomposes primitives into local compute phases with intermittent communications. For local compute phases it composes with a single user process backend, reference by default.

hybrid 

A composed backend that uses reference_omp within each user process and BSP1D between sockets.

This backend is implemented using the BSP1D code, with the process-local backend overridden from reference to reference_omp.

banshee 

A variant for Snitch RISC-V cores.

It is based on an older reference backend.