1
1

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.
Этот коммит содержится в:
Sayantan Sur 2004-09-14 04:40:47 +00:00
родитель 1fb4653445
Коммит ff8fda793c
4 изменённых файлов: 28 добавлений и 54 удалений

Просмотреть файл

@ -101,6 +101,12 @@ struct mca_ptl_ib_module_t {
ompi_free_list_t recv_free;
/**< 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;

Просмотреть файл

@ -238,6 +238,9 @@ mca_ptl_base_module_t** mca_ptl_ib_component_init(int *num_ptl_modules,
}
/* 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].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)
{
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
VAPI_ret_t ret;
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_proc = 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_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_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)
{
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) {
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;
case MCA_PTL_IB_CLOSED:
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);
break;
case MCA_PTL_IB_FAILED:
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:
/* 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;
default:
rc = OMPI_ERR_UNREACH;

Просмотреть файл

@ -50,12 +50,6 @@ struct mca_ptl_base_peer_t {
struct mca_ptl_ib_proc_t* peer_proc;
/**< 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;
/**< current state of the connection */
@ -68,20 +62,11 @@ struct mca_ptl_base_peer_t {
double peer_ts;
/**< 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;
/**< lock for concurrent access to peer state */
ompi_mutex_t peer_recv_lock;
/**< 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;