00001 00005 class DistrProcManager : public HandleId 00006 00007 { 00008 protected: 00009 int my_id; 00010 int num_procs; 00011 int slaves_iter; 00012 int loop_length; 00013 int start_slave; 00014 int stop_slave; 00015 00016 int send_reqs_counter; 00017 int recv_reqs_counter; 00018 00019 public: 00020 DistrProcManager(){} 00021 ~DistrProcManager(); 00022 00023 virtual void init(int& argc, char**& argv); 00024 virtual void finish() {} 00025 00026 virtual int getNoProcs () { return 1; } 00027 virtual int getMyId () { return 0; } 00028 void setMyId (int new_id) { my_id = new_id; } 00029 00030 virtual bool isParallel () const { return false; } 00031 00032 int getSendCount() { return send_reqs_counter; } 00033 int getRecvCount() { return recv_reqs_counter; } 00034 00035 bool master () const { return getbool(my_id == 0); } 00036 bool slave () const { return getbool(my_id != 0); } 00037 00038 void startIteratorOverSlaves(); 00039 void startIteratorOverSlaves(int& start_slave, int& stop_slave); 00040 00041 bool nextSlave (int& i); 00042 00043 00044 00045 00046 virtual void broadcast (real& r, int root = 0); 00047 virtual void broadcast (int& i, int root = 0); 00048 virtual void broadcast (String& s, int root = 0); 00049 00050 00051 virtual void broadcast (char* c, int size, int root = 0); 00052 00053 00054 virtual void broadcast (String* s, int root = 0); 00055 00056 virtual void broadcast (VecSimple(int)& vec, int root = 0); 00057 virtual void broadcast (VecSimple(real)& vec, int root = 0); 00058 00059 00060 00061 00062 virtual void send (real& r, int to = 0, int tag = 0); 00063 virtual void recv (real& r, int from, int tag); 00064 00065 virtual void send (int& i, int to = 0, int tag = 0); 00066 virtual void recv (int& i, int from, int tag); 00067 00068 virtual void send (char& c, int to = 0, int tag = 0); 00069 virtual void recv (char& c, int from, int tag); 00070 00071 virtual void send (VecSimple(real)& vec, int to, int tag); 00072 virtual void recv (VecSimple(real)& vec, int from, int tag); 00073 00074 virtual void send (VecSimple(int)& vec, int to, int tag); 00075 virtual void recv (VecSimple(int)& vec, int from, int tag); 00076 00077 virtual void send (VecSimple(char)& vec, int to, int tag); 00078 virtual void recv (VecSimple(char)& vec, int from, int tag); 00079 00080 00081 virtual void startSend (real& r, int to = 0, int tag = 0); 00082 virtual void startRecv (real& r, int from, int tag); 00083 00084 virtual void startSend (int& i, int to = 0, int tag = 0); 00085 virtual void startRecv (int& i, int from, int tag); 00086 00087 virtual void startSend (char& c, int to = 0, int tag = 0); 00088 virtual void startRecv (char& c, int from, int tag); 00089 00090 virtual void startSend (VecSimple(real)& vec, int to = 0, int tag = 0); 00091 virtual void startRecv (VecSimple(real)& vec, int from, int tag); 00092 00093 virtual void startSend (VecSimple(int)& vec, int to = 0, int tag = 0); 00094 virtual void startRecv (VecSimple(int)& vec, int from, int tag); 00095 00096 virtual void startSend (VecSimple(char)& vec, int to = 0, int tag = 0); 00097 virtual void startRecv (VecSimple(char)& vec, int from, int tag); 00098 00099 virtual void finishSend (); 00100 virtual void finishRecv (); 00101 00102 00103 00104 00105 virtual void redimReqVec (int i); 00106 virtual void initRepSend (real& r, int to = 0, int tag = 0); 00107 virtual void initRepRecv (real& r, int from, int tag); 00108 virtual void initRepSend (int& i, int to = 0, int tag = 0); 00109 virtual void initRepRecv (int& i, int from, int tag); 00110 00111 virtual void initRepSend (VecSimple(real)& vec, int to = 0, int tag = 0); 00112 virtual void initRepRecv (VecSimple(real)& vec, int from, int tag); 00113 virtual void initRepSend (VecSimple(int)& vec, int to = 0, int tag = 0); 00114 virtual void initRepRecv (VecSimple(int)& vec, int from, int tag); 00115 00116 virtual void startRepSend (); 00117 virtual void startRepRecv (); 00118 00119 virtual void completeRepSend (); 00120 virtual void completeRepRecv (); 00121 00122 virtual void freeRepSend(); 00123 virtual void freeRepRecv(); 00124 00125 00126 00127 virtual void reduce (real& r_loc, real& r_glob, CommOperation op, 00128 int root = 0); 00129 virtual void reduce (int& i_loc, int& i_glob, CommOperation op, 00130 int root = 0); 00131 virtual void reduce (VecSimple(real)& r_loc, VecSimple(real)& r_glob, 00132 int length, CommOperation op, int root=0); 00133 virtual void reduce (VecSimple(int)& i_loc, VecSimple(int)& i_glob, 00134 int length, CommOperation op, int root=0); 00135 virtual void allReduce (real& r_loc, real& r_glob, CommOperation op); 00136 virtual void allReduce (int& i_loc, int& i_glob, CommOperation op); 00137 virtual void allReduce (VecSimple(real)& r_loc, VecSimple(real)& r_glob, 00138 int length, CommOperation op); 00139 virtual void allReduce (VecSimple(int)& i_loc, VecSimple(int)& i_glob, 00140 int length, CommOperation op); 00141 00142 virtual void synchronize (); 00143 virtual real getTime (); 00144 00145 00146 00147 virtual void probe (int source, int tag); 00148 virtual int getStatusSource (); 00149 virtual int getStatusTag (); 00150 virtual int getStatusError (); 00151 virtual int getStatusSize (); 00152 00153 virtual int getCommConstant (CommConstant const_name); 00154 00155 CLASS_INFO 00156 DEF_VIRTUAL_CAST(DistrProcManagerMPI) 00157 }; 00158 00159