00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _util_group_messmpi_h
00029 #define _util_group_messmpi_h
00030
00031 #include <util/group/message.h>
00032
00035 class MPIMessageGrp: public MessageGrp {
00036 protected:
00037 void* buf;
00038 int bufsize;
00039
00040 int rnode;
00041 int rtag;
00042 int rlen;
00043
00044 #if HAVE_P4
00045 int nlocal;
00046 int nremote;
00047 char *master;
00048 char * jobid;
00049
00050 struct p4_cluster {
00051 char *hostname;
00052 int nslaves;
00053 } *remote_clusters;
00054
00055 struct p4_cluster * my_node_info(const char[], int&);
00056 #endif
00057
00058 void init(int argc=-1, char **argv=0);
00059 public:
00060 MPIMessageGrp();
00061 MPIMessageGrp(const Ref<KeyVal>&);
00062 ~MPIMessageGrp();
00063
00064 void raw_send(int target, void* data, int nbyte);
00065 void raw_recv(int sender, void* data, int nbyte);
00066 void raw_sendt(int target, int type, void* data, int nbyte);
00067 void raw_recvt(int type, void* data, int nbyte);
00068
00069 int probet(int type);
00070
00071 int last_source();
00072 int last_size();
00073 int last_type();
00074
00075 void sync();
00076
00077 void reduce(double*, int n, GrpReduce<double>&,
00078 double*scratch = 0, int target = -1);
00079 void reduce(unsigned int*, int n, GrpReduce<unsigned int>&,
00080 unsigned int*scratch = 0, int target = -1);
00081 void reduce(int*, int n, GrpReduce<int>&,
00082 int*scratch = 0, int target = -1);
00083 void reduce(char*, int n, GrpReduce<char>&,
00084 char*scratch = 0, int target = -1);
00085 void reduce(unsigned char*, int n, GrpReduce<unsigned char>&,
00086 unsigned char*scratch = 0, int target = -1);
00087 void reduce(signed char*, int n, GrpReduce<signed char>&,
00088 signed char*scratch = 0, int target = -1);
00089 void reduce(short*, int n, GrpReduce<short>&,
00090 short*scratch = 0, int target = -1);
00091 void reduce(float*, int n, GrpReduce<float>&,
00092 float*scratch = 0, int target = -1);
00093 void reduce(long*, int n, GrpReduce<long>&,
00094 long*scratch = 0, int target = -1);
00095
00096 void raw_bcast(void* data, int nbyte, int from);
00097 };
00098
00099 #endif
00100
00101
00102
00103
00104