STAPL API Reference          
Overview   Containers   Algorithms   Views   Skeletons   Run-Time System
Modules     Classes    
List of all members | Public Member Functions | Public Types | Static Public Attributes
stapl::skeletons::skeletons_impl::expand_from_pow_two_pd< Op, F, is_position_aware, SetResult > Class Template Reference

This parametric dependency is used in the postprocessing phase of various algorithms that only accept power-of-two input sizes. More...

Public Member Functions

 expand_from_pow_two_pd (Op op, F filter)
 
template<typename Coord , typename Visitor , typename In >
void case_of (Coord const &skeleton_size, Coord const &coord, Visitor &visitor, In &&in_flow) const
 If coord is <i, ...> it wraps the Op and sends it to the visitor. If q is the closest smaller power of two to n (r = n - q) and i < 2*r the following input is used: More...
 
template<typename Size , typename Coord , typename FlowIndex >
std::size_t consumer_count (Size const &skeleton_size, Coord const &producer_coord, FlowIndex) const
 Determines how many of the instances of this parametric dependency will be consuming from a producer with a given coordinate. This is a reverse query as compared to case_of. More...
 
template<typename Coord >
int get_result_id (Coord const &skeleton_size, Coord const &coord) const
 
Op get_op () const
 
get_filter () const
 
template<typename Coord , typename Span >
void configure (Coord &&, Span &&)
 

Public Types

using op_type = Op
 

Static Public Attributes

static constexpr std::size_t in_port_size = 1
 
static constexpr std::size_t op_arity = 1
 

Detailed Description

template<typename Op, typename F, bool is_position_aware, bool SetResult>
class stapl::skeletons::skeletons_impl::expand_from_pow_two_pd< Op, F, is_position_aware, SetResult >

This parametric dependency is used in the postprocessing phase of various algorithms that only accept power-of-two input sizes.

This parametric dependency is used in various algorithms such as broadcast to propagate the results of a power-of-two skeleton to an arbitrary size.

Template Parameters
Opthe workfunction to be applied on each pair of elements
Fthe filter to be applied on the data before expanding
is_pos_awarewhether the workfunction applied needs to know the position of the splitter in the dependence graph
See also
reduce_to_pow_two_pd

Member Function Documentation

◆ case_of()

template<typename Op , typename F , bool is_position_aware, bool SetResult>
template<typename Coord , typename Visitor , typename In >
void stapl::skeletons::skeletons_impl::expand_from_pow_two_pd< Op, F, is_position_aware, SetResult >::case_of ( Coord const &  skeleton_size,
Coord const &  coord,
Visitor &  visitor,
In &&  in_flow 
) const

If coord is <i, ...> it wraps the Op and sends it to the visitor. If q is the closest smaller power of two to n (r = n - q) and i < 2*r the following input is used:

  • in<0>[i/2]

Otherwise the following input is used:

  • in<0>[i-r]
Parameters
skeleton_size<n, m, p, ...> where each element is potentially multi-dimensional.
coord<i, j, k, ...> where i < n, j < m, k < p
visitorthe information about Op and input is passed so that later this information can be converted to a node in the dependence graph
in_flowa tuple of input flows to consume from

◆ consumer_count()

template<typename Op , typename F , bool is_position_aware, bool SetResult>
template<typename Size , typename Coord , typename FlowIndex >
std::size_t stapl::skeletons::skeletons_impl::expand_from_pow_two_pd< Op, F, is_position_aware, SetResult >::consumer_count ( Size const &  skeleton_size,
Coord const &  producer_coord,
FlowIndex   
) const

Determines how many of the instances of this parametric dependency will be consuming from a producer with a given coordinate. This is a reverse query as compared to case_of.

Template Parameters
FlowIndexthe flow index to which this request is sent

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