This problem is not related to Open MPI. Is related to the way you
use MPI. In fact there are 2 problems:
1. Buffered sends will copy the data into the attached buffer. In
your case, I think this only add one more memcpy operation to the
critical path, which might partially explain the impressive slow-down
(but I don't think this is the main reason). Buffering an MPI_PACKED
data seems like a non optimal solution. You want to keep the critical
path as short as possible and avoid any extra/useless memcopy. Using
a double buffering technique (which will effectively double the
amount of memory required for your communications) can give you some
2. Once the data is buffered, the Bsend (and the Ibsend) return to
the user application without progressing the communication. With few
exceptions (based on the available networks, which is not the case
for TCP nor shared memory) the point-to-point communication will only
be progressed on the next MPI call. If you look in the MPI standard
to see what exactly means to return from a blocking send, you will
realize that the only requirement is that the user can touch the send
buffer. From this perspective, the major difference between a
MPI_Send and an MPI_Bsend operation is that the MPI_Send will return
once the data is delivered to the NIC (which then can then complete
the communication asynchronously), while at the end of the MPI_Bsend
the data is still in the application memory. The only way to get any
benefit from the MPI_Bsend is to have a progress thread which take
care of the pending communications in the background. Such thread is
not enabled by default in Open MPI.
On Mar 22, 2007, at 5:18 PM, Michael wrote:
> Is there known issue with buffered sends in OpenMPI 1.1.4?
> I changed a single send which is called thousands of times from
> MPI_SEND (& MPI_ISEND) to MPI_BSEND (& MPI_IBSEND) and my Fortran 90
> code slowed down by a factor of 10.
> I've looked at several references and I can't see where I'm making a
> mistake. The MPI_SEND is for MPI_PACKED data, so it's first
> parameter is an allocated character array. I also allocated a
> character array for the buffer passed to MPI_BUFFER_ATTACH.
> Looking at the model implementation in a reference they give a model
> of using MPI_PACKED inside MPI_BSEND, I was wondering if this could
> be a problem, i.e. packing packed data?
> ps. I have to use OpenMPI 1.1.4 to maintain compatibility with a
> major HPC center.
> users mailing list