change the code to allow for different fragment size on first, and then
on subsequent fragments. This commit was SVN r2632.
Этот коммит содержится в:
родитель
d2d6379578
Коммит
70231457ce
@ -31,7 +31,8 @@ mca_ptl_sm_t mca_ptl_sm = {
|
|||||||
&mca_ptl_sm_component.super,
|
&mca_ptl_sm_component.super,
|
||||||
5, /* number of elements in the send descriptor cache: RLG - this is
|
5, /* number of elements in the send descriptor cache: RLG - this is
|
||||||
garbage, need to fix. */
|
garbage, need to fix. */
|
||||||
sizeof(mca_ptl_sm_send_request_t), /* size of shared memory send
|
sizeof(mca_ptl_sm_send_request_t) -
|
||||||
|
sizeof(mca_pml_base_send_request_t), /* size of shared memory send
|
||||||
descriptor */
|
descriptor */
|
||||||
1, /* ptl_exclusivity */
|
1, /* ptl_exclusivity */
|
||||||
0, /* ptl_latency */
|
0, /* ptl_latency */
|
||||||
|
@ -46,7 +46,10 @@ struct mca_ptl_sm_component_t {
|
|||||||
mca_mpool_base_module_t* sm_mpool; /**< shared memory pool */
|
mca_mpool_base_module_t* sm_mpool; /**< shared memory pool */
|
||||||
void* sm_mpool_base; /**< base address of shared memory pool */
|
void* sm_mpool_base; /**< base address of shared memory pool */
|
||||||
ompi_free_list_t sm_send_requests; /**< free list of sm send requests -- sendreq + sendfrag */
|
ompi_free_list_t sm_send_requests; /**< free list of sm send requests -- sendreq + sendfrag */
|
||||||
ompi_free_list_t sm_frags; /**< free list of sm recv fragments */
|
ompi_free_list_t sm_first_frags; /**< free list of sm first
|
||||||
|
fragments */
|
||||||
|
ompi_free_list_t sm_second_frags; /**< free list of sm second
|
||||||
|
and above fragments */
|
||||||
size_t first_fragment_size; /**< first fragment size */
|
size_t first_fragment_size; /**< first fragment size */
|
||||||
size_t max_fragment_size; /**< maximum (second and
|
size_t max_fragment_size; /**< maximum (second and
|
||||||
beyone) fragment size */
|
beyone) fragment size */
|
||||||
|
@ -128,7 +128,7 @@ int mca_ptl_sm_component_open(void)
|
|||||||
/* initialize objects */
|
/* initialize objects */
|
||||||
OBJ_CONSTRUCT(&mca_ptl_sm_component.sm_lock, ompi_mutex_t);
|
OBJ_CONSTRUCT(&mca_ptl_sm_component.sm_lock, ompi_mutex_t);
|
||||||
OBJ_CONSTRUCT(&mca_ptl_sm_component.sm_send_requests, ompi_free_list_t);
|
OBJ_CONSTRUCT(&mca_ptl_sm_component.sm_send_requests, ompi_free_list_t);
|
||||||
OBJ_CONSTRUCT(&mca_ptl_sm_component.sm_frags, ompi_free_list_t);
|
OBJ_CONSTRUCT(&mca_ptl_sm_component.sm_first_frags, ompi_free_list_t);
|
||||||
|
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -142,7 +142,7 @@ int mca_ptl_sm_component_close(void)
|
|||||||
{
|
{
|
||||||
OBJ_DESTRUCT(&mca_ptl_sm_component.sm_lock);
|
OBJ_DESTRUCT(&mca_ptl_sm_component.sm_lock);
|
||||||
OBJ_DESTRUCT(&mca_ptl_sm_component.sm_send_requests);
|
OBJ_DESTRUCT(&mca_ptl_sm_component.sm_send_requests);
|
||||||
OBJ_DESTRUCT(&mca_ptl_sm_component.sm_frags);
|
OBJ_DESTRUCT(&mca_ptl_sm_component.sm_first_frags);
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ mca_ptl_base_module_t** mca_ptl_sm_component_init(
|
|||||||
length=sizeof(mca_ptl_sm_frag_t)+mca_ptl_sm_component.fragment_alignment+
|
length=sizeof(mca_ptl_sm_frag_t)+mca_ptl_sm_component.fragment_alignment+
|
||||||
mca_ptl_sm_component.first_fragment_size;
|
mca_ptl_sm_component.first_fragment_size;
|
||||||
|
|
||||||
ompi_free_list_init(&mca_ptl_sm_component.sm_frags, length,
|
ompi_free_list_init(&mca_ptl_sm_component.sm_first_frags, length,
|
||||||
OBJ_CLASS(mca_ptl_sm_frag_t),
|
OBJ_CLASS(mca_ptl_sm_frag_t),
|
||||||
mca_ptl_sm_component.sm_free_list_num,
|
mca_ptl_sm_component.sm_free_list_num,
|
||||||
mca_ptl_sm_component.sm_free_list_max,
|
mca_ptl_sm_component.sm_free_list_max,
|
||||||
|
@ -8,14 +8,23 @@
|
|||||||
#include "ptl_sm_frag.h"
|
#include "ptl_sm_frag.h"
|
||||||
|
|
||||||
|
|
||||||
static void mca_ptl_sm_frag_construct(mca_ptl_sm_frag_t* frag);
|
static void mca_ptl_sm_first_frag_construct(mca_ptl_sm_frag_t* frag);
|
||||||
static void mca_ptl_sm_frag_destruct(mca_ptl_sm_frag_t* frag);
|
static void mca_ptl_sm_first_frag_destruct(mca_ptl_sm_frag_t* frag);
|
||||||
|
static void mca_ptl_sm_second_frag_construct(mca_ptl_sm_frag_t* frag);
|
||||||
|
static void mca_ptl_sm_second_frag_destruct(mca_ptl_sm_frag_t* frag);
|
||||||
|
|
||||||
OBJ_CLASS_INSTANCE(
|
OBJ_CLASS_INSTANCE(
|
||||||
mca_ptl_sm_frag_t,
|
mca_ptl_sm_frag_t,
|
||||||
mca_ptl_base_recv_frag_t,
|
mca_ptl_base_recv_frag_t,
|
||||||
mca_ptl_sm_frag_construct,
|
mca_ptl_sm_first_frag_construct,
|
||||||
mca_ptl_sm_frag_destruct
|
mca_ptl_sm_first_frag_destruct
|
||||||
|
);
|
||||||
|
|
||||||
|
OBJ_CLASS_INSTANCE(
|
||||||
|
mca_ptl_sm_second_frag_t,
|
||||||
|
mca_ptl_base_recv_frag_t,
|
||||||
|
mca_ptl_sm_second_frag_construct,
|
||||||
|
mca_ptl_sm_second_frag_destruct
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -23,7 +32,7 @@ OBJ_CLASS_INSTANCE(
|
|||||||
* shared memory recv fragment constructor
|
* shared memory recv fragment constructor
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void mca_ptl_sm_frag_construct(mca_ptl_sm_frag_t* frag)
|
static void mca_ptl_sm_first_frag_construct(mca_ptl_sm_frag_t* frag)
|
||||||
{
|
{
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
|
||||||
@ -42,7 +51,34 @@ static void mca_ptl_sm_frag_construct(mca_ptl_sm_frag_t* frag)
|
|||||||
* shared memory recv fragment destructor
|
* shared memory recv fragment destructor
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void mca_ptl_sm_frag_destruct(mca_ptl_sm_frag_t* frag)
|
static void mca_ptl_sm_first_frag_destruct(mca_ptl_sm_frag_t* frag)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* shared memory second and above fragments
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void mca_ptl_sm_second_frag_construct(mca_ptl_sm_frag_t* frag)
|
||||||
|
{
|
||||||
|
char *ptr;
|
||||||
|
|
||||||
|
/* set the buffer length */
|
||||||
|
frag->buff_length=(size_t)mca_ptl_sm_component.max_fragment_size;
|
||||||
|
|
||||||
|
/* set buffer pointer */
|
||||||
|
ptr=((char *)frag)+sizeof(mca_ptl_sm_frag_t)+
|
||||||
|
mca_ptl_sm_component.fragment_alignment;
|
||||||
|
/* align */
|
||||||
|
ptr=ptr-(((size_t)ptr)%(mca_ptl_sm_component.fragment_alignment));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* shared memory second and above fragments
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void mca_ptl_sm_second_frag_destruct(mca_ptl_sm_frag_t* frag)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,9 +18,13 @@
|
|||||||
|
|
||||||
OBJ_CLASS_DECLARATION(mca_ptl_sm_frag_t);
|
OBJ_CLASS_DECLARATION(mca_ptl_sm_frag_t);
|
||||||
|
|
||||||
|
OBJ_CLASS_DECLARATION(mca_ptl_sm_second_frag_t);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* shared memory received fragment derived type.
|
* shared memory received fragment derived type - because of
|
||||||
|
* the way lists are initialized in Open MPI, this is good
|
||||||
|
* only for the first fragment.
|
||||||
*/
|
*/
|
||||||
struct mca_ptl_sm_frag_t {
|
struct mca_ptl_sm_frag_t {
|
||||||
mca_ptl_base_recv_frag_t super; /**< base receive fragment descriptor */
|
mca_ptl_base_recv_frag_t super; /**< base receive fragment descriptor */
|
||||||
@ -29,5 +33,12 @@ struct mca_ptl_sm_frag_t {
|
|||||||
};
|
};
|
||||||
typedef struct mca_ptl_sm_frag_t mca_ptl_sm_frag_t;
|
typedef struct mca_ptl_sm_frag_t mca_ptl_sm_frag_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* shared memory received fragment derived type - because of
|
||||||
|
* the way lists are initialized in Open MPI, this is good
|
||||||
|
* only for the second and beyond fragments.
|
||||||
|
*/
|
||||||
|
typedef struct mca_ptl_sm_frag_t mca_ptl_sm_second_frag_t;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -39,7 +39,8 @@ void mca_ptl_sm_send_request_destruct(mca_ptl_sm_send_request_t* request)
|
|||||||
* memory send request is initialized. This will attempt
|
* memory send request is initialized. This will attempt
|
||||||
* to allocate fragment descriptor and payload memory
|
* to allocate fragment descriptor and payload memory
|
||||||
*/
|
*/
|
||||||
int mca_ptl_sm_send_request_init(mca_ptl_base_module_request_init_fn_t* request)
|
int mca_ptl_sm_send_request_init(struct mca_ptl_base_module_t* ptl,
|
||||||
|
struct mca_pml_base_send_request_t* request)
|
||||||
{
|
{
|
||||||
|
|
||||||
int return_value=OMPI_SUCCESS;
|
int return_value=OMPI_SUCCESS;
|
||||||
|
@ -32,12 +32,11 @@ struct mca_ptl_sm_send_request_t {
|
|||||||
typedef struct mca_ptl_sm_send_request_t mca_ptl_sm_send_request_t;
|
typedef struct mca_ptl_sm_send_request_t mca_ptl_sm_send_request_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* int
|
* initializtion function to be called when a new shared
|
||||||
* mca_ptl_sm_send_request_init(mca_ptl_base_module_request_init_fn_t*
|
* memory send request is initialized.
|
||||||
* request)
|
|
||||||
*/
|
*/
|
||||||
int mca_ptl_sm_send_request_init(mca_ptl_base_module_request_init_fn_t*
|
int mca_ptl_sm_send_request_init(struct mca_ptl_base_module_t* ptl,
|
||||||
request);
|
struct mca_pml_base_send_request_t* request);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user