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