more fixes, reset state on completion..
This commit was SVN r9469.
Этот коммит содержится в:
родитель
2945f77f9e
Коммит
641fa6c0d2
@ -202,16 +202,5 @@ int mca_pml_dr_dump(
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
void mca_pml_dr_del_btl(mca_btl_base_module_t* btl)
|
||||
{
|
||||
/* remove this btl from the set used for forwarding */
|
||||
mca_bml.bml_del_btl(btl);
|
||||
|
||||
/* publish this failure to all other peers */
|
||||
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,7 @@ static void mca_pml_dr_endpoint_construct(mca_pml_dr_endpoint_t* ep)
|
||||
OBJ_CONSTRUCT(&ep->seq_sends, ompi_seq_tracker_t);
|
||||
OBJ_CONSTRUCT(&ep->seq_recvs, ompi_seq_tracker_t);
|
||||
OBJ_CONSTRUCT(&ep->seq_recvs_matched, ompi_seq_tracker_t);
|
||||
ep->vfrag_seq = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -720,8 +720,8 @@ void mca_pml_dr_recv_frag_ack(
|
||||
void *src_ptr,
|
||||
uint64_t mask,
|
||||
uint16_t len)
|
||||
{
|
||||
ompi_communicator_t* comm = ompi_comm_lookup(hdr->hdr_ctx);
|
||||
{
|
||||
|
||||
mca_btl_base_descriptor_t* des;
|
||||
mca_bml_base_btl_t* bml_btl;
|
||||
mca_pml_dr_recv_frag_t* frag;
|
||||
|
@ -262,7 +262,12 @@ void mca_pml_dr_recv_request_progress(
|
||||
bit = ((uint64_t)1 << hdr->hdr_frag.hdr_frag_idx);
|
||||
MCA_PML_DR_RECV_REQUEST_VFRAG_LOOKUP(recvreq, &hdr->hdr_frag, vfrag);
|
||||
if(vfrag->vf_ack & bit) {
|
||||
/* duplicate, nothing to do */
|
||||
if(vfrag->vf_ack == vfrag->vf_mask) {
|
||||
mca_pml_dr_recv_request_ack(recvreq, &hdr->hdr_common,
|
||||
hdr->hdr_frag.hdr_src_ptr,
|
||||
vfrag->vf_size,
|
||||
vfrag->vf_mask);
|
||||
}
|
||||
return;
|
||||
}
|
||||
bytes_received -= sizeof(mca_pml_dr_frag_hdr_t);
|
||||
|
@ -114,9 +114,17 @@ do { \
|
||||
|
||||
#define MCA_PML_DR_RECV_REQUEST_PML_COMPLETE(recvreq) \
|
||||
do { \
|
||||
opal_list_item_t* item; \
|
||||
assert( false == recvreq->req_recv.req_base.req_pml_complete ); \
|
||||
OPAL_THREAD_LOCK((recvreq)->req_mutex); \
|
||||
while(NULL != (item = opal_list_remove_first(&(recvreq)->req_vfrags))) { \
|
||||
OMPI_FREE_LIST_RETURN(&mca_pml_dr.vfrags, item); \
|
||||
} \
|
||||
OPAL_THREAD_UNLOCK((recvreq)->req_mutex); \
|
||||
\
|
||||
OPAL_THREAD_LOCK(&ompi_request_lock); \
|
||||
opal_list_remove_item(&(recvreq)->req_proc->matched_receives, (opal_list_item_t*)(recvreq)); \
|
||||
\
|
||||
/* initialize request status */ \
|
||||
recvreq->req_recv.req_base.req_pml_complete = true; \
|
||||
recvreq->req_recv.req_base.req_ompi.req_status._count = \
|
||||
@ -138,14 +146,6 @@ do {
|
||||
*/
|
||||
#define MCA_PML_DR_RECV_REQUEST_RETURN(recvreq) \
|
||||
do { \
|
||||
opal_list_item_t* item; \
|
||||
OPAL_THREAD_LOCK((recvreq)->req_mutex); \
|
||||
opal_list_remove_item(&(recvreq)->req_proc->matched_receives, (opal_list_item_t*)(recvreq)); \
|
||||
while(NULL != (item = opal_list_remove_first(&(recvreq)->req_vfrags))) { \
|
||||
OMPI_FREE_LIST_RETURN(&mca_pml_dr.vfrags, item); \
|
||||
} \
|
||||
OPAL_THREAD_UNLOCK((recvreq)->req_mutex); \
|
||||
\
|
||||
/* decrement reference counts */ \
|
||||
MCA_PML_BASE_RECV_REQUEST_FINI(&(recvreq)->req_recv); \
|
||||
OMPI_FREE_LIST_RETURN(&mca_pml_dr.recv_requests, (opal_list_item_t*)(recvreq)); \
|
||||
@ -194,6 +194,8 @@ do {
|
||||
(request)->req_recv.req_base.req_ompi.req_complete = false; \
|
||||
(request)->req_recv.req_base.req_ompi.req_state = OMPI_REQUEST_ACTIVE; \
|
||||
(request)->req_vfrag = &(request)->req_vfrag0; \
|
||||
(request)->req_proc = NULL; \
|
||||
(request)->req_endpoint = NULL; \
|
||||
\
|
||||
/* always set the req_status.MPI_TAG to ANY_TAG before starting the \
|
||||
* request. This field is used if cancelled to find out if the request \
|
||||
@ -283,6 +285,7 @@ do {
|
||||
ompi_convertor_set_position( \
|
||||
&(request->req_recv.req_convertor), \
|
||||
&data_offset); \
|
||||
assert((request->req_recv.req_convertor.flags & CONVERTOR_COMPLETED) == 0); \
|
||||
ompi_convertor_unpack( \
|
||||
&(request)->req_recv.req_convertor, \
|
||||
iov, \
|
||||
|
@ -275,7 +275,6 @@ do {
|
||||
|
||||
#define MCA_PML_DR_SEND_REQUEST_VFRAG_INIT(sendreq, endpoint, size, vfrag) \
|
||||
do { \
|
||||
mca_pml_dr_comm_t* comm = sendreq->req_send.req_base.req_comm->c_pml_comm; \
|
||||
size_t max_send_size = endpoint->base.btl_max_send_size - \
|
||||
sizeof(mca_pml_dr_frag_hdr_t); \
|
||||
size_t div = size / max_send_size; \
|
||||
@ -303,7 +302,7 @@ do {
|
||||
else \
|
||||
vfrag->vf_mask = (((uint64_t)1 << vfrag->vf_len) - (uint64_t)1); \
|
||||
} \
|
||||
vfrag->vf_id = OPAL_THREAD_ADD32(&endpoint->vfrag_seq,1); \
|
||||
vfrag->vf_id = OPAL_THREAD_ADD32(&endpoint->vfrag_seq,1); \
|
||||
vfrag->vf_offset = sendreq->req_send_offset; \
|
||||
vfrag->vf_max_send_size = max_send_size; \
|
||||
vfrag->vf_send.pval = sendreq; \
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user