29 template <
typename Value,
typename BinaryOp,
typename OutKey>
31 :
public TT<int, std::tuple<Out<int, Value>, Out<int, Value>, Out<int, Value>, Out<OutKey, Value>>,
32 BinaryTreeReduce<Value, BinaryOp, OutKey>, ttg::typelist<Value, Value, Value>> {
41 {
"in|inout",
"inout_l",
"inout_r"}, {
"inout",
"inout_l",
"inout_r",
"out"}, world, [](
int key) {
return key; })
44 , op_(std::move(
op)) {
48 void op(
const int &key,
typename baseT::input_values_tuple_type &&
indata,
94 for (
auto key = 0; key != tree_.
size(); ++key) {
109template <
typename InKey,
template Value,
template Reducer,
template OutKey>
110class Reduce :
public TT<InKey, std::tuple<Out<OutKey, Value>>, Reduce<InKey, Value, Reducer, OutKey>, Value> {
112 using baseT = TT<InKey, std::tuple<Out<OutKey, Value>>, Reduce<InKey, Value, Reducer, OutKey>, Value>;
114 Reduce(Edge<InKey, Value> &in, Edge<OutKey, Value> &out, OutKey dest_key = OutKey(), std::size_t nitems = 1,
116 : baseT(
edges(in),
edges(out, Edge<OutKey, Value>(
"reduce")),
"Reduce", {
"in"}, {
"out"}, world)
117 , dest_key_(dest_key)
120 void op(
const InKey &key, baseT::input_values_tuple_type &&indata, std::tuple<Out<OutKey, Value>> &outdata) {
121 std::lock_guard<std::mutex> lock(mutex_);
123 reducer_(value_, baseT::get<0>(indata));
127 binary_tree_reduce_.set_arg<0>(world.rank(), std::move(value_));
a binary spanning tree of integers in the [0,size) interval
int parent_key(const int child_key) const
std::pair< int, int > child_keys(const int parent_key) const
generic binary reduction of a set of key-value pairs.
typename BinaryTreeReduce::ttT baseT
BinaryTreeReduce(Edge< int, Value > &in, Edge< OutKey, Value > &out, int root=0, OutKey dest_key=OutKey(), BinaryOp op=BinaryOp{}, World world=ttg::default_execution_context(), int max_key=-1, Edge< int, Value > inout=Edge< int, Value >{}, Edge< int, Value > inout_l=Edge< int, Value >{}, Edge< int, Value > inout_r=Edge< int, Value >{})
void op(const int &key, typename baseT::input_values_tuple_type &&indata, std::tuple< Out< int, Value >, Out< int, Value >, Out< int, Value >, Out< OutKey, Value > > &outdata)
Edge is used to connect In and Out terminals.
ttg_parsec::TT< int, std::tuple< Out< int, Value >, Out< int, Value >, Out< int, Value >, Out< OutKey, Value > >, BinaryTreeReduce< Value, BinaryOp, OutKey >, ttg::typelist< Value, Value, Value > >::get_world ttg::World get_world() const override final
ttg_parsec::TT< int, std::tuple< Out< int, Value >, Out< int, Value >, Out< int, Value >, Out< OutKey, Value > >, BinaryTreeReduce< Value, BinaryOp, OutKey >, ttg::typelist< Value, Value, Value > >::out std::tuple_element_t< i, std::tuple< Out< int, Value >, Out< int, Value >, Out< int, Value >, Out< OutKey, Value > > > * out()
ttg_parsec::TT< int, std::tuple< Out< int, Value >, Out< int, Value >, Out< int, Value >, Out< OutKey, Value > >, BinaryTreeReduce< Value, BinaryOp, OutKey >, ttg::typelist< Value, Value, Value > >::in std::tuple_element_t< i, input_terminals_type > * in()
ttg_parsec::TT< int, std::tuple< Out< int, Value >, Out< int, Value >, Out< int, Value >, Out< OutKey, Value > >, BinaryTreeReduce< Value, BinaryOp, OutKey >, ttg::typelist< Value, Value, Value > >::ttT TT ttT
ttg_parsec::TT< int, std::tuple< Out< int, Value >, Out< int, Value >, Out< int, Value >, Out< OutKey, Value > >, BinaryTreeReduce< Value, BinaryOp, OutKey >, ttg::typelist< Value, Value, Value > >::get static resultT get(InTuple &&intuple)
ttg_parsec::TT< int, std::tuple< Out< int, Value >, Out< int, Value >, Out< int, Value >, Out< OutKey, Value > >, BinaryTreeReduce< Value, BinaryOp, OutKey >, ttg::typelist< Value, Value, Value > >::get_keymap const decltype(keymap) & get_keymap() const
top-level TTG namespace contains runtime-neutral functionality
auto fuse(const Edge< keyT, valuesT > &...args)
Fuse edges into one This allows receiving one data from either of the combined edges.
World default_execution_context()
Accesses the default backend's default execution context.
int rank(World world=default_execution_context())
auto edges(inedgesT &&...args)
Make a tuple of Edges to pass to.