FRIBParallelanalysis  1.0
FrameworkforMPIParalleldataanalysisatFRIB
AbstractApplication.h
Go to the documentation of this file.
1 /*
2  This software is Copyright by the Board of Trustees of Michigan
3  State University (c) Copyright 2017.
4 
5  You may use this software under the terms of the GNU public license
6  (GPL). The terms of this license are described at:
7 
8  http://www.gnu.org/licenses/gpl.txt
9 
10  Authors:
11  Ron Fox
12  Giordano Cerriza
13  FRIB
14  Michigan State University
15  East Lansing, MI 48824-1321
16 */
17 
21 #ifndef ABSTRACTAPPLICATION_H
22 #define ABSTRACTAPPLICATION_H
23 #include <mpi.h>
24 namespace frib {
25  namespace analysis {
26  class CParameterReader;
103  private:
104  // Keep the program arguments so that we can access them from the
105  // methods.
106 
107  int m_argc;
108  char** m_argv;
109  unsigned m_nWorkers;
110  int m_rank;
111  private:
112  MPI_Datatype m_messageHeaderType;
113  MPI_Datatype m_requestDataType;
114  MPI_Datatype m_parameterHeaderDataType;
115  MPI_Datatype m_parameterValueDataType;
116  MPI_Datatype m_parameterDefDataType;
117  MPI_Datatype m_variableDefDataType;
118  public:
119  AbstractApplication(int argc, char** argv);
120  virtual ~AbstractApplication();
121  private:
123  AbstractApplication& operator=(const AbstractApplication& rhs);
124  int operator==(const AbstractApplication& rhs);
125  int operator!=(const AbstractApplication& rhs);
126 
127  public:
128  // Application entry point.
129 
130  virtual void operator()(CParameterReader& paramReader);
131 
132  // Roles in the program (Strategy methods).
133 
134  virtual void dealer(int argc, char** argv, AbstractApplication* pApp) = 0; // Rank 0
135  virtual void farmer(int argc, char** argv, AbstractApplication* pApp) = 0; // Rank 1
136  virtual void outputter(int argc, char** argv, AbstractApplication* pApp) = 0; // Rank 2
137  virtual void worker(int argc, char** argv, AbstractApplication* pApp) = 0; // Rank 3-n.
138 
139  // Get message header data type
140 
141  MPI_Datatype& messageHeaderType();
142  MPI_Datatype& requestDataType();
143  MPI_Datatype& parameterHeaderDataType();
144  MPI_Datatype& parameterValueDataType();
145  MPI_Datatype& parameterDefType();
146  MPI_Datatype& variableDefType();
147 
148  unsigned numWorkers();
149 
150  // Code factored out of other bits of the system:
151 
152  void forwardPassThrough(const void* pData, size_t nBytes);
153  int getRequest();
154  void sendEofs();
155  void sendEof();
156  void requestData(size_t maxBytes);
157  void throwMPIError(int status, const char* reason);
158 
159 
160  // Services for derived classes that might override operator():
161  protected:
162  int getArgc() const;
163  char** getArgv();
164  void makeDataTypes();
165 
166  };
167 
168 
169  }
170 }
171 
172 #endif
virtual ~AbstractApplication()
Definition: AbstractApplication.cpp:44
void makeDataTypes()
Definition: AbstractApplication.cpp:235
Definition: AbstractApplication.h:102
unsigned numWorkers()
Definition: AbstractApplication.cpp:175
virtual void operator()(CParameterReader &paramReader)
Definition: AbstractApplication.cpp:46
char ** getArgv()
Definition: AbstractApplication.cpp:128
MPI_Datatype & variableDefType()
Definition: AbstractApplication.cpp:168
void throwMPIError(int status, const char *reason)
Definition: AbstractApplication.cpp:389
Definition: ParameterReader.h:32
void sendEofs()
Definition: AbstractApplication.cpp:440
void forwardPassThrough(const void *pData, size_t nBytes)
Definition: AbstractApplication.cpp:185
void sendEof()
Definition: AbstractApplication.cpp:449
MPI_Datatype & parameterHeaderDataType()
Definition: AbstractApplication.cpp:143
int getRequest()
Definition: AbstractApplication.cpp:406
MPI_Datatype & messageHeaderType()
Definition: AbstractApplication.cpp:126
void requestData(size_t maxBytes)
Definition: AbstractApplication.cpp:370
AbstractApplication(int argc, char **argv)
Definition: AbstractApplication.cpp:38
MPI_Datatype & requestDataType()
Definition: AbstractApplication.cpp:134
MPI_Datatype & parameterValueDataType()
Definition: AbstractApplication.cpp:152
int getArgc() const
Definition: AbstractApplication.cpp:119
Definition: AbstractApplication.cpp:30
MPI_Datatype & parameterDefType()
Definition: AbstractApplication.cpp:160