source: XIOS/dev/branch_openmp/extern/ep_dev/ep_barrier.cpp @ 1515

Last change on this file since 1515 was 1515, checked in by yushan, 3 years ago

save dev

File size: 1.3 KB
Line 
1#include "ep_lib.hpp"
2#include <mpi.h>
3#include "ep_declaration.hpp"
4#include "ep_mpi.hpp"
5
6namespace ep_lib
7{
8
9  int MPI_Barrier(MPI_Comm comm)
10  {
11    if(comm->is_intercomm) return MPI_Barrier_intercomm(comm);
12
13    if(comm->is_ep)
14    {
15      int ep_rank_loc = comm->ep_comm_ptr->size_rank_info[1].first;
16
17      MPI_Barrier_local(comm);
18
19      if(ep_rank_loc == 0)
20      {
21        ::MPI_Comm mpi_comm = to_mpi_comm(comm->mpi_comm);
22
23        ::MPI_Barrier(mpi_comm);
24      }
25
26      MPI_Barrier_local(comm);
27
28      return 0;
29    }
30    else if(comm->mpi_comm != static_cast< ::MPI_Comm*>(MPI_COMM_NULL->mpi_comm))
31    {
32      ::MPI_Comm mpi_comm = to_mpi_comm(comm->mpi_comm);
33      ::MPI_Barrier(mpi_comm);
34      return 0;
35    }
36
37    else return 0;
38  }
39
40
41  int MPI_Barrier_intercomm(MPI_Comm comm)
42  {
43
44    int ep_rank;
45    MPI_Comm_rank(comm, &ep_rank);
46
47    int ep_rank_loc = comm->ep_rank_map->at(ep_rank).first;
48
49    MPI_Barrier_local(comm);
50
51    if(ep_rank_loc == 0)
52    {
53      //::MPI_Comm mpi_comm = to_mpi_comm(comm->ep_comm_ptr->intercomm->mpi_inter_comm);
54      ::MPI_Barrier(to_mpi_comm(comm->ep_comm_ptr->intercomm->mpi_inter_comm));
55    }
56
57    MPI_Barrier_local(comm);
58
59    return 0;
60
61  }
62
63
64  int MPI_Barrier_local(MPI_Comm comm)
65  {
66    //Message_Check(comm);
67    comm->ep_barrier->wait();
68  }
69
70
71}
72
73
Note: See TracBrowser for help on using the repository browser.