pending send frags is now a `per module' information and not
a per peer information as in the TCP case. This commit was SVN r2646.
Этот коммит содержится в:
родитель
1fb4653445
Коммит
ff8fda793c
@ -101,6 +101,12 @@ struct mca_ptl_ib_module_t {
|
|||||||
|
|
||||||
ompi_free_list_t recv_free;
|
ompi_free_list_t recv_free;
|
||||||
/**< free list of recv buffer descriptors */
|
/**< free list of recv buffer descriptors */
|
||||||
|
|
||||||
|
ompi_list_t pending_send_frags;
|
||||||
|
/**< list of all pending send fragments */
|
||||||
|
|
||||||
|
ompi_list_t pending_recv_frags;
|
||||||
|
/**< list of all pending recv fragments */
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct mca_ptl_ib_module_t mca_ptl_ib_module_t;
|
typedef struct mca_ptl_ib_module_t mca_ptl_ib_module_t;
|
||||||
|
@ -238,6 +238,9 @@ mca_ptl_base_module_t** mca_ptl_ib_component_init(int *num_ptl_modules,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Find a better place for this */
|
/* Find a better place for this */
|
||||||
|
OBJ_CONSTRUCT(&(ib_modules[i].pending_send_frags), ompi_list_t);
|
||||||
|
OBJ_CONSTRUCT(&(ib_modules[i].pending_recv_frags), ompi_list_t);
|
||||||
|
|
||||||
OBJ_CONSTRUCT(&(ib_modules[i].send_free), ompi_free_list_t);
|
OBJ_CONSTRUCT(&(ib_modules[i].send_free), ompi_free_list_t);
|
||||||
|
|
||||||
OBJ_CONSTRUCT(&(ib_modules[i].recv_free), ompi_free_list_t);
|
OBJ_CONSTRUCT(&(ib_modules[i].recv_free), ompi_free_list_t);
|
||||||
@ -329,6 +332,21 @@ int mca_ptl_ib_component_control(int param, void* value, size_t size)
|
|||||||
|
|
||||||
int mca_ptl_ib_component_progress(mca_ptl_tstamp_t tstamp)
|
int mca_ptl_ib_component_progress(mca_ptl_tstamp_t tstamp)
|
||||||
{
|
{
|
||||||
|
uint32_t num_modules, i;
|
||||||
|
mca_ptl_ib_module_t *module;
|
||||||
|
|
||||||
|
num_modules = mca_ptl_ib_component.ib_num_ptl_modules;
|
||||||
|
|
||||||
|
/* Make progress on outstanding sends for
|
||||||
|
* all IB modules */
|
||||||
|
for(i = 0; i < num_modules; i++) {
|
||||||
|
|
||||||
|
module = mca_ptl_ib_component.ib_ptl_modules[i];
|
||||||
|
|
||||||
|
if(!ompi_list_is_empty(&((module)->pending_send_frags))) {
|
||||||
|
D_PRINT("Frag to progress");
|
||||||
|
}
|
||||||
|
}
|
||||||
#if 0
|
#if 0
|
||||||
VAPI_ret_t ret;
|
VAPI_ret_t ret;
|
||||||
VAPI_wc_desc_t comp;
|
VAPI_wc_desc_t comp;
|
||||||
|
@ -74,13 +74,8 @@ static void mca_ptl_ib_peer_construct(mca_ptl_base_peer_t* module_peer)
|
|||||||
module_peer->peer_module = 0;
|
module_peer->peer_module = 0;
|
||||||
module_peer->peer_proc = 0;
|
module_peer->peer_proc = 0;
|
||||||
module_peer->peer_ts = 0.0;
|
module_peer->peer_ts = 0.0;
|
||||||
module_peer->peer_send_frag = 0;
|
|
||||||
module_peer->peer_recv_frag = 0;
|
|
||||||
module_peer->peer_send_event.ev_flags = 0;
|
|
||||||
module_peer->peer_recv_event.ev_flags = 0;
|
|
||||||
module_peer->peer_state = MCA_PTL_IB_CLOSED;
|
module_peer->peer_state = MCA_PTL_IB_CLOSED;
|
||||||
module_peer->peer_retries = 0;
|
module_peer->peer_retries = 0;
|
||||||
OBJ_CONSTRUCT(&module_peer->peer_frags, ompi_list_t);
|
|
||||||
OBJ_CONSTRUCT(&module_peer->peer_send_lock, ompi_mutex_t);
|
OBJ_CONSTRUCT(&module_peer->peer_send_lock, ompi_mutex_t);
|
||||||
OBJ_CONSTRUCT(&module_peer->peer_recv_lock, ompi_mutex_t);
|
OBJ_CONSTRUCT(&module_peer->peer_recv_lock, ompi_mutex_t);
|
||||||
}
|
}
|
||||||
@ -273,14 +268,6 @@ static int mca_ptl_ib_peer_reply_start_connect(mca_ptl_ib_peer_t *peer,
|
|||||||
static void mca_ptl_ib_peer_connected(mca_ptl_ib_peer_t *peer)
|
static void mca_ptl_ib_peer_connected(mca_ptl_ib_peer_t *peer)
|
||||||
{
|
{
|
||||||
peer->peer_state = MCA_PTL_IB_CONNECTED;
|
peer->peer_state = MCA_PTL_IB_CONNECTED;
|
||||||
|
|
||||||
if(ompi_list_get_size(&peer->peer_frags) > 0) {
|
|
||||||
if(NULL == peer->peer_send_frag) {
|
|
||||||
|
|
||||||
peer->peer_send_frag = (mca_ptl_ib_send_frag_t *)
|
|
||||||
ompi_list_remove_first(&peer->peer_frags);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -414,19 +401,18 @@ int mca_ptl_ib_peer_send(mca_ptl_base_peer_t* peer,
|
|||||||
switch(peer->peer_state) {
|
switch(peer->peer_state) {
|
||||||
case MCA_PTL_IB_CONNECTING:
|
case MCA_PTL_IB_CONNECTING:
|
||||||
|
|
||||||
ompi_list_append(&peer->peer_frags, (ompi_list_item_t*)frag);
|
ompi_list_append(&peer->peer_module->pending_send_frags,
|
||||||
|
(ompi_list_item_t*)frag);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MCA_PTL_IB_CLOSED:
|
case MCA_PTL_IB_CLOSED:
|
||||||
|
|
||||||
D_PRINT("Connection to peer closed ... connecting ...");
|
D_PRINT("Connection to peer closed ... connecting ...");
|
||||||
|
|
||||||
ompi_list_append(&peer->peer_frags, (ompi_list_item_t*)frag);
|
ompi_list_append(&peer->peer_module->pending_send_frags,
|
||||||
|
(ompi_list_item_t*)frag);
|
||||||
|
|
||||||
rc = mca_ptl_ib_peer_start_connect(peer);
|
rc = mca_ptl_ib_peer_start_connect(peer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MCA_PTL_IB_FAILED:
|
case MCA_PTL_IB_FAILED:
|
||||||
|
|
||||||
rc = OMPI_ERR_UNREACH;
|
rc = OMPI_ERR_UNREACH;
|
||||||
@ -435,27 +421,6 @@ int mca_ptl_ib_peer_send(mca_ptl_base_peer_t* peer,
|
|||||||
case MCA_PTL_IB_CONNECTED:
|
case MCA_PTL_IB_CONNECTED:
|
||||||
|
|
||||||
/* Send the frag off */
|
/* Send the frag off */
|
||||||
if(NULL != peer->peer_send_frag) {
|
|
||||||
|
|
||||||
/* Some other frag is being processed */
|
|
||||||
ompi_list_append(&peer->peer_frags, (ompi_list_item_t*)frag);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
/* No other frag is being processed */
|
|
||||||
|
|
||||||
if(1) {
|
|
||||||
|
|
||||||
D_PRINT("I have to send it now ...");
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
/* Set the current frag being processed as
|
|
||||||
* THIS frag */
|
|
||||||
peer->peer_send_frag = frag;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
rc = OMPI_ERR_UNREACH;
|
rc = OMPI_ERR_UNREACH;
|
||||||
|
@ -50,12 +50,6 @@ struct mca_ptl_base_peer_t {
|
|||||||
struct mca_ptl_ib_proc_t* peer_proc;
|
struct mca_ptl_ib_proc_t* peer_proc;
|
||||||
/**< proc structure corresponding to peer */
|
/**< proc structure corresponding to peer */
|
||||||
|
|
||||||
mca_ptl_ib_send_frag_t* peer_send_frag;
|
|
||||||
/**< current send frag being processed */
|
|
||||||
|
|
||||||
mca_ptl_ib_recv_frag_t* peer_recv_frag;
|
|
||||||
/**< current recv frag being processed */
|
|
||||||
|
|
||||||
mca_ptl_ib_peer_state_t peer_state;
|
mca_ptl_ib_peer_state_t peer_state;
|
||||||
/**< current state of the connection */
|
/**< current state of the connection */
|
||||||
|
|
||||||
@ -68,20 +62,11 @@ struct mca_ptl_base_peer_t {
|
|||||||
double peer_ts;
|
double peer_ts;
|
||||||
/**< timestamp of when the first connection was attempted */
|
/**< timestamp of when the first connection was attempted */
|
||||||
|
|
||||||
ompi_list_t peer_frags;
|
|
||||||
/**< list of pending frags to send */
|
|
||||||
|
|
||||||
ompi_mutex_t peer_send_lock;
|
ompi_mutex_t peer_send_lock;
|
||||||
/**< lock for concurrent access to peer state */
|
/**< lock for concurrent access to peer state */
|
||||||
|
|
||||||
ompi_mutex_t peer_recv_lock;
|
ompi_mutex_t peer_recv_lock;
|
||||||
/**< lock for concurrent access to peer state */
|
/**< lock for concurrent access to peer state */
|
||||||
|
|
||||||
ompi_event_t peer_send_event;
|
|
||||||
/**< event for async processing of send frags */
|
|
||||||
|
|
||||||
ompi_event_t peer_recv_event;
|
|
||||||
/**< event for async processing of recv frags */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct mca_ptl_base_peer_t mca_ptl_base_peer_t;
|
typedef struct mca_ptl_base_peer_t mca_ptl_base_peer_t;
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user