STAPL API Reference          
Overview   Containers   Algorithms   Views   Skeletons   Run-Time System
Modules     Classes    
List of all members | Public Member Functions | Protected Attributes
stapl::aggregator_base< Elem, Cont, Derived > Struct Template Reference

Base class for aggregators. More...

Public Member Functions

 aggregator_base (Cont *pc, size_t max_msg_sz=16384)
 
size_t target_location (Elem const &x) const
 Returns the ID of the location where the specified element is stored. More...
 
void add (Elem const &x)
 Adds an element to the aggregator. More...
 
void add (Elem const &x, size_t loc)
 Adds an element to the aggregator, when the target location is given. More...
 
 ~aggregator_base ()
 Destructor will also flush any remaining elements in the queues.
 
void flush (void)
 Flush the queues for all locations.
 
void flush (size_t i)
 Flush the queue for the provided location. More...
 
void local_flush (void)
 Flush the queue for this location. This is a local operation.
 
Cont * container (void)
 
void manual_destruct (void)
 Flush all queues that are not empty.
 

Protected Attributes

std::vector< std::vector< Elem > > m_send_queue
 Container for storing requests to each location.
 
std::vector< size_t > m_loc_ids
 Container storing a random shuffling for all location-ids. Shuffling the location-ids provides better performance by easing network traffic.
 
Cont * m_pc
 Pointer to the container where requests will be executed.
 
size_t m_max_msg_aggregate_sz
 Maximum number of requests that will be aggregated.
 
size_t m_loc_id
 The ID of this location.
 

Detailed Description

template<typename Elem, typename Cont, typename Derived>
struct stapl::aggregator_base< Elem, Cont, Derived >

Base class for aggregators.

Aggregates requests to vertices and flushes them out when either a set number of requests have been aggregated (on a per-location basis) or when the aggregator object is destroyed.

Performance optimization for hiding overhead of sending many small messages over the runtime. Experiments have shown significant benefit from using aggregators in algorithms requiring heavy communication as is the case with the Graph500 benchmark.

Template Parameters
ElemThe type of the user-requests being aggregated.
ContThe type of the container (graphs).
DerivedThe most derived type for CRTP.

Member Function Documentation

◆ target_location()

template<typename Elem, typename Cont, typename Derived>
size_t stapl::aggregator_base< Elem, Cont, Derived >::target_location ( Elem const &  x) const

Returns the ID of the location where the specified element is stored.

Derived classes may chose to overwrite this method to provide a suitable method to find what the element is. By default, the element GID is provided by the .target() method.

◆ add() [1/2]

template<typename Elem, typename Cont, typename Derived>
void stapl::aggregator_base< Elem, Cont, Derived >::add ( Elem const &  x)

Adds an element to the aggregator.

This will trigger a flush if the queue for the target location has exceeded the maximum message size.

◆ add() [2/2]

template<typename Elem, typename Cont, typename Derived>
void stapl::aggregator_base< Elem, Cont, Derived >::add ( Elem const &  x,
size_t  loc 
)

Adds an element to the aggregator, when the target location is given.

This will trigger a flush if the queue for the target location has exceeded the maximum message size.

Parameters
xThe element to send.
locThe location to send the element to.

◆ flush()

template<typename Elem, typename Cont, typename Derived>
void stapl::aggregator_base< Elem, Cont, Derived >::flush ( size_t  i)

Flush the queue for the provided location.

Parameters
iThe location whose queue is to be flushed.

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