-/* Copyright (c) 2013-2014. The SimGrid Team.
+/* Copyright (c) 2013-2021. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
*
* Additional copyrights may follow
*/
-
+
/* -*- Mode: C; c-basic-offset:4 ; -*- */
/*
*
*
*/
-#include "../colls_private.h"
-#include "../coll_tuned_topo.h"
-
-int Coll_barrier_mvapich2_pair::barrier(MPI_Comm comm)
+#include "../coll_tuned_topo.hpp"
+#include "../colls_private.hpp"
+namespace simgrid{
+namespace smpi{
+int barrier__mvapich2_pair(MPI_Comm comm)
{
int size, rank;
/* N2_prev = greatest power of two < size of Comm */
for( N2_prev = 1; N2_prev <= size; N2_prev <<= 1 );
N2_prev >>= 1;
-
+
int surfeit = size - N2_prev;
/* Perform a combine-like operation */
if (rank < surfeit) {
/* get the fanin letter from the upper "half" process: */
dst = N2_prev + rank;
- Request::recv(NULL, 0, MPI_BYTE, dst, COLL_TAG_BARRIER,
- comm, MPI_STATUS_IGNORE);
+ Request::recv(nullptr, 0, MPI_BYTE, dst, COLL_TAG_BARRIER, comm, MPI_STATUS_IGNORE);
}
/* combine on embedded N2_prev power-of-two processes */
for (d = 1; d < N2_prev; d <<= 1) {
dst = (rank ^ d);
- Request::sendrecv(NULL, 0, MPI_BYTE, dst, COLL_TAG_BARRIER, NULL,
- 0, MPI_BYTE, dst, COLL_TAG_BARRIER, comm,
- MPI_STATUS_IGNORE);
+ Request::sendrecv(nullptr, 0, MPI_BYTE, dst, COLL_TAG_BARRIER, nullptr, 0, MPI_BYTE, dst, COLL_TAG_BARRIER,
+ comm, MPI_STATUS_IGNORE);
}
/* fanout data to nodes above N2_prev... */
if (rank < surfeit) {
dst = N2_prev + rank;
- Request::send(NULL, 0, MPI_BYTE, dst, COLL_TAG_BARRIER,
- comm);
+ Request::send(nullptr, 0, MPI_BYTE, dst, COLL_TAG_BARRIER, comm);
}
} else {
/* fanin data to power of 2 subset */
src = rank - N2_prev;
- Request::sendrecv(NULL, 0, MPI_BYTE, src, COLL_TAG_BARRIER,
- NULL, 0, MPI_BYTE, src, COLL_TAG_BARRIER,
- comm, MPI_STATUS_IGNORE);
+ Request::sendrecv(nullptr, 0, MPI_BYTE, src, COLL_TAG_BARRIER, nullptr, 0, MPI_BYTE, src, COLL_TAG_BARRIER,
+ comm, MPI_STATUS_IGNORE);
}
return mpi_errno;
}
+
+}
+}