OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
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 
15 public:
16 
18  MPI_Comm comm = MPI_COMM_WORLD)
19  : comm_(comm)
20  , cmd_args_(args)
21  , role_(UNASSIGNED)
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 
36  virtual ~SplitStrategy()
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 
60 private:
61 
63  MPI_Comm comm_;
64 
65 
66 protected:
67 
68  int rank_;
71  int group_id_;
72 
74 
76 
78  std::vector<unsigned int> colorings_;
79 
81  int leader_;
82 
84  int poller_;
85 };
86 
87 #endif
CmdArguments_t cmd_args_
Definition: SplitStrategy.h:73
std::vector< unsigned int > colorings_
defines comm splitting
Definition: SplitStrategy.h:78
virtual int getNrWorkerGroups() const =0
Get number of worker groups.
Role_t
roles a processor can attain
Definition: Types.h:20
boost::shared_ptr< CmdArguments > CmdArguments_t
Definition: CmdArguments.h:169
MPI_Comm getComm() const
Definition: SplitStrategy.h:49
int getRank() const
Definition: SplitStrategy.h:51
int leader_
every core specifies a leader (master is its own leader)
Definition: SplitStrategy.h:81
virtual void split()=0
int getNP() const
Definition: SplitStrategy.h:53
int poller_
every core can specifies a master
Definition: SplitStrategy.h:84
MPI_Comm comm_
communicator we are splitting
Definition: SplitStrategy.h:63
int getLeader() const
Definition: SplitStrategy.h:56
SplitStrategy(CmdArguments_t args, MPI_Comm comm=MPI_COMM_WORLD)
Definition: SplitStrategy.h:17
commGroupColorings_t
Definition: SplitStrategy.h:10
int getGlobalRank() const
Definition: SplitStrategy.h:52
virtual ~SplitStrategy()
Definition: SplitStrategy.h:36
Role_t getRole() const
Definition: SplitStrategy.h:55
Defines an interface for splitter strategy implementations.
Definition: SplitStrategy.h:13
int getPoller() const
Definition: SplitStrategy.h:57