ALP User Documentation 0.7.0
Algebraic Programming User Documentation
Static Public Attributes | List of all members
Properties< backend > Class Template Reference

Collection of various properties on the given ALP/GraphBLAS backend. More...

#include <properties.hpp>

Static Public Attributes

static constexpr const bool isBlockingExecution = true
 Whether the given backend supports blocking execution or is, instead, non-blocking. More...
 
static constexpr const bool isNonblockingExecution = !isBlockingExecution
 Whether the given backend is non-blocking or is, instead, blocking. More...
 
static constexpr const bool writableCaptured = true
 Whether a scalar, non-ALP/GraphBLAS object, may be captured by and written to by a lambda function that is passed to grb::eWiseLambda. More...
 

Detailed Description

template<enum Backend backend>
class grb::Properties< backend >

Collection of various properties on the given ALP/GraphBLAS backend.

Template Parameters
backendThe backend of which to access its properties.

The properties collected here are meant to be compile-time constants that provide insight in what features the given backend supports. ALP user code may rely on the properties specified herein. All ALP backends must define all properties here specified.

The default template class shall be empty in order to ensure implementing backends must specialise this class, while also making sure no backend may accidentally implicitly and erroneously propagate global defaults.

Member Data Documentation

◆ isBlockingExecution

constexpr const bool isBlockingExecution = true
staticconstexpr

Whether the given backend supports blocking execution or is, instead, non-blocking.

In blocking execution mode, any ALP/GraphBLAS primitive, when it returns, is guaranteed to have completed the requested computation.

If a given backend has this property true then the isNonblockingExecution property must read false, and vice versa.

◆ isNonblockingExecution

constexpr const bool isNonblockingExecution = !isBlockingExecution
staticconstexpr

Whether the given backend is non-blocking or is, instead, blocking.

In non-blocking execution mode, any ALP/GraphBLAS primitive, on return, may in fact not have completed the requested computation.

Non-blocking execution thus allows for the lazy evaluation of an ALP code, which, in turn, allows for cross-primitive optimisations to be automatically applied.

If a given backend has this property true then the isBlockingExecution property must read false, and vice versa.

◆ writableCaptured

constexpr const bool writableCaptured = true
staticconstexpr

Whether a scalar, non-ALP/GraphBLAS object, may be captured by and written to by a lambda function that is passed to grb::eWiseLambda.

Typically, if the backend is shared-memory parallel, this function would return false. Purely Single Program, Multiple Data (SPMD) backends over distributed memory, including simple sequential backends, would have this property return true.

Notably, hybrid SPMD + OpenMP backends (e.g., grb::hybrid), are not pure SPMD and as such would return false.

See also
grb::eWiseLambda()

The documentation for this class was generated from the following file: