This script lives in /reg/g/psdm/tutorials/examplePython/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 from psana import * import numpy as np ds = DataSource('exp=xpptut15:run=54:smd') det = Detector('cspad',ds.env()) from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() size = comm.Get_size() intensity = [] for nevent,evt in enumerate(ds.events()): img = det.image(evt) if nevent%size==rank: # different ranks look at different events 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()
Overview
Content Tools