Gromacs  2026.0-dev-20251119-5f0a571d
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Functions | Variables
gmx::test::anonymous_namespace{haloexchange_mpi.cpp} Namespace Reference

Classes

struct  HaloExchangeTestParameters
 Parameters over which halo exchange is tested. More...
 
class  HaloExchangeTestData
 Data used in test body for halo exchange. More...
 
class  HaloExchangeTest
 Test fixture for halo exchange. More...
 

Functions

float encodedValue (const int sendRank, const int atomNumber, const int spatial3dIndex)
 Get encoded numerical value for sending rank, atom number and spatial 3D index. More...
 
void initHaloData (const int rank, RVec *x, const int numHomeAtoms, const int numAtomsTotal)
 Initialize halo array. More...
 
MessageStringCollector gpuHalo (gmx_domdec_t *dd, matrix box, HostVector< RVec > *h_x, int numAtomsTotal)
 Perform GPU halo exchange, including required setup and data transfers. More...
 
void define1dRankTopology (const int rank, const int size, gmx_domdec_t *dd)
 Define 1D rank topology with 4 MPI tasks. More...
 
void define2dRankTopology (const int rank, const int, gmx_domdec_t *dd)
 Define 2D rank topology with 4 MPI tasks. More...
 
void define1dHaloWith1Pulse (const int rank, const int, gmx_domdec_t *dd, std::vector< gmx_domdec_ind_t > *indvec)
 Define a 1D halo with 1 pulses. More...
 
void define1dHaloWith2Pulses (const int rank, const int, gmx_domdec_t *dd, std::vector< gmx_domdec_ind_t > *indvec)
 Define a 1D halo with 2 pulses. More...
 
void define2dHaloWith1PulseInEachDim (const int rank, const int, gmx_domdec_t *dd, std::vector< gmx_domdec_ind_t > *indvec)
 Define a 2D halo with 1 pulse in each dimension. More...
 
void define2dHaloWith2PulsesInDim1 (const int rank, const int, gmx_domdec_t *dd, std::vector< gmx_domdec_ind_t > *indvec)
 Define a 2D halo with 2 pulses in the first dimension. More...
 
void checkResults1dHaloWith1Pulse (const RVec *x, const gmx_domdec_t *dd, const int numHomeAtoms)
 Check results for above-defined 1D halo with 1 pulse. More...
 
void checkResults1dHaloWith2Pulses (const RVec *x, const gmx_domdec_t *dd, const int numHomeAtoms)
 Check results for above-defined 1D halo with 2 pulses. More...
 
void checkResults2dHaloWith1PulseInEachDim (const RVec *x, const gmx_domdec_t *dd, const int numHomeAtoms)
 Check results for above-defined 2D halo with 1 pulse in each dimension. More...
 
void checkResults2dHaloWith2PulsesInDim1 (const RVec *x, const gmx_domdec_t *dd, const int numHomeAtoms)
 Check results for above-defined 2D halo with 2 pulses in the first dimension. More...
 

Variables

static const std::vector
< HaloExchangeTestParameters
c_testSetups
 

Function Documentation

void gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::checkResults1dHaloWith1Pulse ( const RVec *  x,
const gmx_domdec_t *  dd,
const int  numHomeAtoms 
)

Check results for above-defined 1D halo with 1 pulse.

Parameters
[in]xAtom coordinate data array
[in]ddDomain decomposition object
[in]numHomeAtomsNumber of home atoms
void gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::checkResults1dHaloWith2Pulses ( const RVec *  x,
const gmx_domdec_t *  dd,
const int  numHomeAtoms 
)

Check results for above-defined 1D halo with 2 pulses.

Parameters
[in]xAtom coordinate data array
[in]ddDomain decomposition object
[in]numHomeAtomsNumber of home atoms
void gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::checkResults2dHaloWith1PulseInEachDim ( const RVec *  x,
const gmx_domdec_t *  dd,
const int  numHomeAtoms 
)

Check results for above-defined 2D halo with 1 pulse in each dimension.

Parameters
[in]xAtom coordinate data array
[in]ddDomain decomposition object
[in]numHomeAtomsNumber of home atoms
void gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::checkResults2dHaloWith2PulsesInDim1 ( const RVec *  x,
const gmx_domdec_t *  dd,
const int  numHomeAtoms 
)

Check results for above-defined 2D halo with 2 pulses in the first dimension.

Parameters
[in]xAtom coordinate data array
[in]ddDomain decomposition object
[in]numHomeAtomsNumber of home atoms
void gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::define1dHaloWith1Pulse ( const int  rank,
const int  ,
gmx_domdec_t *  dd,
std::vector< gmx_domdec_ind_t > *  indvec 
)

Define a 1D halo with 1 pulses.

Parameters
[in]rankRank within MPI communicator
[out]ddDomain decomposition object
[out]indvecVector of index vectors
void gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::define1dHaloWith2Pulses ( const int  rank,
const int  ,
gmx_domdec_t *  dd,
std::vector< gmx_domdec_ind_t > *  indvec 
)

Define a 1D halo with 2 pulses.

Parameters
[in]rankRank within MPI communicator
[out]ddDomain decomposition object
[out]indvecVector of index vectors
void gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::define1dRankTopology ( const int  rank,
const int  size,
gmx_domdec_t *  dd 
)

Define 1D rank topology with 4 MPI tasks.

