7using Key2 = std::pair<int, int>;
11 os <<
"{" << std::get<0>(key) <<
", " << std::get<1>(key) <<
"}";
ttg::send <0>(
Key2{k, 0}, 1.0 + input, out);
ttg::send <0>(
Key2{k, 1}, 2.0 + input, out);
23 ttg::print(
"Called task B(", key,
") with input data ", input);
24 if (std::get<1>(key) == 0)
ttg::send <0>(std::get<0>(key), input + 1.0, out);
ttg::send <1>(std::get<0>(key), input + 1.0, out);
30static void c(
const int &k,
const double &b0,
const double &b1, std::tuple<
ttg::Out<int, double>> &out) {
31 ttg::print(
"Called task C(", k,
") with inputs ", b0,
" from B(", k,
" 0) and ", b1,
" from B(", k,
" 1)");
ttg::send <0>(k + 1, b0 + b1, out);
40int main(
int argc,
char **argv) {
50 {
"to 1st input of C",
"to 2nd input of C"}));
51 auto wc(ttg::make_tt(c,
ttg::edges(B_C0, B_C1),
ttg::edges(C_A),
"C", {
"From B",
"From B"}, {
"to A"}));
55 if (wa->get_world().rank() == 0) wa->invoke(0, 0.0);
Edge is used to connect In and Out terminals.
int main(int argc, char **argv)
std::pair< int, int > Key2
std::ostream & operator<<(std::ostream &os, ttg::device::Device device)
void execute(ttg::World world)
Starts the execution in the given execution context.
void initialize(int argc, char **argv, int num_threads=-1, RestOfArgs &&...)
void send()
Sends a control message (message without an accompanying task id or a value) to the template tasks at...
ttg::World & get_default_world()
void fence(ttg::World world)
Returns when all tasks associated with the given execution context have finished on all ranks.
void finalize()
Finalizes the TTG runtime.
void print(const T &t, const Ts &... ts)
atomically prints to std::cout a sequence of items (separated by ttg::print_separator) followed by st...
std::enable_if_t<(std::is_convertible_v< decltype(*(std::declval< TTBasePtrs >())), TTBase & > &&...), bool > make_graph_executable(TTBasePtrs &&...tts)
Make the TTG tts executable. Applies.
auto edges(inedgesT &&...args)
Make a tuple of Edges to pass to.