1 #include<mpi.h>
2 #include<assert.h>
3 #include"ph_mpi_help.h"
ph_ar_int(int val,int op)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 }
ph_ar_dbl(double val,int op)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 }
ph_ar_long(long val,int op)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 }
ph_min_int(int val)22 int ph_min_int(int val) {
23 return ph_ar_int(val,MPI_MIN);
24 }
ph_max_int(int val)25 int ph_max_int(int val) {
26 return ph_ar_int(val,MPI_MAX);
27 }
ph_add_long(long val)28 long ph_add_long(long val) {
29 return ph_ar_long(val,MPI_SUM);
30 }
ph_min_double(double val)31 double ph_min_double(double val) {
32 return ph_ar_dbl(val,MPI_MIN);
33 }
ph_max_double(double val)34 double ph_max_double(double val) {
35 return ph_ar_dbl(val,MPI_MAX);
36 }
ph_add_double(double val)37 double ph_add_double(double val) {
38 return ph_ar_dbl(val,MPI_SUM);
39 }
ph_self()40 int ph_self() {
41 int self;
42 MPI_Comm_rank(MPI_COMM_WORLD, &self);
43 return self;
44 }
ph_peers()45 int ph_peers() {
46 int peers;
47 MPI_Comm_size(MPI_COMM_WORLD, &peers);
48 return peers;
49 }
50