Parameters
[in]rankRank within MPI communicator
[in]sizeSize of MPI communicator
[out]ddDomain decomposition object
void gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::define2dHaloWith1PulseInEachDim ( const int  rank,
const int  ,
gmx_domdec_t *  dd,
std::vector< gmx_domdec_ind_t > *  indvec 
)

Define a 2D halo with 1 pulse in each dimension.

Parameters
[in]rankRank within MPI communicator
[out]ddDomain decomposition object
[out]indvecVector of index vectors
void gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::define2dHaloWith2PulsesInDim1 ( const int  rank,
const int  ,
gmx_domdec_t *  dd,
std::vector< gmx_domdec_ind_t > *  indvec 
)

Define a 2D halo with 2 pulses in the first dimension.

Parameters
[in]rankRank within MPI communicator
[out]ddDomain decomposition object
[out]indvecVector of index vectors
void gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::define2dRankTopology ( const int  rank,
const int  ,
gmx_domdec_t *  dd 
)

Define 2D rank topology with 4 MPI tasks.


| 2 3 |

| 0 1 |

Parameters
[in]rankRank within MPI communicator
[out]ddDomain decomposition object
float gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::encodedValue ( const int  sendRank,
const int  atomNumber,
const int  spatial3dIndex 
)

Get encoded numerical value for sending rank, atom number and spatial 3D index.

Parameters
[in]sendRankMPI rank of sender
[in]atomNumberAtom number
[in]spatial3dIndexSpatial 3D Index
Returns
Encoded value
MessageStringCollector gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::gpuHalo ( gmx_domdec_t *  dd,
matrix  box,
HostVector< RVec > *  h_x,
int  numAtomsTotal 
)

Perform GPU halo exchange, including required setup and data transfers.

Parameters
[in]ddDomain decomposition object
[in]boxBox matrix
[in]h_xAtom coordinate data array on host
[in]numAtomsTotalTotal number of atoms, including halo
Returns
A collection of messages explaining why the halo exchange needs to be skipped, which is empty when the halo exchange was run.
void gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::initHaloData ( const int  rank,
RVec *  x,
const int  numHomeAtoms,
const int  numAtomsTotal 
)

Initialize halo array.

Parameters
[in]rankRank within MPI communicator
[out]xAtom coordinate data array
[in]numHomeAtomsNumber of home atoms
[in]numAtomsTotalTotal number of atoms, including halo

Variable Documentation

const std::vector<HaloExchangeTestParameters> gmx::test::anonymous_namespace{haloexchange_mpi.cpp}::c_testSetups
static
Initial value:
= {
{ "1D halo with 1 pulse", 10, 2, { 0 }, define1dRankTopology, define1dHaloWith1Pulse, checkResults1dHaloWith1Pulse },
{ "1D halo with 2 pulses", 10, 5, { 0 }, define1dRankTopology, define1dHaloWith2Pulses, checkResults1dHaloWith2Pulses },
{ "2D halo with 1 pulse in each dimension",
10,
4,
{ 0, 1 },
{ "2D halo with 2 pulses in first dimension",
10,
7,
{ 0, 1 },
}
void define2dHaloWith1PulseInEachDim(const int rank, const int, gmx_domdec_t *dd, std::vector< gmx_domdec_ind_t > *indvec)
Define a 2D halo with 1 pulse in each dimension.
Definition: haloexchange_mpi.cpp:392
void checkResults1dHaloWith1Pulse(const RVec *x, const gmx_domdec_t *dd, const int numHomeAtoms)
Check results for above-defined 1D halo with 1 pulse.
Definition: haloexchange_mpi.cpp:490
void define1dRankTopology(const int rank, const int size, gmx_domdec_t *dd)
Define 1D rank topology with 4 MPI tasks.
Definition: haloexchange_mpi.cpp:251
void define2dRankTopology(const int rank, const int, gmx_domdec_t *dd)
Define 2D rank topology with 4 MPI tasks.
Definition: haloexchange_mpi.cpp:267
void checkResults1dHaloWith2Pulses(const RVec *x, const gmx_domdec_t *dd, const int numHomeAtoms)
Check results for above-defined 1D halo with 2 pulses.
Definition: haloexchange_mpi.cpp:507
void define2dHaloWith2PulsesInDim1(const int rank, const int, gmx_domdec_t *dd, std::vector< gmx_domdec_ind_t > *indvec)
Define a 2D halo with 2 pulses in the first dimension.
Definition: haloexchange_mpi.cpp:434
void checkResults2dHaloWith1PulseInEachDim(const RVec *x, const gmx_domdec_t *dd, const int numHomeAtoms)
Check results for above-defined 2D halo with 1 pulse in each dimension.
Definition: haloexchange_mpi.cpp:528
void define1dHaloWith1Pulse(const int rank, const int, gmx_domdec_t *dd, std::vector< gmx_domdec_ind_t > *indvec)
Define a 1D halo with 1 pulses.
Definition: haloexchange_mpi.cpp:304
void define1dHaloWith2Pulses(const int rank, const int, gmx_domdec_t *dd, std::vector< gmx_domdec_ind_t > *indvec)
Define a 1D halo with 2 pulses.
Definition: haloexchange_mpi.cpp:342
void checkResults2dHaloWith2PulsesInDim1(const RVec *x, const gmx_domdec_t *dd, const int numHomeAtoms)
Check results for above-defined 2D halo with 2 pulses in the first dimension.
Definition: haloexchange_mpi.cpp:548