MPI_Reduce would do this. I would use MPI_Comm_split to make an axis comm then use reduce with the root being the last rank in the axis comm.
> On May 2, 2018, at 6:11 AM, John Hearns via users <users@lists.open-mpi.org> > wrote: > > Also my inner voice is shouting that there must be an easy way to express > this in Julia > https://discourse.julialang.org/t/apply-reduction-along-specific-axes/3301/16 > > OK, these are not the same stepwise cumulative operatiosn that you want, but > the idea is close. > > > ps. Note to self - stop listening to the voices. > > >> On 2 May 2018 at 14:08, John Hearns <hear...@googlemail.com> wrote: >> Peter, how large are your models, ie how many cells in each direction? >> Something inside of me is shouting that if the models are small enough then >> MPI is not the way here. >> Assuming use of a Xeon processor there should be some AVX instructions which >> can do this. >> >> This is rather out of date, but is it helpful? >> ttps://www.quora.com/Is-there-an-SIMD-architecture-that-supports-horizontal-cumulative-sum-Prefix-sum-as-a-single-instruction >> >> https://software.intel.com/sites/landingpage/IntrinsicsGuide/ >> >> >>> On 2 May 2018 at 13:56, Peter Kjellström <c...@nsc.liu.se> wrote: >>> On Wed, 2 May 2018 11:15:09 +0200 >>> Pierre Gubernatis <pierre.guberna...@gmail.com> wrote: >>> >>> > Hello all... >>> > >>> > I am using a *cartesian grid* of processors which represents a spatial >>> > domain (a cubic geometrical domain split into several smaller >>> > cubes...), and I have communicators to address the procs, as for >>> > example a comm along each of the 3 axes I,J,K, or along a plane >>> > IK,JK,IJ, etc..). >>> > >>> > *I need to cumulate a scalar value (SCAL) through the procs which >>> > belong to a given axis* (let's say the K axis, defined by I=J=0). >>> > >>> > Precisely, the origin proc 0-0-0 has a given value for SCAL (say >>> > SCAL000). I need to update the 'following' proc (0-0-1) by doing SCAL >>> > = SCAL + SCAL000, and I need to *propagate* this updating along the K >>> > axis. At the end, the last proc of the axis should have the total sum >>> > of SCAL over the axis. (and of course, at a given rank k along the >>> > axis, the SCAL value = sum over 0,1, K of SCAL) >>> > >>> > Please, do you see a way to do this ? I have tried many things (with >>> > MPI_SENDRECV and by looping over the procs of the axis, but I get >>> > deadlocks that prove I don't handle this correctly...) >>> > Thank you in any case. >>> >>> Why did you try SENDRECV? As far as I understand your description above >>> data only flows one direction (along K)? >>> >>> There is no MPI collective to support the kind of reduction you >>> describe but it should not be hard to do using normal SEND and RECV. >>> Something like (simplified psuedo code): >>> >>> if (not_first_along_K) >>> MPI_RECV(SCAL_tmp, previous) >>> SCAL += SCAL_tmp >>> >>> if (not_last_along_K) >>> MPI_SEND(SCAL, next) >>> >>> /Peter K >>> _______________________________________________ >>> users mailing list >>> users@lists.open-mpi.org >>> https://lists.open-mpi.org/mailman/listinfo/users >> > > _______________________________________________ > users mailing list > users@lists.open-mpi.org > https://lists.open-mpi.org/mailman/listinfo/users
_______________________________________________ users mailing list users@lists.open-mpi.org https://lists.open-mpi.org/mailman/listinfo/users