1f42e0444SCameron Smith #include<mpi.h>
2f42e0444SCameron Smith #include<assert.h>
3f42e0444SCameron Smith #include"phiompi.h"
phio_ar_sizet(size_t val,int op)437dc80d0SCameron Smith size_t phio_ar_sizet(size_t val, int op) {
537dc80d0SCameron Smith size_t res = 0;
637dc80d0SCameron Smith int err = MPI_Allreduce(&val,&res,1,MPI_UNSIGNED_LONG,op,MPI_COMM_WORLD);
7f42e0444SCameron Smith assert(err == MPI_SUCCESS);
8f42e0444SCameron Smith return res;
9f42e0444SCameron Smith }
phio_ar_dbl(double val,int op)10f42e0444SCameron Smith double phio_ar_dbl(double val, int op) {
11f42e0444SCameron Smith double res = 0;
12f42e0444SCameron Smith int err = MPI_Allreduce(&val,&res,1,MPI_DOUBLE,op,MPI_COMM_WORLD);
13f42e0444SCameron Smith assert(err == MPI_SUCCESS);
14f42e0444SCameron Smith return res;
15f42e0444SCameron Smith }
phio_min_sizet(size_t val)1637dc80d0SCameron Smith size_t phio_min_sizet(size_t val) {
1737dc80d0SCameron Smith return phio_ar_sizet(val,MPI_MIN);
18f42e0444SCameron Smith }
phio_max_sizet(size_t val)1937dc80d0SCameron Smith size_t phio_max_sizet(size_t val) {
2037dc80d0SCameron Smith return phio_ar_sizet(val,MPI_MAX);
21f42e0444SCameron Smith }
phio_add_sizet(size_t val)2237dc80d0SCameron Smith size_t phio_add_sizet(size_t val) {
2337dc80d0SCameron Smith return phio_ar_sizet(val,MPI_SUM);
24f42e0444SCameron Smith }
phio_min_double(double val)25f42e0444SCameron Smith double phio_min_double(double val) {
26f42e0444SCameron Smith return phio_ar_dbl(val,MPI_MIN);
27f42e0444SCameron Smith }
phio_max_double(double val)28f42e0444SCameron Smith double phio_max_double(double val) {
29f42e0444SCameron Smith return phio_ar_dbl(val,MPI_MAX);
30f42e0444SCameron Smith }
phio_add_double(double val)31f42e0444SCameron Smith double phio_add_double(double val) {
32f42e0444SCameron Smith return phio_ar_dbl(val,MPI_SUM);
33f42e0444SCameron Smith }
phio_self()34f42e0444SCameron Smith int phio_self() {
35f42e0444SCameron Smith int self;
36f42e0444SCameron Smith MPI_Comm_rank(MPI_COMM_WORLD, &self);
37f42e0444SCameron Smith return self;
38f42e0444SCameron Smith }
phio_peers()39f42e0444SCameron Smith int phio_peers() {
40f42e0444SCameron Smith int peers;
41f42e0444SCameron Smith MPI_Comm_size(MPI_COMM_WORLD, &peers);
42f42e0444SCameron Smith return peers;
43f42e0444SCameron Smith }
phio_barrier()44*b17e869eSCameron Smith void phio_barrier() {
45*b17e869eSCameron Smith MPI_Barrier(MPI_COMM_WORLD);
46*b17e869eSCameron Smith }
47