Gromacs
2024.4
|
#include "gmxpre.h"
#include "multisim.h"
#include "config.h"
#include "gromacs/gmxlib/network.h"
#include "gromacs/mdtypes/commrec.h"
#include "gromacs/utility/exceptions.h"
#include "gromacs/utility/fatalerror.h"
#include "gromacs/utility/futil.h"
#include "gromacs/utility/gmxassert.h"
#include "gromacs/utility/logger.h"
#include "gromacs/utility/smalloc.h"
Implements the multi-simulation support routines.
Functions | |
std::unique_ptr< gmx_multisim_t > | buildMultiSimulation (MPI_Comm worldComm, gmx::ArrayRef< const std::string > multidirs) |
Builder function for gmx_multisim_t. More... | |
void | gmx_sumd_sim (int gmx_unused nr, double gmx_unused r[], const gmx_multisim_t gmx_unused *ms) |
void | gmx_sumf_sim (int gmx_unused nr, float gmx_unused r[], const gmx_multisim_t gmx_unused *ms) |
void | gmx_sumi_sim (int gmx_unused nr, int gmx_unused r[], const gmx_multisim_t gmx_unused *ms) |
void | gmx_sumli_sim (int gmx_unused nr, int64_t gmx_unused r[], const gmx_multisim_t gmx_unused *ms) |
std::vector< int > | gatherIntFromMultiSimulation (const gmx_multisim_t *ms, const int localValue) |
Return a vector containing the gathered values of localValue found on the main rank of each simulation. | |
void | check_multi_int (FILE *log, const gmx_multisim_t *ms, int val, const char *name, gmx_bool bQuiet) |
Check if val is the same on all simulations for a mdrun -multidir run. More... | |
void | check_multi_int64 (FILE *log, const gmx_multisim_t *ms, int64_t val, const char *name, gmx_bool bQuiet) |
Check if val is the same on all simulations for a mdrun -multidir run. More... | |
bool | findIsSimulationMainRank (const gmx_multisim_t *ms, MPI_Comm communicator) |
Return whether this rank is the main rank of a simulation, using ms (if it is valid) and otherwise communicator . | |
bool | isMainSim (const gmx_multisim_t *ms) |
Are we the main simulation of a possible multi-simulation? | |
bool | isMainSimMainRank (const gmx_multisim_t *ms, const bool isMain) |
Are we the main rank (of the main simulation, for a multi-sim). More... | |
static bool | multisim_int_all_are_equal (const gmx_multisim_t *ms, int64_t value) |
void | logInitialMultisimStatus (const gmx_multisim_t *ms, const t_commrec *cr, const gmx::MDLogger &mdlog, const bool simulationsShareState, const int numSteps, const int initialStep) |
Log the initial state of the multi-sim. More... | |
std::unique_ptr<gmx_multisim_t> buildMultiSimulation | ( | MPI_Comm | worldComm, |
gmx::ArrayRef< const std::string > | multidirs | ||
) |
Builder function for gmx_multisim_t.
[in] | worldComm | MPI communicator to split when multi-simulation is requested. |
[in] | multidirs | Strings naming the subdirectories when multi-simulation is requested, otherwise empty |
Splits worldComm
into multidirs.size()
separate simulations, if >1, and creates a communication structure between the main ranks of these simulations.
Valid to call regardless of build configuration, but multidirs
must be empty unless a real MPI build is used.
NotImplementedError | when multidirs is non-empty unless using real MPI is true |
NotImplementedError | when multidirs has exactly one element |
InconsistentInputError | when the number of MPI ranks is not a multiple of the number of multidirs |
FileIOError | when the simulation cannot change to the working directory in multidirs |
void check_multi_int | ( | FILE * | log, |
const gmx_multisim_t * | ms, | ||
int | val, | ||
const char * | name, | ||
gmx_bool | bQuiet | ||
) |
Check if val is the same on all simulations for a mdrun -multidir run.
The string name is used to print to the log file and in a fatal error if the val's don't match. If bQuiet is true and the check passes, no output is written.
void check_multi_int64 | ( | FILE * | log, |
const gmx_multisim_t * | ms, | ||
int64_t | val, | ||
const char * | name, | ||
gmx_bool | bQuiet | ||
) |
Check if val is the same on all simulations for a mdrun -multidir run.
The string name is used to print to the log file and in a fatal error if the val's don't match. If bQuiet is true and the check passes, no output is written.
bool isMainSimMainRank | ( | const gmx_multisim_t * | ms, |
bool | isMain | ||
) |
Are we the main rank (of the main simulation, for a multi-sim).
This rank prints the remaining run time etc.
void logInitialMultisimStatus | ( | const gmx_multisim_t * | ms, |
const t_commrec * | cr, | ||
const gmx::MDLogger & | mdlog, | ||
bool | simulationsShareState, | ||
int | numSteps, | ||
int | initialStep | ||
) |
Log the initial state of the multi-sim.
The simulations may be at different steps, etc so we report that.
[in] | ms | The multi-sum object |
[in] | cr | The commrec object |
[in] | mdlog | Logger |
[in] | simulationsShareState | Whether the simulations share state |
[in] | numSteps | The number of steps in this simulation |
[in] | initialStep | The initial step for this simulation |