simsopt.util package¶
Submodules¶
simsopt.util.logging module¶
-
simsopt.util.logging.initialize_logging(filename=None, level=None, mpi=False)¶
simsopt.util.mpi module¶
This module contains the MpiPartition class.
This module should be completely self-contained, depending only on mpi4py and numpy, not on any other simsopt components.
-
class
simsopt.util.mpi.MpiPartition(ngroups: Union[None, int] = None, comm_world: Optional[mpi4py.MPI.Intracomm] = mpi4py.MPI.COMM_WORLD)¶ Bases:
objectThis module contains functions related to dividing up the set of MPI processes into groups, each of which can work together. For more information, see MPI Partitions and worker groups.
- Parameters
ngroups – The number of worker groups desired. If
None, a worker group will be created for each MPI process. If a value is supplied that is larger than the number of processes, the number will be lowered to the number of processes.comm_world – The MPI communicator containing all processes to split into worker groups.
-
ngroups¶ The number of worker groups.
- Type
int
-
group¶ Index giving the worker group that this MPI process belongs to.
- Type
int
-
comm_world¶ The MPI communicator that includes all processes together.
- Type
mpi4py.MPI.Intracomm
-
comm_groups¶ The MPI communicator representing the worker groups.
- Type
mpi4py.MPI.Intracomm
-
comm_leaders¶ The MPI communicator that includes only leaders of worker groups.
- Type
mpi4py.MPI.Intracomm
-
rank_world¶ The MPI rank in the
comm_worldcommunicator.- Type
int
-
rank_groups¶ The MPI rank in the
comm_groupscommunicator.- Type
int
-
rank_leaders¶ The MPI rank in the
comm_leaderscommunicator, or -1 for processes that are not group leaders.- Type
int
-
nprocs_world¶ The number of MPI processes in the
comm_worldcommunicator.- Type
int
-
nprocs_groups¶ The number of MPI processes in this process’s worker group.
- Type
int
-
nprocs_leaders¶ The number of group leaders, if this process is a group leader, otherwise -1.
- Type
int
-
proc0_world¶ Whether this MPI process has rank 0 in
comm_world.- Type
bool
-
proc0_groups¶ Whether this MPI process has rank 0 in
comm_groups, i.e. whether this process is a group leader.- Type
bool
.
-
apart(leaders_action, workers_action)¶ Send workers and group leaders off to their respective loops to wait for instructions from their group leader or proc0_world, respectively.
-
leaders_loop(action)¶ actions should be a dict where the keys are possible integer constants, and the values are callable functions that are called when the corresponding key is sent from mobilize_leaders.
-
mobilize_leaders(action_const)¶ This function is called by
proc0_worldto tell the other group leaders that it is time to begin some action, e.g. starting to calculat a finite difference Jacobian.
-
mobilize_workers(action_const)¶
-
stop_leaders()¶
-
stop_workers()¶
-
together()¶ Bring workers and group leaders back from their respective loops.
-
worker_loop(action)¶ actions should be a dict where the keys are possible integer constants, and the values are callable functions that are called when the corresponding key is sent from mobilize_workers.
-
write()¶ Print info about the MPI configuration
-
simsopt.util.mpi.log(level: int = 20)¶ Turn on logging. If MPI is available, the processor number will be added to all logging entries.
- Parameters
level – Typically
logging.INFOfor regular output, orlogging.DEBUGfor more extensive output.