OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
SplitStrategy.h
Go to the documentation of this file.
1#ifndef __SPLIT_STRATEGY__
2#define __SPLIT_STRATEGY__
3
4#include "mpi.h"
5
6#include "Util/CmdArguments.h"
8
9
11
14
15public:
16
18 MPI_Comm comm = MPI_COMM_WORLD)
19 : comm_(comm)
20 , cmd_args_(args)
22 {
23
24 MPI_Comm_rank(comm, &rank_);
25 MPI_Comm_rank(MPI_COMM_WORLD, &global_rank_);
26 MPI_Comm_size(comm, &num_procs_);
27
28 group_id_ = 0;
29
30 if(num_procs_ < 3)
31 throw OptPilotException("SplitStrategy::SplitStrategy",
32 "We need 3 or more cores to split!");
33 }
34
35
37 {}
38
39
44 virtual void split() = 0;
45
47 virtual int getNrWorkerGroups() const = 0;
48
49 MPI_Comm getComm() const { return comm_; }
50
51 int getRank() const { return rank_; }
52 int getGlobalRank() const { return global_rank_; }
53 int getNP() const { return num_procs_; }
54
55 Role_t getRole() const { return role_; }
56 int getLeader() const { return leader_; }
57 int getPoller() const { return poller_; }
58
59
60private:
61
63 MPI_Comm comm_;
64
65
66protected:
67
68 int rank_;
72
74
76
78 std::vector<unsigned int> colorings_;
79
82
85};
86
87#endif
Role_t
roles a processor can attain
Definition: Types.h:35
@ UNASSIGNED
Definition: Types.h:35
boost::shared_ptr< CmdArguments > CmdArguments_t
Definition: CmdArguments.h:176
commGroupColorings_t
Definition: SplitStrategy.h:10
@ Internal
Definition: SplitStrategy.h:10
@ ExternalToOpt
Definition: SplitStrategy.h:10
@ ExternalToWorker
Definition: SplitStrategy.h:10
Defines an interface for splitter strategy implementations.
Definition: SplitStrategy.h:13
int leader_
every core specifies a leader (master is its own leader)
Definition: SplitStrategy.h:81
int getNP() const
Definition: SplitStrategy.h:53
std::vector< unsigned int > colorings_
defines comm splitting
Definition: SplitStrategy.h:78
int poller_
every core can specifies a master
Definition: SplitStrategy.h:84
virtual int getNrWorkerGroups() const =0
Get number of worker groups.
CmdArguments_t cmd_args_
Definition: SplitStrategy.h:73
MPI_Comm comm_
communicator we are splitting
Definition: SplitStrategy.h:63
int getRank() const
Definition: SplitStrategy.h:51
int getLeader() const
Definition: SplitStrategy.h:56
int getGlobalRank() const
Definition: SplitStrategy.h:52
SplitStrategy(CmdArguments_t args, MPI_Comm comm=MPI_COMM_WORLD)
Definition: SplitStrategy.h:17
Role_t getRole() const
Definition: SplitStrategy.h:55
int getPoller() const
Definition: SplitStrategy.h:57
virtual void split()=0
virtual ~SplitStrategy()
Definition: SplitStrategy.h:36
MPI_Comm getComm() const
Definition: SplitStrategy.h:49