On Thu, 2006-07-20 at 11:56 +1000, gh rory wrote:
> In the process of trying to create a wrapper for open mpi to another
> language. Specifically, I am trying to understand how the remote
> memory access/one-sided communication works in open mpi 1.1, and I am
> having some trouble.
> I have begun by trying to trace the steps in a simple MPI_Get call.
> It seems that ompi_osc_pt2pt_replyreq_recv in
> ompi/mca/osc/pt2pt/osc_pt2pt_data_move.c is the function that receives
> the data for the requesting process, however I have not been able to
> find the part of the code that receives the request at the other end.
> It looks like ompi_osc_pt2pt_component_fragment_cb in
> osc_pt2pt_component.c sends the data back to the requesting process,
> but I can't see where the data is actually copied.
> Can someone please point me in the right direction? Is there any
> documentation on the one-sided communication implementation that I
> should be reading?
The one-sided component is layered on top of our BTL transport layer,
which uses an active message callback on message arrival. The
ompi_osc_pt2pt_component_fragment_cb() call is called whenever a new
message has arrived. The function then dispatches based on message
type. If you look at the case for OMPI_OSC_PT2PT_HDR_PUT, you see a
call to ompi_osc_pt2pt_sendreq_recv_put(), which either uses the
convertor (our datatype engine) to unpack the data in the
ompi_convertor_unpack() call or posts a long message to receive the
Hope this helps,