xref: /phasta/phastaIO/phiompi.c (revision 98d6580a8ecca5add329d7adadb1985835e1e604)
1 #include<mpi.h>
2 #include<assert.h>
3 #include"phiompi.h"
phio_ar_sizet(size_t val,int op)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 }
phio_ar_dbl(double val,int op)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 }
phio_min_sizet(size_t val)16 size_t phio_min_sizet(size_t val) {
17   return phio_ar_sizet(val,MPI_MIN);
18 }
phio_max_sizet(size_t val)19 size_t phio_max_sizet(size_t val) {
20   return phio_ar_sizet(val,MPI_MAX);
21 }
phio_add_sizet(size_t val)22 size_t phio_add_sizet(size_t val) {
23   return phio_ar_sizet(val,MPI_SUM);
24 }
phio_min_double(double val)25 double phio_min_double(double val) {
26   return phio_ar_dbl(val,MPI_MIN);
27 }
phio_max_double(double val)28 double phio_max_double(double val) {
29   return phio_ar_dbl(val,MPI_MAX);
30 }
phio_add_double(double val)31 double phio_add_double(double val) {
32   return phio_ar_dbl(val,MPI_SUM);
33 }
phio_self()34 int phio_self() {
35   int self;
36   MPI_Comm_rank(MPI_COMM_WORLD, &self);
37   return self;
38 }
phio_peers()39 int phio_peers() {
40   int peers;
41   MPI_Comm_size(MPI_COMM_WORLD, &peers);
42   return peers;
43 }
phio_barrier()44 void phio_barrier() {
45   MPI_Barrier(MPI_COMM_WORLD);
46 }
47