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