STAPL API Reference          
Overview   Containers   Algorithms   Views   Skeletons   Run-Time System
Modules     Classes    
List of all members | Public Member Functions | Public Types
stapl::skeletons::skeletons_impl::alltoall< T, Span, skeletons::tags::butterfly< false > > Struct Template Reference

This class abstracts the semantics of an alltoall skeleton by exposing only the necessary information in its representation. More...

Public Member Functions

result_type operator() (V const &v) const
 
bool operator== (alltoall_filter const &other) const
 

Public Types

using skeleton_tag_type = tags::alltoall< tags::butterfly< false > >
 
using base_type = decltype(skeletons::butterfly< true, stapl::use_default, Span >(alltoall_merge< T, tags::butterfly< false > >(), alltoall_filter< T, tags::butterfly< false > >()))
 
typedef std::vector< T > result_type
 

Detailed Description

template<typename T, typename Span>
struct stapl::skeletons::skeletons_impl::alltoall< T, Span, skeletons::tags::butterfly< false > >

This class abstracts the semantics of an alltoall skeleton by exposing only the necessary information in its representation.

A butterfly-based (recursive-doubling) alltoall reduces the load of communications by reducing the distance of communication at each level of the butterfly. This implementation of alltoall can be used for medium size messages. For larger messages it is advised to use a pair-based implementation (in which each nodes exchanges data with $index = i xor level$), or a ring-based implementation.

This abstraction not only makes the reconstruction of an alltoall skeleton easier, but also provides access to the information of how long the message can be on each location. Furthermore, it reduces the symbol size for an alltoall skeleton, hence, reducing the total compilation time.

Template Parameters
Tthe type of elements to be communicated
Spanthe iteration space for elements on each level of the butterfly
Note
This implementation can only be used for power-of-two sizes for other cases, one should use a ring-based, pair-wise, or any other alltoall implementations that can handle non-power-of-two inputs.

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