I'm trying to divide up an array between processors such that each one takes points from different parts in the array. For example, if
A = {1, 2, 3, 4, 5, 6, 7, 8}
and I'm using 2 processors, I want P1 to handle {1, 3, 5, 7}
, and P2 to handle {2, 4, 6, 8}
.
When scaling up to very large numbers of points (millions) and processors (128), this is tricky. In previous versions of my function, I simply gave P1 the first chunk of points, P2 the next chunk, and so on (which is easy with MPI_gatherv
).
Is there some way to use MPI_gatherv
to make this work, or a way to use MPI_send
and MPI_receive
to achieve it? The trouble with MPI_gatherv
is that while you can specify indices for processors to send to, it still puts all of P1 before P2 before P3 etc.