I have had several people try the temp branch, and things are looking ok.
 Therefore, I am planning on moving this change into the trunk (hopefully)
 later this week.  Please let me know if there are outstanding problems that
 have not been reported back to the list.

Thanks,
Rich

------ Forwarded Message
From: Richard Graham <rlgra...@ornl.gov>
List-Post: devel@lists.open-mpi.org
Date: Wed, 12 Sep 2007 19:53:19 -0400
Conversation: [RFC] Proposed changes to ompi_free_list
Subject: [devel-core] [RFC] Proposed changes to ompi_free_list

Proposed changes to the ompi_free_list:

Please comment by: 9/19/2007

The current implemenation of ompi_free_list can have two memory regions
associated with it, a header (called frag) allocated by malloc, and optional
payload (called payload_buffer) allocated from an mpool associated with this
list.  The interface to ompi_free_list was set when both the free list and
the
associated payload were obtained by a single allocation, and therefore
there exists a single parameter that specifies memory allocation.  As a
result, it is not possible to specify different alignments for the frag and
the payload_buffer.  In addition, under some circumstances the payload
buffer returned is smaller than requested, and this information is not
conveyed to the calling routine.  This proposal is to change the interface
functions to fully support separate frag and payload memory regions.

The proposal is to change  ompi_free_list_init to:

int ompi_free_list_init( ompi_free_list_t *free_list,
                        size_t frag_size,
                        size_t frag_alignment,
                        opal_class_t* frag_class,
                        size_t payload_buffer_size,
                        size_t payload_buffer_alignment,
                        int num_elements_to_alloc,
                        int max_elements_to_alloc,
                        int num_elements_per_alloc,
                        struct mca_mpool_base_module_t*,
                        ompi_free_list_item_init_fn_t item_init,
                        void *ctx);

from:
int ompi_free_list_init(
            ompi_free_list_t *free_list,
            size_t element_size,
            opal_class_t* element_class,
            int num_elements_to_alloc,
            int max_elements_to_alloc,
            int num_elements_per_alloc,
            struct mca_mpool_base_module_t* mpool)

and ompi_free_list_init_ex to:
int ompi_free_list_init_ex(
            ompi_free_list_t *free_list,
            size_t frag_size,
            size_t frag_alignment,
            opal_class_t* frag_class,
            size_t payload_buffer_size,
            size_t payload_buffer_alignment,
            int num_elements_to_alloc,
            int max_elements_to_alloc,
            int num_elements_per_alloc,
            struct mca_mpool_base_module_t*,
            ompi_free_list_item_init_fn_t item_init,
            void *ctx
        );


from:
int ompi_free_list_init_ex(
            ompi_free_list_t *free_list,
            size_t element_size,
            size_t alignment,
            opal_class_t* element_class,
            int num_elements_to_alloc,
            int max_elements_to_alloc,
            int num_elements_per_alloc,
            struct mca_mpool_base_module_t*,
            ompi_free_list_item_init_fn_t item_init,
            void *ctx
        );

Current default alignment to ompi_free_list_init is CACHE_LINE_SIZE,
which will be kept as the default alignment to current calls to
ompi_free_list_init().

Currently, both frag and payload_buffer are controlled by a single parameter
in ompi_free_list_init_ex().  This will be kept for current calls to
mpi_free_list_init_ex(), setting both frag_alignment and
payload_buffer_alignment to the same value.

In addition, ompi_free_list_t will change to:
struct ompi_free_list_t
{  
        opal_atomic_lifo_t super;
        size_t fl_max_to_alloc;
        size_t fl_num_allocated;
        size_t fl_num_per_alloc;
        size_t fl_num_waiting;
        size_t fl_frag_size;
        size_t fl_frag_alignment;
        size_t fl_payload_buffer_size;
        size_t fl_payload_buffer_alignment;
        opal_class_t* fl_elem_class;
        struct mca_mpool_base_module_t* fl_mpool;
        opal_mutex_t fl_lock;
        opal_condition_t fl_condition;
        opal_list_t fl_allocations;
        ompi_free_list_item_init_fn_t item_init;
        void* ctx;
};

from:
struct ompi_free_list_t
{  
        opal_atomic_lifo_t super;
        size_t fl_max_to_alloc;
        size_t fl_num_allocated;
        size_t fl_num_per_alloc;
        size_t fl_num_waiting;
        size_t fl_elem_size;
        size_t fl_alignment;
        opal_class_t* fl_elem_class;
        struct mca_mpool_base_module_t* fl_mpool;
        opal_mutex_t fl_lock;
        opal_condition_t fl_condition;
        opal_list_t fl_allocations;
        ompi_free_list_item_init_fn_t item_init;
        void* ctx;
};

Thanks,
Rich

_______________________________________________
devel-core mailing list
devel-c...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel-core


------ End of Forwarded Message

Reply via email to