vt 1.6.0
(Virtual Transport)
Loading...
Searching...
No Matches
group_info_collective.h
Go to the documentation of this file.
1/*
2//@HEADER
3// *****************************************************************************
4//
5// group_info_collective.h
6// DARMA/vt => Virtual Transport
7//
8// Copyright 2019-2024 National Technology & Engineering Solutions of Sandia, LLC
9// (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S.
10// Government retains certain rights in this software.
11//
12// Redistribution and use in source and binary forms, with or without
13// modification, are permitted provided that the following conditions are met:
14//
15// * Redistributions of source code must retain the above copyright notice,
16// this list of conditions and the following disclaimer.
17//
18// * Redistributions in binary form must reproduce the above copyright notice,
19// this list of conditions and the following disclaimer in the documentation
20// and/or other materials provided with the distribution.
21//
22// * Neither the name of the copyright holder nor the names of its
23// contributors may be used to endorse or promote products derived from this
24// software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
30// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36// POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact darma@sandia.gov
39//
40// *****************************************************************************
41//@HEADER
42*/
43
44#if !defined INCLUDED_VT_GROUP_COLLECTIVE_GROUP_INFO_COLLECTIVE_H
45#define INCLUDED_VT_GROUP_COLLECTIVE_GROUP_INFO_COLLECTIVE_H
46
47#include "vt/config.h"
55
56#include <memory>
57#include <list>
58
59#include <mpi.h>
60
61namespace vt { namespace group {
62
63struct InfoColl : virtual InfoBase {
65 using GroupCollectivePtrType = std::unique_ptr<GroupCollective>;
69
70 explicit InfoColl(bool const in_is_in_group, MPI_Comm default_comm, bool make_mpi_group)
71 : is_in_group(in_is_in_group),
72 default_comm_(default_comm),
73 mpi_group_comm_(default_comm),
74 make_mpi_group_(make_mpi_group)
75 {
76 }
77
78 virtual ~InfoColl() = default;
79
80private:
81 /*
82 * Inner struct used as functor reduce target after the collective group is
83 * fully created a operational: this will be triggered.
84 */
87 };
88
89public:
91 NodeType getRoot() const;
92 bool isGroupDefault() const;
93 TreeType* getTree() const;
94 bool inGroup() const;
95 bool isReady() const;
96 void readyAction(ActionType const action);
97 MPI_Comm getComm() const;
98 void freeComm();
99 bool isEmptyGroup() const;
100
101protected:
102 void setupCollective();
104
105 static void upHan(GroupCollectiveMsg* msg);
106 static void downHan(GroupCollectiveMsg* msg);
107 static void newRootHan(GroupCollectiveMsg* msg);
108 static void downFinishedHan(GroupOnlyMsg* msg);
109 static void finalizeHan(GroupOnlyMsg* msg);
110 static void newTreeHan(GroupOnlyMsg* msg);
111 static void tree(GroupOnlyMsg* msg);
112
113private:
114 void upTree();
115 void atRoot();
116 void downTree(GroupCollectiveMsg* msg);
118 void newRoot(GroupCollectiveMsg* msg);
120 void finalizeTree(GroupOnlyMsg* msg);
121 void finalize();
122 void sendDownNewTree();
123 void newTree(NodeType const& parent);
125
126protected:
127 bool is_in_group = false;
128 bool finished_init_ = false;
129 bool in_phase_two_ = false;
132 std::vector<GroupCollMsgPtrType> msgs_ = {};
133 uint32_t arrived_count_ = 0;
134 uint32_t extra_count_ = 0;
136 uint32_t send_down_ = 0;
138 NodeType known_root_node_ = uninitialized_destination;
139 bool is_new_root_ = false;
140 bool has_root_ = false;
141 bool is_default_group_ = false;
142 bool is_empty_group_ = false;
143 std::size_t subtree_ = 0;
144
145private:
152
153private:
154 std::list<ActionType> pending_ready_actions_ = {};
155
156private:
157 //< Default, NON-OWNED, communicator.
158 MPI_Comm default_comm_ = MPI_COMM_NULL;
159 MPI_Comm mpi_group_comm_ = MPI_COMM_NULL;
160 bool make_mpi_group_ = false;
161};
162
163}} /* end namespace vt::group */
164
165#endif /*INCLUDED_VT_GROUP_COLLECTIVE_GROUP_INFO_COLLECTIVE_H*/
Definition group_info_base.h:55
GroupCollectiveInfoMsg< GroupMsg<::vt::Message > > GroupCollectiveMsg
Definition group_collective_msg.h:94
size_t RemoteOperationIDType
Definition group_common.h:56
GroupMsg<::vt::Message > GroupOnlyMsg
Definition group_msg.h:88
Definition activefn.h:51
uint64_t GroupType
Used for hold an identifier for a group.
Definition types_type.h:99
std::function< void()> ActionType
Used for generically store an action to perform.
Definition types_type.h:125
messaging::MsgSharedPtr< T > MsgSharedPtr
Definition smart_ptr.h:370
PhysicalResourceType NodeType
Used to hold the current node/rank or the number of nodes.
Definition types_type.h:57
A specific, isolated reducer instance for a given scope that sequences reduce operations via the redu...
Definition reduce.h:103
Definition group_collective_reduce_msg.h:54
Definition group_collective.h:58
Definition group_info_base.h:57
int32_t WaitCountType
Definition group_info_base.h:58
collective::tree::Tree TreeType
Definition group_info_base.h:59
Definition group_info_collective.h:85
void operator()(FinishedReduceMsg *msg)
Definition group_collective_finished.cc:53
void collectiveFn(MsgSharedPtr< GroupCollectiveMsg > msg)
Definition group_info_collective.cc:560
void downTreeFinished(GroupOnlyMsg *msg)
Definition group_info_collective.cc:769
void freeComm()
Definition group_info_collective.cc:103
void atRoot()
Definition group_info_collective.cc:234
RemoteOperationIDType down_tree_fin_cont_
Definition group_info_collective.h:147
bool inGroup() const
Definition group_info_collective.cc:827
bool is_in_group
Definition group_info_collective.h:127
InfoColl(bool const in_is_in_group, MPI_Comm default_comm, bool make_mpi_group)
Definition group_info_collective.h:70
RemoteOperationIDType makeCollectiveContinuation(GroupType const group_)
Definition group_info_collective.cc:515
void finalizeTree(GroupOnlyMsg *msg)
Definition group_info_collective.cc:755
static void upHan(GroupCollectiveMsg *msg)
Definition group_info_collective.cc:609
ReduceType * ReducePtrType
Definition group_info_collective.h:67
static void newRootHan(GroupCollectiveMsg *msg)
Definition group_info_collective.cc:778
bool make_mpi_group_
Definition group_info_collective.h:160
MsgSharedPtr< GroupCollectiveMsg > GroupCollMsgPtrType
Definition group_info_collective.h:68
MPI_Comm default_comm_
Definition group_info_collective.h:158
ReducePtrType getReduce() const
Definition group_info_collective.cc:794
void finalize()
Definition group_info_collective.cc:693
TreeType * getTree() const
Definition group_info_collective.cc:816
std::vector< GroupCollMsgPtrType > msgs_
Definition group_info_collective.h:132
GroupCollectivePtrType collective_
Definition group_info_collective.h:130
static void downHan(GroupCollectiveMsg *msg)
Definition group_info_collective.cc:774
std::size_t subtree_
Definition group_info_collective.h:143
bool finished_init_
Definition group_info_collective.h:128
GroupCollective GroupCollectiveType
Definition group_info_collective.h:64
bool is_new_root_
Definition group_info_collective.h:139
NodeType getRoot() const
Definition group_info_collective.cc:542
uint32_t extra_count_
Definition group_info_collective.h:134
void sendDownNewTree()
Definition group_info_collective.cc:679
std::list< ActionType > pending_ready_actions_
Definition group_info_collective.h:154
static void finalizeHan(GroupOnlyMsg *msg)
Definition group_info_collective.cc:786
bool isGroupDefault() const
Definition group_info_collective.cc:556
void upTree()
Definition group_info_collective.cc:244
bool is_empty_group_
Definition group_info_collective.h:142
MPI_Comm mpi_group_comm_
Definition group_info_collective.h:159
RemoteOperationIDType new_tree_cont_
Definition group_info_collective.h:150
collective::reduce::Reduce ReduceType
Definition group_info_collective.h:66
NodeType known_root_node_
Definition group_info_collective.h:138
void setupCollectiveSingular()
Definition group_info_collective.cc:72
RemoteOperationIDType new_root_cont_
Definition group_info_collective.h:151
WaitCountType coll_wait_count_
Definition group_info_collective.h:131
std::unique_ptr< GroupCollective > GroupCollectivePtrType
Definition group_info_collective.h:65
static void tree(GroupOnlyMsg *msg)
Definition group_info_collective.cc:602
void newRoot(GroupCollectiveMsg *msg)
Definition group_info_collective.cc:529
MPI_Comm getComm() const
Definition group_info_collective.cc:99
RemoteOperationIDType down_tree_cont_
Definition group_info_collective.h:146
RemoteOperationIDType finalize_cont_
Definition group_info_collective.h:149
virtual ~InfoColl()=default
bool isEmptyGroup() const
Definition group_info_collective.cc:804
bool is_default_group_
Definition group_info_collective.h:141
uint32_t send_down_finished_
Definition group_info_collective.h:137
bool has_root_
Definition group_info_collective.h:140
static void newTreeHan(GroupOnlyMsg *msg)
Definition group_info_collective.cc:790
static void downFinishedHan(GroupOnlyMsg *msg)
Definition group_info_collective.cc:782
RemoteOperationIDType up_tree_cont_
Definition group_info_collective.h:148
uint32_t arrived_count_
Definition group_info_collective.h:133
void readyAction(ActionType const action)
Definition group_info_collective.cc:808
void setupCollective()
Definition group_info_collective.cc:112
uint32_t send_down_
Definition group_info_collective.h:136
uint32_t extra_arrived_count_
Definition group_info_collective.h:135
bool in_phase_two_
Definition group_info_collective.h:129
void newTree(NodeType const &parent)
Definition group_info_collective.cc:651
bool isReady() const
Definition group_info_collective.cc:798
void downTree(GroupCollectiveMsg *msg)
Definition group_info_collective.cc:625