|
Gromacs
2025.3
|
#include <cstdint>#include <cstdio>#include <memory>#include <string>#include <vector>#include "gromacs/utility/arrayref.h"#include "gromacs/utility/basedefinitions.h"#include "gromacs/utility/gmxmpi.h"
Include dependency graph for multisim.h:
This graph shows which files directly or indirectly include this file:Declares the multi-simulation support routines.
Classes | |
| struct | gmx_multisim_t |
| Coordinate multi-simulation resources for mdrun. More... | |
Macros | |
| #define | gmx_sum_sim gmx_sumf_sim |
| Convenience define for sum of reals. | |
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_sumi_sim (int nr, int r[], const gmx_multisim_t *ms) |
| Calculate the sum over the simulations of an array of ints. | |
| void | gmx_sumli_sim (int nr, int64_t r[], const gmx_multisim_t *ms) |
| Calculate the sum over the simulations of an array of large ints. | |
| void | gmx_sumf_sim (int nr, float r[], const gmx_multisim_t *ms) |
| Calculate the sum over the simulations of an array of floats. | |
| void | gmx_sumd_sim (int nr, double r[], const gmx_multisim_t *ms) |
| Calculate the sum over the simulations of an array of doubles. | |
| std::vector< int > | gatherIntFromMultiSimulation (const gmx_multisim_t *ms, 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... | |
| static bool | isMultiSim (const gmx_multisim_t *ms) |
| Are we doing multiple independent simulations? | |
| 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, bool isMain) |
| Are we the main rank (of the main simulation, for a multi-sim). More... | |
| 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. 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 |
1.8.5