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 |
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 ), 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.
T | the type of elements to be communicated |
Span | the iteration space for elements on each level of the butterfly |