Source code for spux.executors.mpi4py.connectors.utils
# # # # # # # # # # # # # # # # # # # # # # # # # #
# Convenience functions for connectors
#
# Jonas Ĺ ukys
# Eawag, Switzerland
# jonas.sukys@eawag.ch
# All rights reserved.
# # # # # # # # # # # # # # # # # # # # # # # # # #
from mpi4py import MPI
import argparse
[docs]def universe_address ():
"""Return rank in MPI COMM_WORLD"""
address = MPI.COMM_WORLD.Get_rank ()
return address
[docs]def select (name = 'auto', verbosity = 0):
"""Automatically select the connector, or specify it manually by its name."""
if name == 'auto':
parser = argparse.ArgumentParser ()
help = "connector to be used"
choices = ['spawn', 'split', 'legacy']
parser.add_argument ("--connector", type = str, help = help, choices = choices)
args, unknown = parser.parse_known_args ()
name = args.connector
if name is None:
if MPI.COMM_WORLD.Get_size () == 1:
name = 'spawn'
else:
name = 'split'
if universe_address () == 0:
print (' :: CONNECTOR: %s' % name)
if name == 'spawn':
from spux.executors.mpi4py.connectors.spawn import Spawn
connector = Spawn (verbosity)
elif name == 'split':
from spux.executors.mpi4py.connectors.split import Split
connector = Split (verbosity)
elif name == 'legacy':
from spux.executors.mpi4py.connectors.legacy import Legacy
connector = Legacy (verbosity)
else:
if universe_address () == 0:
print (' :: WARNING: Connector "%s" not found, falling back to Spawn () connector.' % name)
from spux.executors.mpi4py.connectors.spawn import Spawn
connector = Spawn (verbosity)
connector.barrier ()
return connector