VAIBHAW KUMAR
VAIBHAW KUMAR

Reputation: 1

MPI_ALLREDUCE PROBLEM

I have a code which has a 2D local array (cval).This local array is being calculated by every processor and in the end I call MPI_ALLREDUCE to sum this local array to a global array(gns). This local array has different sizes for different processors.The way I do a all reduce is as follows

k = n2spmax- n2spmin + 1 ! an arbitrary big value

do i = nmin, nmax
     call MPI_ALLREDUCE(cval(i,:),gns(i,:),k,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierr)
end do

Is this the correct way of writing it.I am not sure about it ?

Upvotes: 0

Views: 1743

Answers (1)

Jonathan Dursi
Jonathan Dursi

Reputation: 50927

No, you can't do it this way. MPI_Allreduce requires that all of the processes in the communicator are contributing the same amount of data. That's why there's a single count argument.

To give more guidance on what is the right way to do this, we'll need a bit more clarity on what you're trying to do. Is the idea that you're calculating gns(i,j) = the sum over all ranks of cval(i,j), but not all ranks have all the cval(i,j)s?

Upvotes: 1

Related Questions