On 11/8/11 5:25 PM, "George Bosilca" <bosilca_at_[hidden]> wrote:
>2. one sided: A quick look in the OSC seems to indicate there are some
>special handling to be done in the RDMA one. Look at
>ompi_osc_rdma_sendreq_t in osc_rdma_sendreq.h, it is using a trick to
>store the remote segments. First, the mca_btl_base_segment_t are stored
>at the end of the structure, in order to allow for dynamic allocation.
>Second, OSC doesn't seems to manipulate pointers to
>mca_btl_base_segment_t, but the content itself. I didn't went too deep
>here, but I think particular attention should be payed to OSC.
I don't entirely remember what I was doing when I wrote that code :). The
OSC only does puts/gets from the initiator to a single segment on the
target, so the component contains an array of segments, one per peer. I
only do RDMA when the source is contiguous, so the one in the sendreq is
the segment, not a malloc trick.
I'm planning on rewriting the RDMA one-sided component to implement the
MPI 3 semantics. I think we can make it a whole lot cleaner than the
current implementation. Which means that if we come up with some rational
semantics for dealing with segments, I can make it work. If we can get
them implemented before January, even better.
Brian W. Barrett
Dept. 1423: Scalable System Software
Sandia National Laboratories