vt::collective::reduce::ReduceManager struct

Manage distinct scopes for reductions.

Manages distinct reducers with an associated scope to orchestrate multiple asynchronous sequences of reduce operations.

Derived classes

struct vt::collective::CollectiveAlg virtual
Perform asynchronous collectives within VT.

Public types

using ReducePtrType = std::unique_ptr<Reduce>
using ReduceScopeType = detail::ReduceScopeHolder<ReducePtrType>

Public static functions

template<typename MsgT>
static void reduceRootRecv(MsgT* msg)
Active function when a message reaches the root of the spanning tree and the reduction is complete.
template<typename MsgT>
static void reduceUpHan(MsgT* msg)
Active function when a message arrives for a given scope at some level in the spanning tree.

Constructors, destructors, conversion operators

ReduceManager()

Public functions

auto global() -> Reduce*
Get the global reducer.
auto getReducer(detail::ReduceScope const& scope) -> Reduce*
Get the reducer for a given scope.
auto getReducerObjGroup(ObjGroupProxyType const& proxy) -> Reduce*
Get the reducer for an objgroup.
auto getReducerVrtProxy(VirtualProxyType const& proxy) -> Reduce*
Get the reducer for a collection.
auto getReducerGroup(GroupType const& group) -> Reduce*
Get the reducer for a group.
auto getReducerComponent(ComponentIDType const& cid) -> Reduce*
Get the reducer for a VT component.
auto makeReducerCollective() -> Reduce*
Collectively make a new reducer that creates a unique reduction scope.
void makeReducerGroup(GroupType const& group, collective::tree::Tree* tree)
Create the reducer for a group when a custom (or non-global) spanning tree is required (cannot be created on demand)

Function documentation

template<typename MsgT>
static void vt::collective::reduce::ReduceManager::reduceRootRecv(MsgT* msg)

Active function when a message reaches the root of the spanning tree and the reduction is complete.

Parameters
msg in the reduce message

template<typename MsgT>
static void vt::collective::reduce::ReduceManager::reduceUpHan(MsgT* msg)

Active function when a message arrives for a given scope at some level in the spanning tree.

Parameters
msg in the reduce message

Reduce* vt::collective::reduce::ReduceManager::global()

Get the global reducer.

Returns the reducer

Reduce* vt::collective::reduce::ReduceManager::getReducer(detail::ReduceScope const& scope)

Get the reducer for a given scope.

Parameters
scope in the scope
Returns the reducer

Reduce* vt::collective::reduce::ReduceManager::getReducerObjGroup(ObjGroupProxyType const& proxy)

Get the reducer for an objgroup.

Parameters
proxy in the objgroup proxy
Returns the reducer

Reduce* vt::collective::reduce::ReduceManager::getReducerVrtProxy(VirtualProxyType const& proxy)

Get the reducer for a collection.

Parameters
proxy in the collection proxy
Returns the reducer

Reduce* vt::collective::reduce::ReduceManager::getReducerGroup(GroupType const& group)

Get the reducer for a group.

Parameters
group in the group ID
Returns the reducer

Reduce* vt::collective::reduce::ReduceManager::getReducerComponent(ComponentIDType const& cid)

Get the reducer for a VT component.

Parameters
cid in the component ID
Returns the reducer

\internalEach VT component that inherits from runtime::component::Component<T> gets its own scope.

Reduce* vt::collective::reduce::ReduceManager::makeReducerCollective()

Collectively make a new reducer that creates a unique reduction scope.

Returns the reducer with a new scope

void vt::collective::reduce::ReduceManager::makeReducerGroup(GroupType const& group, collective::tree::Tree* tree)

Create the reducer for a group when a custom (or non-global) spanning tree is required (cannot be created on demand)

Parameters
group in the group ID
tree in the associated spanning tree for the group