From 066c1b3ea394b40b46cf1e67f4dadecd33a3a531 Mon Sep 17 00:00:00 2001 From: Jonathan Lifflander Date: Thu, 27 Apr 2023 15:28:49 -0700 Subject: [PATCH] #276: reduce: reorder arguments for bare reduce to match --- examples/hello_world/hello_reduce.cc | 2 +- src/vt/collective/reduce/get_reduce_stamp.h | 1 + src/vt/collective/reduce/reduce.h | 32 +++++++++------------ src/vt/collective/reduce/reduce.impl.h | 14 +++++++++ 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/examples/hello_world/hello_reduce.cc b/examples/hello_world/hello_reduce.cc index 46e4dd2170..69a11bee89 100644 --- a/examples/hello_world/hello_reduce.cc +++ b/examples/hello_world/hello_reduce.cc @@ -55,7 +55,7 @@ int main(int argc, char** argv) { vt::NodeType const root = 0; auto r = vt::theCollective()->global(); - r->reduce(vt::Node{root}, 50, 52.334); + r->reduce(vt::Node{root}, 50, 52.334); vt::finalize(); return 0; diff --git a/src/vt/collective/reduce/get_reduce_stamp.h b/src/vt/collective/reduce/get_reduce_stamp.h index 49a313ab9b..03032b2406 100644 --- a/src/vt/collective/reduce/get_reduce_stamp.h +++ b/src/vt/collective/reduce/get_reduce_stamp.h @@ -48,6 +48,7 @@ #include "vt/collective/reduce/reduce_scope.h" #include "vt/messaging/message.h" +#include #include #include diff --git a/src/vt/collective/reduce/reduce.h b/src/vt/collective/reduce/reduce.h index be969eebd1..1293782edb 100644 --- a/src/vt/collective/reduce/reduce.h +++ b/src/vt/collective/reduce/reduce.h @@ -168,10 +168,19 @@ struct Reduce : virtual collective::tree::Tree { return reduce(root, msg, id, num_contrib); } - ////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////// - template class Op, auto f, typename... Params> + /** + * \brief Perform a reduction without a message + * + * \param[in] root the root node to target + * \param[in] params parameters to reduce + * + * \return a pending send + */ + template < + auto f, + template class Op = NoneOp, + typename... Params + > PendingSendType reduce(Node root, Params&&... params) { using Tuple = typename FuncTraits::TupleType; using OpT = Op; @@ -179,20 +188,7 @@ struct Reduce : virtual collective::tree::Tree { } template - PendingSendType reduce(Node root, Params&&... params) { - using Tuple = typename FuncTraits::TupleType; - using MsgT = ReduceTMsg; - - auto msg = vt::makeMessage(std::tuple{std::forward(params)...}); - auto id = detail::ReduceStamp{}; - auto han = auto_registry::makeAutoHandlerParam(); - msg->root_handler_ = han; - - return reduce(root.get(), msg.get(), id, 1); - } - ////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////// + PendingSendType reduce(Node root, Params&&... params); /** * \brief Reduce a message up the tree diff --git a/src/vt/collective/reduce/reduce.impl.h b/src/vt/collective/reduce/reduce.impl.h index ccd37b57c4..a68df467b1 100644 --- a/src/vt/collective/reduce/reduce.impl.h +++ b/src/vt/collective/reduce/reduce.impl.h @@ -83,6 +83,20 @@ void Reduce::reduceRootRecv(MsgT* msg) { .run(); } +template +Reduce::PendingSendType Reduce::reduce(Node root, Params&&... params) { + using Tuple = typename FuncTraits::TupleType; + using MsgT = ReduceTMsg; + + auto msg = vt::makeMessage(std::forward(params)...); + auto id = detail::ReduceStamp{}; + auto han = auto_registry::makeAutoHandlerParam(); + msg->root_handler_ = han; + + return reduce(root.get(), msg.get(), id, 1); +} + + template *f> Reduce::PendingSendType Reduce::reduce( NodeType const& root, MsgT* msg, Callback cb, detail::ReduceStamp id,