Jack Bryan wrote:
How big was the buffer that the program specified in the receive call?
How big was the message that was sent?
The master node can receive message ( the same size) from 50
But, it cannot receive message from 51 nodes. It caused
MPI_ERR_TRUNCATE means that you posted a receive with an application
buffer that turned out to be too small to hold the message that was
received. It's a user application error that has nothing to do with
MPI's internal buffers. MPI's internal buffers don't need to be big
enough to hold that message. MPI could require the sender and receiver
to coordinate so that only part of the message is moved at a time.
It's at least the message header (communicator, tag, etc.) so that the
receiver can figure out if this is the expected message or not. In
practice, there is probably also some data in there as well. The
amount of that portion depends on the MPI implementation and, in
practice, the interconnect the message traveled over,
MPI-implementation-dependent environment variables set by the user,
etc. E.g., with OMPI over shared memory by default it's about 4Kbytes
(if I remember correctly).
I used the same buffer to get the message in 50 node case.
About ""rendezvous" protocol", what is the meaning of "the
sender sends a short portion "?
What is the "short portion", is it a small mart of the message
of the sender ?
Right. MPI actually allows you to force such synchronization with
MPI_Ssend, but typically MPI implementations use it automatically for
"plain" long sends as well even if the user didn't not use MPI_Ssend.
This "rendezvous" protocol" can work automatically in background
indicates in his program ?
The "acknowledgement " can be generated by the receiver only
corresponding mpi_irecv is posted by the receiver ?