1 #include<mpi.h> 2 #include<assert.h> 3 #include"phiompi.h" 4 int phio_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 phio_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 phio_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 phio_min_int(int val) { 23 return phio_ar_int(val,MPI_MIN); 24 } 25 int phio_max_int(int val) { 26 return phio_ar_int(val,MPI_MAX); 27 } 28 long phio_add_long(long val) { 29 return phio_ar_long(val,MPI_SUM); 30 } 31 double phio_min_double(double val) { 32 return phio_ar_dbl(val,MPI_MIN); 33 } 34 double phio_max_double(double val) { 35 return phio_ar_dbl(val,MPI_MAX); 36 } 37 double phio_add_double(double val) { 38 return phio_ar_dbl(val,MPI_SUM); 39 } 40 int phio_self() { 41 int self; 42 MPI_Comm_rank(MPI_COMM_WORLD, &self); 43 return self; 44 } 45 int phio_peers() { 46 int peers; 47 MPI_Comm_size(MPI_COMM_WORLD, &peers); 48 return peers; 49 } 50