Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This script lives in /reg/g/psdmsdf/group/lcls/ds/ana/tutorials/examplePython3psana1_examples/mpiGather.py and demonstrates how to save small pieces of information on every event (in parallel) and then gather those pieces together onto one core.

...

Run this

...

with

...

"mpirun

...

-n

...

2

...

python

...

mpiGather.py":

Code Block

from psana import *
import numpy as np
ds = DataSource('exp=xpptut15:run=54:smd')
det = Detector('cspad')

from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()

intensity = []
for nevent,evt in enumerate(ds.events()):
    if nevent%size!=rank: continue # different ranks look at different events
    img = det.image(evt)
    intensity.append(img.sum())
    if nevent>=3: break

allIntensities = comm.gather(intensity) # get intensities from all ranks

if rank==0:
    allIntensities = np.concatenate((allIntensities[:])) # put in one long list
    print(allIntensities)

MPI.Finalize()

...