Regarding MPI_Isend, the MPI standard says "A nonblocking send call indicates that the system may start copying data out of the send buffer. The sender should not access any part of the send buffer after a nonblocking send operation is called, until the send completes." (http://www.mpi-forum.org/docs/mpi-11-html/node46.html)
Is referencing the send buffer in another send call ok, or is that included in "access any part of the send buffer"?
In other words, is the following C code for the sender correct?
MPI_Request req[2];
MPI_Status statuses[2];
...
MPI_Isend(buf, type, count, dest0, tag, comm, &req[0]);
MPI_Isend(buf, type, count, dest1, tag, comm, &req[1]);
MPI_Waitall(2, req, statuses);
The MPI Standard does allow for this kind of usage.
If there are more that a "handful" of ranks that need the same buffer, or if this communication patter will be repeated more than a "handful" of times...then creating a comm with the relevant ranks, and using MPI_Bcast would be preferable.
EDIT:
To clarify my own answer. The MPI 2.0 Standard specifically prohibited this kind of usage. The restriction was to accommodate Fortran. The MPI 2.1 or 2.2 Standard included a "clarification" that this re-use of a send buffer in multiple ISends was permissible. See Section 16.2.2 of the MPI 2.2 Standard for more.