Thanks Joseph! I think that's a nifty trick! :-)

On Thu, Feb 17, 2022 at 4:57 PM Joseph Schuchart via users <
users@lists.open-mpi.org> wrote:

> Hi Niranda,
>
> A pattern I have seen in several places is to allreduce the pair p =
> {-x,x} with MPI_MIN or MPI_MAX. If in the resulting pair p[0] == -p[1],
> then everyone has the same value. If not, at least one rank had a
> different value. Example:
>
> ```
> bool is_same(int x) {
>    int p[2];
>    p[0] = -x;
>    p[1] = x;
>    MPI_Allreduce(MPI_IN_PLACE, p, 2, MPI_INT, MPI_MIN, MPI_COMM_WORLD);
>    return (p[0] == -p[1]);
> }
> ```
>
> HTH,
> Joseph
>
> On 2/17/22 16:40, Niranda Perera via users wrote:
> > Hi all,
> >
> > Say I have some int `x`. I want to check if all MPI ranks get the same
> > value for `x`. What's a good way to achieve this using MPI collectives?
> >
> > The simplest I could think of is, broadcast rank0's `x`, do the
> > comparison, and allreduce-LAND the comparison result. This requires
> > two collective operations.
> > ```python
> > ...
> > x = ... # each rank may produce different values for x
> > x_bcast = comm.bcast(x, root=0)
> > all_equal = comm.allreduce(x==x_bcast, op=MPI.LAND)
> > if not all_equal:
> >    raise Exception()
> > ...
> > ```
> > Is there a better way to do this?
> >
> >
> > --
> > Niranda Perera
> > https://niranda.dev/
> > @n1r44 <https://twitter.com/N1R44>
> >
>
>

-- 
Niranda Perera
https://niranda.dev/
@n1r44 <https://twitter.com/N1R44>

Reply via email to