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
data.


Hope this helps,

Brian

Reply via email to