PIPS-NLP
sTree.h
Go to the documentation of this file.
1 /* PIPS-IPM *
2  * Author: Cosmin G. Petra *
3  * (C) 2012 Argonne National Laboratory. See Copyright Notification. */
4 
5 #ifndef STOCH_TREE_BASE
6 #define STOCH_TREE_BASE
7 
9 #include "StochVector.h"
10 #include "StochGenMatrix.h"
11 #include "StochSymMatrix.h"
12 
13 #include "list"
14 
15 #include "mpi.h"
16 
17 class sTree
18 {
19  public:
20  virtual ~sTree();
21 
22  int NumberOfChildren() const { return children.size(); }
23 
24  virtual void computeGlobalSizes() = 0;
25  void GetGlobalSizes(long long& NXOut, long long& MYOut, long long& MZOut);
26  //void GetLocalSizes(int& nxOut, int& myOut, int& mzOut);
27 
28  void assignProcesses ( MPI_Comm comm = MPI_COMM_WORLD);
29  void assignProcesses ( MPI_Comm, std::vector<int>&);
30 
31  MPI_Comm commWrkrs, myOldMpiComm; //workers only
32  std::vector<int> myProcs, myOldProcs;
33 
34  MPI_Comm commP2ZeroW; // preconditioner (rank P+1) and special (rank 0) worker
35  static int rankPrcnd; // rank of preconditioner
36  static int rankZeroW; // rank of the "special" worker (the root, or 0-rank process)
37  static int rankMe; // rank of the running process
38 
39  void startMonitors(); void startNodeMonitors();
40  void stopMonitors(); void stopNodeMonitors();
41  void syncMonitoringData(std::vector<double>& vCPUTotal);
42  bool balanceLoad();
43  bool balanceLoadPrecond();
44 
45  void getSyncInfo(int myRank, int& syncNeeded, int& sendOrRecv, int& toFromCPU );
46  void syncPrimalVector(StochVector& vec);
47  void syncDualYVector(StochVector& vec);
48  void syncDualZVector(StochVector& vec);
49  void syncStochVector(StochVector& vec);
50 
53 
54  virtual StochSymMatrix* createQ() const = 0;
55  virtual StochVector* createc() const = 0;
56 
57  virtual StochVector* createxlow() const = 0;
58  virtual StochVector* createixlow() const = 0;
59  virtual StochVector* createxupp() const = 0;
60  virtual StochVector* createixupp() const = 0;
61 
62 
63  virtual StochGenMatrix* createA() = 0;
64  virtual StochVector* createb() const = 0;
65 
66 
67  virtual StochGenMatrix* createC() = 0;
68  virtual StochVector* createclow() const = 0;
69  virtual StochVector* createiclow() const = 0;
70  virtual StochVector* createcupp() const = 0;
71  virtual StochVector* createicupp() const = 0;
72 
73  virtual StochVector* createCeqBody() const = 0;
74  virtual StochVector* createCineqBody() const = 0;
75  virtual StochVector* createBarrGrad() const = 0;
76 
78  StochVector* newDualYVector() const;
79  StochVector* newDualZVector() const;
83 
86 
87  int innerSize(int which);
88  virtual int nx() const = 0;
89  virtual int my() const = 0;
90  virtual int mz() const = 0;
91  virtual int id() const = 0;
92  virtual int mle() const{return 0;};
93  virtual int mli() const{return 0;};
94  virtual void get_FistStageSize(int& nx, int& my, int& mz){};
95  //returns the global load, i.e. statistic based on the NNZs and
96  //dimensions of the node (and subnodes) subproblem before any iteration or the CPU
97  //time of this node and its subnodes after the first iteration.
98  double processLoad() const;
99 
100  protected:
101  sTree();
102 
103  void toMonitorsList(std::list<NodeExecEntry>&);
104  void fromMonitorsList(std::list<NodeExecEntry>&);
105 
106  void computeNodeTotal();
107 
108  void saveCurrentCPUState();
109 
110  int isInVector(int elem, const std::vector<int>& vec);
111 
112 
113  public:
114  long long N,MY,MZ; //global sizes
115  int np; //n for the parent
116 
118  std::vector<sTree*> children;
119  static int numProcs;
120 
123 #ifdef STOCH_TESTING
124  void displayProcessInfo(int onWhichRank=0);
125  void displayProcessInfo(char* tab);
126  void runTestNGP();
127  void displayExecTimes(int onWhichRank=0);
128  void displayExecTimes(char* szTabbing);
129 
130  void displayVectorVsTreeStructure(StochVector& stVec, int rank, char* szTab);
131  void displayVectorVsTreeStructure(StochVector& stVec, int rank);
132 
133  void displayMatVsTreeStructure(StochGenMatrix& stVec, int myRank, char* tab);
134  void displayMatVsTreeStructure(StochGenMatrix& stVec, int myRank);
135 
136  void displayMatVsTreeStructure(StochSymMatrix& stVec, int myRank, char* tab);
137  void displayMatVsTreeStructure(StochSymMatrix& stVec, int myRank);
138 #endif
139 //to be called after assignProcesses
140  virtual void loadLocalSizes()=0;
141 };
142 
143 #endif
MPI_Comm commP2ZeroW
Definition: sTree.h:34
long long MZ
Definition: sTree.h:114
void saveCurrentCPUState()
Definition: sTree.C:798
StochVector * newRhs()
Definition: sTree.C:557
virtual void get_FistStageSize(int &nx, int &my, int &mz)
Definition: sTree.h:94
std::vector< int > myProcs
Definition: sTree.h:32
void toMonitorsList(std::list< NodeExecEntry > &)
Definition: sTree.C:616
void GetGlobalSizes(long long &NXOut, long long &MYOut, long long &MZOut)
Definition: sTree.C:176
int isInVector(int elem, const std::vector< int > &vec)
Definition: sTree.C:776
MPI_Comm commWrkrs
Definition: sTree.h:31
virtual StochVector * createixlow() const =0
Definition: sTree.h:17
void stopNodeMonitors()
Definition: sTree.C:608
StochVector * newPrimalVector() const
Definition: sTree.C:464
virtual ~sTree()
Definition: sTree.C:28
virtual StochVector * createCineqBody() const =0
double IPMIterExecTIME
Definition: sTree.h:117
double processLoad() const
Definition: sTree.C:167
virtual StochVector * createBarrGrad() const =0
long long N
Definition: sTree.h:114
virtual int mz() const =0
void syncMonitoringData(std::vector< double > &vCPUTotal)
Definition: sTree.C:633
void syncStochGenMatrix(StochGenMatrix &mat)
Definition: sTree.C:285
virtual int id() const =0
virtual StochVector * createiclow() const =0
void computeNodeTotal()
Definition: sTree.C:783
virtual StochGenMatrix * createC()=0
virtual StochVector * createicupp() const =0
virtual int nx() const =0
StochVector * newRhsXSYZ()
Definition: sTree.C:573
virtual int mle() const
Definition: sTree.h:92
Definition: StochResourcesMonitor.h:107
static StochIterateResourcesMonitor iterMon
Definition: sTree.h:122
void startMonitors()
Definition: sTree.C:589
virtual int mli() const
Definition: sTree.h:93
void fromMonitorsList(std::list< NodeExecEntry > &)
Definition: sTree.C:624
StochVector * newDualYVector() const
Definition: sTree.C:480
bool balanceLoadPrecond()
virtual StochVector * createxupp() const =0
static int rankMe
Definition: sTree.h:37
virtual void computeGlobalSizes()=0
void syncStochVector(StochVector &vec)
Definition: sTree.C:382
StochVector * newDualZVectorEmpty() const
Definition: sTree.C:541
std::vector< int > myOldProcs
Definition: sTree.h:32
void startNodeMonitors()
Definition: sTree.C:601
virtual StochVector * createclow() const =0
virtual StochVector * createcupp() const =0
StochVector * newDualZVector() const
Definition: sTree.C:495
virtual StochVector * createb() const =0
Definition: StochResourcesMonitor.h:43
virtual StochGenMatrix * createA()=0
bool balanceLoad()
Definition: sTree.C:676
void assignProcesses(MPI_Comm comm=MPI_COMM_WORLD)
Definition: sTree.C:34
virtual StochSymMatrix * createQ() const =0
std::vector< sTree * > children
Definition: sTree.h:118
Definition: StochGenMatrix.h:21
long long MY
Definition: sTree.h:114
void syncDualZVector(StochVector &vec)
Definition: sTree.C:206
MPI_Comm myOldMpiComm
Definition: sTree.h:31
virtual StochVector * createc() const =0
static int rankZeroW
Definition: sTree.h:36
int np
Definition: sTree.h:115
void stopMonitors()
Definition: sTree.C:595
void syncPrimalVector(StochVector &vec)
Definition: sTree.C:194
virtual StochVector * createxlow() const =0
sTree()
Definition: sTree.C:23
static int rankPrcnd
Definition: sTree.h:35
virtual StochVector * createixupp() const =0
void syncStochSymMatrix(StochSymMatrix &mat)
Definition: sTree.C:211
int innerSize(int which)
Definition: sTree.C:186
virtual StochVector * createCeqBody() const =0
virtual void loadLocalSizes()=0
int NumberOfChildren() const
Definition: sTree.h:22
StochNodeResourcesMonitor resMon
Definition: sTree.h:121
Definition: StochVector.h:19
static int numProcs
Definition: sTree.h:119
virtual int my() const =0
StochVector * newDualYVectorEmpty() const
Definition: sTree.C:526
StochVector * newPrimalVectorEmpty() const
Definition: sTree.C:511
void getSyncInfo(int myRank, int &syncNeeded, int &sendOrRecv, int &toFromCPU)
Definition: sTree.C:750
void syncDualYVector(StochVector &vec)
Definition: sTree.C:200
Definition: StochSymMatrix.h:20