1 #include<mpi.h> 2 #include<assert.h> 3 #include"phiompi.h" 4 size_t phio_ar_sizet(size_t val, int op) { 5 size_t res = 0; 6 int err = MPI_Allreduce(&val,&res,1,MPI_UNSIGNED_LONG,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 size_t phio_min_sizet(size_t val) { 17 return phio_ar_sizet(val,MPI_MIN); 18 } 19 size_t phio_max_sizet(size_t val) { 20 return phio_ar_sizet(val,MPI_MAX); 21 } 22 size_t phio_add_sizet(size_t val) { 23 return phio_ar_sizet(val,MPI_SUM); 24 } 25 double phio_min_double(double val) { 26 return phio_ar_dbl(val,MPI_MIN); 27 } 28 double phio_max_double(double val) { 29 return phio_ar_dbl(val,MPI_MAX); 30 } 31 double phio_add_double(double val) { 32 return phio_ar_dbl(val,MPI_SUM); 33 } 34 int phio_self() { 35 int self; 36 MPI_Comm_rank(MPI_COMM_WORLD, &self); 37 return self; 38 } 39 int phio_peers() { 40 int peers; 41 MPI_Comm_size(MPI_COMM_WORLD, &peers); 42 return peers; 43 } 44