Source code for elephant.parallel.mpi

import mpi4py.futures
from mpi4py import MPI

from .parallel import ProcessPoolExecutor


[docs] class MPIPoolExecutor(ProcessPoolExecutor): """ The `MPIPoolExecutor` class uses a pool of MPI processes to execute calls asynchronously. `MPIPoolExecutor` is recommended to use on cluster nodes which support MPI-2 protocol. Notes ----- `-m mpi4py.futures` command line option is needed to execute Python scripts with MPI: .. code-block:: sh mpiexec -n numprocs python -m mpi4py.futures pyfile [arg] ... For more information of how to launch MPI processes in Python refer to https://mpi4py.readthedocs.io/en/stable/mpi4py.futures.html#command-line """ def _create_executor(self): return mpi4py.futures.MPIPoolExecutor(self.max_workers) def _extra_repr(self): extra_old = super(MPIPoolExecutor, self)._extra_repr() info = dict(MPI.INFO_ENV) return "{old}, {mpi}".format(old=extra_old, mpi=info)
[docs] class MPICommExecutor(MPIPoolExecutor): """ Legacy MPI-1 implementation for cluster nodes which do not support MPI-2 protocol. Parameters ---------- comm : MPI.Intracomm or None MPI (intra)communicator. If None, set to `MPI.COMM_WORLD`. Default: None root : int Designated master process. Default: 0 Notes ----- `-m mpi4py.futures` command line option is needed to execute Python scripts with MPI: .. code-block:: sh mpiexec -n numprocs python -m mpi4py.futures pyfile [arg] ... For more information of how to launch MPI processes in Python refer to https://mpi4py.readthedocs.io/en/stable/mpi4py.futures.html#command-line """
[docs] def __init__(self, comm=None, root=0): super(MPICommExecutor, self).__init__(max_workers=None) if comm is None: comm = MPI.COMM_WORLD self.comm = comm self.root = root
def _create_executor(self): return mpi4py.futures.MPICommExecutor(comm=self.comm, root=self.root)