+1 on Rolf's explanation.

Additionally, note that you don't have to do it this way.  You can implement 
yours in whatever style you want; this is just the style we used for the TCP 
BTL.


On Apr 4, 2012, at 10:18 AM, Rolf vandeVaart wrote:

> Here is my explanation.  The call to MCA_BTL_TCP_FRAG_ALLOC_EAGER or 
> MCA_BTL_TCP_FRAG_ALLOC_MAX allocate a chunk of memory that has space for both 
> the fragment as well as any payload.  So, when we do the frag+1, we are 
> setting the pointer in the frag to point where the payload of the message 
> lives.  This payload contains the PML header information and potentially the 
> user's buffer.   So, that allocation is actually returning something like 64K 
> for the eager allocation and 128K for the max allocation.  If you look at 
> btl_tcp_component.c in the function mca_btl_tcp_component_init() you can see 
> where the eager and max free lists are initialized.
> 
> In the case of TCP, there are two segments.  The first segment will contain 
> the PML header information.   If the buffer being sent (or received) is 
> contiguous, then the rest of the space allocated is not used.  Rather, the 
> second segment will point to the user's buffer as there is no need to first 
> copy it into a buffer.  If the buffer being sent (or received) is 
> non-contiguous, then the data is first copied into the allocated space as it 
> needs to be packed.
> 
> Does that make sense?
> 
> 
>> -----Original Message-----
>> From: devel-boun...@open-mpi.org [mailto:devel-boun...@open-mpi.org]
>> On Behalf Of Alex Margolin
>> Sent: Wednesday, April 04, 2012 9:23 AM
>> To: Open MPI Developers
>> Subject: [OMPI devel] mca_btl_tcp_alloc
>> 
>> Hi,
>> 
>> As I'm working out the bugs in my component I used TCP as reference and
>> came across the following:
>> In mca_btl_tcp_alloc (openmpi-trunk/ompi/mca/btl/tcp/btl_tcp.c:188) the
>> first segment is initialized to point to "frag + 1".
>> I don't get it... how/when is this location allocated? Isn't it just after 
>> the
>> mca_btl_tcp_frag_t structure ends?
>> 
>> Thanks,
>> Alex
>> 
>> mca_btl_base_descriptor_t* mca_btl_tcp_alloc(
>>    struct mca_btl_base_module_t* btl,
>>    struct mca_btl_base_endpoint_t* endpoint,
>>    uint8_t order,
>>    size_t size,
>>    uint32_t flags)
>> {
>>    mca_btl_tcp_frag_t* frag = NULL;
>>    int rc;
>> 
>>    if(size <= btl->btl_eager_limit) {
>>        MCA_BTL_TCP_FRAG_ALLOC_EAGER(frag, rc);
>>    } else if (size <= btl->btl_max_send_size) {
>>        MCA_BTL_TCP_FRAG_ALLOC_MAX(frag, rc);
>>    }
>>    if( OPAL_UNLIKELY(NULL == frag) ) {
>>        return NULL;
>>    }
>> 
>>    frag->segments[0].seg_len = size;
>>    frag->segments[0].seg_addr.pval = frag+1;
>> 
>>    frag->base.des_src = frag->segments;
>>    frag->base.des_src_cnt = 1;
>>    frag->base.des_dst = NULL;
>>    frag->base.des_dst_cnt = 0;
>>    frag->base.des_flags = flags;
>>    frag->base.order = MCA_BTL_NO_ORDER;
>>    frag->btl = (mca_btl_tcp_module_t*)btl;
>>    return (mca_btl_base_descriptor_t*)frag; }
>> _______________________________________________
>> devel mailing list
>> de...@open-mpi.org
>> http://www.open-mpi.org/mailman/listinfo.cgi/devel
> -----------------------------------------------------------------------------------
> This email message is for the sole use of the intended recipient(s) and may 
> contain
> confidential information.  Any unauthorized review, use, disclosure or 
> distribution
> is prohibited.  If you are not the intended recipient, please contact the 
> sender by
> reply email and destroy all copies of the original message.
> -----------------------------------------------------------------------------------
> 
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel


-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to: 
http://www.cisco.com/web/about/doing_business/legal/cri/


Reply via email to