pymor.tools.mpi

This module provides helper methods to use pyMOR in parallel with MPI.

Executing this module will run event_loop on all MPI ranks except for rank 0 where either a given script is executed:

mpirun -n 16 python -m pymor.tools.mpi /path/to/script

or an interactive session is started:

mpirun -n 16 python -m pymor.tools.mpi

When IPython is available, an IPython kernel is started which the user can connect to by calling:

ipython console --existing file_name_printed_by_ipython.json

(Starting the IPython console directly will not work properly with most MPI implementations.) When IPython is not available, the builtin Python REPL is started.

When event_loop is running on the MPI ranks, call can be used on rank 0 to execute the same Python function (given as first argument) simultaneously on all MPI ranks (including rank 0). Calling quit will exit event_loop on all MPI ranks.

Additionally, this module provides several helper methods which are intended to be used in conjunction with call: mpi_info will print a summary of all active MPI ranks, run_code will execute the given code string on all MPI ranks, import_module imports the module with the given path.

A simple object management is implemented with the manage_object, get_object and remove_object methods. It is the user’s responsibility to ensure that calls to manage_object are executed in the same order on all MPI ranks to ensure that the returned ObjectId refers to the same distributed object on all ranks. The functions function_call, function_call_manage, method_call, method_call_manage map instances ObjectId transparently to distributed objects. function_call_manage and method_call_manage will call manage_object on the return value and return the corresponding ObjectId. The functions method_call and method_call_manage are given an ObjectId and a string as first and second argument and execute the method named by the second argument on the object referred to by the first argument.

Module Contents

Classes

ObjectId

A handle to an MPI distributed object.

Functions

event_loop_settings

Settings for pyMOR's MPI event loop.

launch_event_loop

event_loop

Launches an MPI-based event loop.

call

Execute method on all MPI ranks.

quit

Exit the event loop on all MPI ranks.

mpi_info

Print some information on the MPI setup.

run_code

Execute the code string code.

import_module

Import the module named by path.

function_call

Execute the function f with given arguments.

function_call_manage

Execute the function f and manage the return value.

method_call

Execute a method with given arguments.

method_call_manage

Execute a method with given arguments and manage the return value.

manage_object

Keep track of obj and return an ObjectId handle.

get_object

Return the object referred to by obj_id.

remove_object

Remove the object referred to by obj_id from the registry.

Attributes

comm

rank0

parallel

_managed_objects

_object_counter

_event_loop_running

filename

pymor.tools.mpi.comm[source]
pymor.tools.mpi.rank0[source]
pymor.tools.mpi.parallel[source]
pymor.tools.mpi._managed_objects[source]
pymor.tools.mpi._object_counter = 0[source]
pymor.tools.mpi._event_loop_running = False[source]
pymor.tools.mpi.event_loop_settings(auto_launch=True)[source]

Settings for pyMOR’s MPI event loop.

Parameters

auto_launch

If True, automatically execute event_loop on all MPI ranks (except 0) when pyMOR is imported.

pymor.tools.mpi.launch_event_loop()[source]
pymor.tools.mpi.event_loop()[source]

Launches an MPI-based event loop.

Events can be sent by either calling call on rank 0 to execute an arbitrary method on all ranks or by calling quit to exit the loop.

pymor.tools.mpi.call(method, *args, **kwargs)[source]

Execute method on all MPI ranks.

Assuming event_loop is running on all MPI ranks (except rank 0), this will execute method on all ranks (including rank 0) with positional arguments args and keyword arguments kwargs.

Parameters

method

The function to execute on all ranks (must be picklable).

args

The positional arguments for method.

kwargs

The keyword arguments for method.

Returns

The return value of method on rank 0.

pymor.tools.mpi.quit()[source]

Exit the event loop on all MPI ranks.

This will cause event_loop to terminate on all MPI ranks.

pymor.tools.mpi.mpi_info()[source]

Print some information on the MPI setup.

Intended to be used in conjunction with call.

pymor.tools.mpi.run_code(code)[source]

Execute the code string code.

Intended to be used in conjunction with call.

pymor.tools.mpi.import_module(path)[source]

Import the module named by path.

Intended to be used in conjunction with call.

pymor.tools.mpi.function_call(f, *args, **kwargs)[source]

Execute the function f with given arguments.

Intended to be used in conjunction with call. Arguments of type ObjectId are transparently mapped to the object they refer to.

pymor.tools.mpi.function_call_manage(f, *args, **kwargs)[source]

Execute the function f and manage the return value.

Intended to be used in conjunction with call. The return value of f is managed by calling manage_object and the corresponding ObjectId is returned. Arguments of type ObjectId are transparently mapped to the object they refer to.

pymor.tools.mpi.method_call(obj_id, name_, *args, **kwargs)[source]

Execute a method with given arguments.

Intended to be used in conjunction with call. Arguments of type ObjectId are transparently mapped to the object they refer to.

Parameters

obj_id

The ObjectId of the object on which to call the method.

name_

Name of the method to call.

args

Positional arguments for the method.

kwargs

Keyword arguments for the method.

pymor.tools.mpi.method_call_manage(obj_id, name_, *args, **kwargs)[source]

Execute a method with given arguments and manage the return value.

Intended to be used in conjunction with call. The return value of the called method is managed by calling manage_object and the corresponding ObjectId is returned. Arguments of type ObjectId are transparently mapped to the object they refer to.

Parameters

obj_id

The ObjectId of the object on which to call the method.

name_

Name of the method to call.

args

Positional arguments for the method.

kwargs

Keyword arguments for the method.

class pymor.tools.mpi.ObjectId[source]

Bases: int

A handle to an MPI distributed object.

pymor.tools.mpi.manage_object(obj)[source]

Keep track of obj and return an ObjectId handle.

pymor.tools.mpi.get_object(obj_id)[source]

Return the object referred to by obj_id.

pymor.tools.mpi.remove_object(obj_id)[source]

Remove the object referred to by obj_id from the registry.

pymor.tools.mpi.filename[source]