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>