ALP User Documentation 0.7.0
Algebraic Programming User Documentation
|
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... | |
Collection of various properties on the given ALP/GraphBLAS backend.
backend | The 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.
|
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.
|
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.
|
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
.