Learn » Tutorial » Learning about reductions

void reduceResult(int result) {
  NodeType const num_nodes = ::vt::theContext()->getNumNodes();
  (void)num_nodes;  // don't warn about possibly unused variable
  fmt::print("reduction value={}\n", result);
  assert(num_nodes * 50 == result);
}

// Tutorial code to demonstrate using reduction on all nodes
static inline void activeMessageReduce() {
  NodeType const this_node = ::vt::theContext()->getNode();
  (void)this_node;  // don't warn about unused variable
  NodeType const num_nodes = ::vt::theContext()->getNumNodes();
  (void)num_nodes;  // don't warn about unused variable

  /*
   * Perform reduction over all the nodes.
   */
  NodeType const root_reduce_node = 0;

  auto r = vt::theCollective()->global();
  r->reduce<reduceResult, collective::PlusOp>(vt::Node{root_reduce_node}, 50);
}