STAPL API Reference          
Overview   Containers   Algorithms   Views   Skeletons   Run-Time System
Modules     Classes    
Functions
+ Collaboration diagram for Functional Definition of:

Functions

template<typename T , typename Tag = stapl::use_default, typename Span = stapl::use_default>
skeletons::result_of::alltoall< T, Tag, Span > stapl::skeletons::alltoall (void)
 This alltoall skeleton is a recursive-doubling alltoall and works only for power-of-two sizes. More...
 
template<bool is_pos_aware = false, typename Flows = stapl::use_default, typename Span = stapl::use_default, typename Op , typename Filter = skeletons::no_filter>
result_of::butterfly< is_pos_aware, Flows, Span, Op, Filter > stapl::skeletons::butterfly (Op &&op, Filter &&filter=Filter())
 A butterfly skeleton is used in various applications including but not limited to a type of allreduce, FFT DIT. More...
 
template<bool is_pos_aware = false, typename Flows = stapl::use_default, typename Span = stapl::use_default, typename Op , typename Filter = skeletons::no_filter>
result_of::reverse_butterfly< is_pos_aware, Flows, Span, Op, Filter > stapl::skeletons::reverse_butterfly (Op &&op, Filter &&filter=Filter())
 A reverse butterfly skeleton is used in various applications including but not limited to a type of allreduce, FFT DIT. More...
 
template<typename Flows = stapl::use_default, typename Op >
result_of::pointer_jumping< Flows, Op > stapl::skeletons::pointer_jumping (Op &&op)
 A pointer jumping skeleton consists of $log2()$ levels $(k)$ of combining values of a given input with an element with the index $i - 2^{k}$. More...
 

Detailed Description

Skeletons Exchanging Data

Function Documentation

◆ alltoall()

template<typename T , typename Tag = stapl::use_default, typename Span = stapl::use_default>
skeletons::result_of::alltoall<T, Tag, Span> stapl::skeletons::alltoall ( void  )

This alltoall skeleton is a recursive-doubling alltoall and works only for power-of-two sizes.

In a recursive doubling alltoall each node sends its lower and upper half chunks to its butterflied pair in the parametric dependency. Each chunk is of size num_elem_per_node/2. The communication is therefore:

$\theta(log_{2}(n).n.num\_elem\_per\_node)$

Note
The current default implementation can only be used for power-of-two sizes, since it uses a butterfly skeleton.
Template Parameters
Tthe type of elements to be communicated
Spanthe span to be used for butterfly inside
Tagdetermines which type of alltoall to use

◆ butterfly()

template<bool is_pos_aware = false, typename Flows = stapl::use_default, typename Span = stapl::use_default, typename Op , typename Filter = skeletons::no_filter>
result_of::butterfly<is_pos_aware, Flows, Span, Op, Filter> stapl::skeletons::butterfly ( Op &&  op,
Filter &&  filter = Filter() 
)

A butterfly skeleton is used in various applications including but not limited to a type of allreduce, FFT DIT.

Template Parameters
is_pos_awarein some algorithms that use butterfly skeleton knowing the position of the element in the overall butterfly dependence graph is necessary, e.g., in FFT DIT. If you set this template parameter to true, this information will be sent to your workfunction by invoking its set_position
Flowsthe flow to be used between the levels of the butterfly
Spanthe iteration space for elements on each level of the butterfly skeleton
Parameters
opthe workfunction to be used in each butterfly parametric dependency.
Returns
a butterfly skeleton
See also
butterfly_pd
log_lazysize

◆ reverse_butterfly()

template<bool is_pos_aware = false, typename Flows = stapl::use_default, typename Span = stapl::use_default, typename Op , typename Filter = skeletons::no_filter>
result_of::reverse_butterfly<is_pos_aware, Flows, Span, Op, Filter> stapl::skeletons::reverse_butterfly ( Op &&  op,
Filter &&  filter = Filter() 
)

A reverse butterfly skeleton is used in various applications including but not limited to a type of allreduce, FFT DIT.

Template Parameters
is_pos_awarein some algorithms that use reverse butterfly skeleton knowing the position of the element in the overall reverse butterfly dependence graph is necessary, e.g., in FFT DIT. If you set this template parameter to true, this information will be sent to your workfunction by invoking its set_position
Flowsthe flow to be used between the levels of the reverse butterfly
Spanthe iteration space for elements on each level of the reverse butterfly skeleton
Parameters
opthe workfunction to be used in each reverse butterfly parametric dependency.
Returns
a reverse butterfly skeleton
See also
butterfly_pd
log_lazysize

◆ pointer_jumping()

template<typename Flows = stapl::use_default, typename Op >
result_of::pointer_jumping<Flows, Op> stapl::skeletons::pointer_jumping ( Op &&  op)

A pointer jumping skeleton consists of $log2()$ levels $(k)$ of combining values of a given input with an element with the index $i - 2^{k}$.

Pointer jumping is used in various algorithm such as Hillis-Steele scan.

Parameters
opthe operation to be used in each level
Template Parameters
Flowsthe flows to be used in repeat