1 #include<mpi.h> 2 #include<assert.h> 3 #include"ph_mpi_help.h" 4 int ph_ar_int(int val, int op) { 5 int res = 0; 6 int err = MPI_Allreduce(&val,&res,1,MPI_INT,op,MPI_COMM_WORLD); 7 assert(err == MPI_SUCCESS); 8 return res; 9 } 10 double ph_ar_dbl(double val, int op) { 11 double res = 0; 12 int err = MPI_Allreduce(&val,&res,1,MPI_DOUBLE,op,MPI_COMM_WORLD); 13 assert(err == MPI_SUCCESS); 14 return res; 15 } 16 long ph_ar_long(long val, int op) { 17 long res = 0; 18 int err = MPI_Allreduce(&val,&res,1,MPI_LONG,op,MPI_COMM_WORLD); 19 assert(err == MPI_SUCCESS); 20 return res; 21 } 22 int ph_min_int(int val) { 23 return ph_ar_int(val,MPI_MIN); 24 } 25 int ph_max_int(int val) { 26 return ph_ar_int(val,MPI_MAX); 27 } 28 long ph_add_long(long val) { 29 return ph_ar_long(val,MPI_SUM); 30 } 31 double ph_min_double(double val) { 32 return ph_ar_dbl(val,MPI_MIN); 33 } 34 double ph_max_double(double val) { 35 return ph_ar_dbl(val,MPI_MAX); 36 } 37 double ph_add_double(double val) { 38 return ph_ar_dbl(val,MPI_SUM); 39 } 40 int ph_self() { 41 int self; 42 MPI_Comm_rank(MPI_COMM_WORLD, &self); 43 return self; 44 } 45 int ph_peers() { 46 int peers; 47 MPI_Comm_size(MPI_COMM_WORLD, &peers); 48 return peers; 49 } 50