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>