1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
4 * (C) 2001 by Argonne National Laboratory.
5 * See COPYRIGHT in top-level directory.
9 #include "../coll_tuned_topo.hpp"
10 #include "../colls_private.hpp"
14 int Coll_barrier_mpich_smp::barrier(MPI_Comm comm)
16 int mpi_errno = MPI_SUCCESS;
17 int mpi_errno_ret = MPI_SUCCESS;
18 MPI_Comm shmem_comm = MPI_COMM_NULL, leader_comm = MPI_COMM_NULL;
21 if(comm->get_leaders_comm()==MPI_COMM_NULL){
25 shmem_comm = comm->get_intra_comm();
26 local_rank = shmem_comm->rank();
27 /* do the intranode barrier on all nodes */
28 if (shmem_comm != NULL) {
29 mpi_errno = Coll_barrier_mpich::barrier(shmem_comm);
31 mpi_errno_ret+=mpi_errno;
35 leader_comm = comm->get_leaders_comm();
36 /* do the barrier across roots of all nodes */
37 if (leader_comm != NULL && local_rank == 0) {
38 mpi_errno = Coll_barrier_mpich::barrier(leader_comm);
40 mpi_errno_ret+=mpi_errno;
44 /* release the local processes on each node with a 1-byte
45 * broadcast (0-byte broadcast just returns without doing
47 if (shmem_comm != NULL) {
49 mpi_errno = Coll_bcast_mpich::bcast(&i, 1, MPI_BYTE, 0, shmem_comm);
51 mpi_errno_ret+=mpi_errno;
56 mpi_errno = mpi_errno_ret;