/*
* This file is part of the GROMACS molecular simulation package.
*
- * Copyright (c) 2008,2009,2010,2012,2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2008,2009,2010,2012,2013,2014,2015, by the GROMACS development team, led by
* Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
* and including many others, as listed in the AUTHORS file in the
* top-level source directory and at http://www.gromacs.org.
void dd_bcast(gmx_domdec_t gmx_unused *dd, int gmx_unused nbytes, void gmx_unused *data)
{
#ifdef GMX_MPI
-#ifdef GMX_BLUEGENE
- if (nbytes > 0)
+ if (dd->nnodes > 1)
{
+#ifdef GMX_BLUEGENE
+ if (nbytes > 0)
+ {
#endif
- MPI_Bcast(data, nbytes, MPI_BYTE,
- DDMASTERRANK(dd), dd->mpi_comm_all);
+ MPI_Bcast(data, nbytes, MPI_BYTE,
+ DDMASTERRANK(dd), dd->mpi_comm_all);
#ifdef GMX_BLUEGENE
-}
+ }
#endif
+ }
#endif
}
void dd_bcastc(gmx_domdec_t *dd, int nbytes, void *src, void *dest)
{
- if (DDMASTER(dd))
+ if (DDMASTER(dd) || dd->nnodes == 1)
{
memcpy(dest, src, nbytes);
}
#ifdef GMX_MPI
-#ifdef GMX_BLUEGENE
- if (nbytes > 0)
+ if (dd->nnodes > 1)
{
+#ifdef GMX_BLUEGENE
+ if (nbytes > 0)
+ {
#endif
- MPI_Bcast(dest, nbytes, MPI_BYTE,
- DDMASTERRANK(dd), dd->mpi_comm_all);
+ MPI_Bcast(dest, nbytes, MPI_BYTE,
+ DDMASTERRANK(dd), dd->mpi_comm_all);
#ifdef GMX_BLUEGENE
-}
+ }
#endif
+ }
#endif
}
-void dd_scatter(gmx_domdec_t gmx_unused *dd, int gmx_unused nbytes, void gmx_unused *src, void gmx_unused *dest)
+void dd_scatter(gmx_domdec_t gmx_unused *dd, int gmx_unused nbytes, void gmx_unused *src, void *dest)
{
#ifdef GMX_MPI
- MPI_Scatter(src, nbytes, MPI_BYTE,
- dest, nbytes, MPI_BYTE,
- DDMASTERRANK(dd), dd->mpi_comm_all);
+ if (dd->nnodes > 1)
+ {
+ MPI_Scatter(src, nbytes, MPI_BYTE,
+ dest, nbytes, MPI_BYTE,
+ DDMASTERRANK(dd), dd->mpi_comm_all);
+ }
+ else
#endif
+ {
+ /* 1 rank, either we copy everything, or dest=src: nothing to do */
+ if (dest != src)
+ {
+ memcpy(dest, src, nbytes);
+ }
+ }
}
void dd_gather(gmx_domdec_t gmx_unused *dd, int gmx_unused nbytes, void gmx_unused *src, void gmx_unused *dest)
}
void dd_scatterv(gmx_domdec_t gmx_unused *dd,
- int gmx_unused *scounts, int gmx_unused *disps, void gmx_unused *sbuf,
- int gmx_unused rcount, void gmx_unused *rbuf)
+ int gmx_unused *scounts, int gmx_unused *disps, void *sbuf,
+ int rcount, void *rbuf)
{
#ifdef GMX_MPI
int dum;
- if (rcount == 0)
+ if (dd->nnodes > 1)
{
- /* MPI does not allow NULL pointers */
- rbuf = &dum;
+ if (rcount == 0)
+ {
+ /* MPI does not allow NULL pointers */
+ rbuf = &dum;
+ }
+ MPI_Scatterv(sbuf, scounts, disps, MPI_BYTE,
+ rbuf, rcount, MPI_BYTE,
+ DDMASTERRANK(dd), dd->mpi_comm_all);
}
- MPI_Scatterv(sbuf, scounts, disps, MPI_BYTE,
- rbuf, rcount, MPI_BYTE,
- DDMASTERRANK(dd), dd->mpi_comm_all);
+ else
#endif
+ {
+ /* 1 rank, either we copy everything, or rbuf=sbuf: nothing to do */
+ if (rbuf != sbuf)
+ {
+ memcpy(rbuf, sbuf, rcount);
+ }
+ }
}
void dd_gatherv(gmx_domdec_t gmx_unused *dd,