File: ipyparallel_intro.py

package info (click to toggle)
adios4dolfinx 0.10.0.post0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 536 kB
  • sloc: python: 4,180; sh: 28; makefile: 7
file content (27 lines) | stat: -rw-r--r-- 1,033 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# # Introduction to IPython parallel
# The following demos heavily rely on {py:mod}`IPython-parallel<ipyparallel>` to illustrate how
# checkpointing works when using multiple {py:mod}`MPI<mpi4py>` processes.
# We illustrate what happens in parallel by launching three MPI processes
# using IPython-parallel's MPI engine support.

import logging

import ipyparallel as ipp


def hello_mpi():
    # We define all imports inside the function as they have to be launched on the remote engines
    from mpi4py import MPI

    print(f"Hello from rank {MPI.COMM_WORLD.rank}/{MPI.COMM_WORLD.size - 1}")


with ipp.Cluster(engines="mpi", n=3, log_level=logging.ERROR) as cluster:
    # We send the query to run the function `hello_mpi` on all engines
    query: ipp.AsyncResult = cluster[:].apply_async(hello_mpi)
    # We wait for all engines to finish
    query.wait()
    # We check that all engines exited successfully
    assert query.successful(), query.error
    # We print the output from each engine
    print("".join(query.stdout))