After reading the previous discussion on AllReduce and AlltoAll, I
thought I would ask my question. I have a case where I have data
unevenly distributed among the processes (unevenly means that the
processes have differing amounts of data) that I need to globally
redistribute, resulting in a different uneven distribution. Writing the
code to do the redistribution using AlltoAll is straightforward.
The problem though is that there are often special cases where each
process only needs to exchange data with it neighbors. So the question
is that when two processors don't have data to exchange, is the OpenMPI
AlltoAll is written in such a way so that they don't do any
communication? Will the AlltoAll be as efficient (or at least nearly as
efficient) as direct send/recv among neighbors?