need state to ack sync send retransmits, even after the recvreq is gone..
This commit was SVN r9397.
Этот коммит содержится в:
родитель
d1d8967844
Коммит
c38fd90e63
@ -34,6 +34,7 @@ static void mca_pml_dr_comm_proc_construct(mca_pml_dr_comm_proc_t* proc)
|
||||
OBJ_CONSTRUCT(&proc->unexpected_frags, opal_list_t);
|
||||
OBJ_CONSTRUCT(&proc->seq_sends, ompi_seq_tracker_t);
|
||||
OBJ_CONSTRUCT(&proc->seq_recvs, ompi_seq_tracker_t);
|
||||
OBJ_CONSTRUCT(&proc->seq_recvs_matched, ompi_seq_tracker_t);
|
||||
}
|
||||
|
||||
|
||||
@ -45,6 +46,7 @@ static void mca_pml_dr_comm_proc_destruct(mca_pml_dr_comm_proc_t* proc)
|
||||
OBJ_DESTRUCT(&proc->unexpected_frags);
|
||||
OBJ_DESTRUCT(&proc->seq_sends);
|
||||
OBJ_DESTRUCT(&proc->seq_recvs);
|
||||
OBJ_DESTRUCT(&proc->seq_recvs_matched);
|
||||
}
|
||||
|
||||
|
||||
|
@ -48,6 +48,7 @@ struct mca_pml_dr_comm_proc_t {
|
||||
ompi_proc_t* ompi_proc; /**< back pointer to ompi_proc_t */
|
||||
ompi_seq_tracker_t seq_sends; /**< Tracks the send vfrags that have been acked */
|
||||
ompi_seq_tracker_t seq_recvs; /**< Tracks the receive vfrags that have been acked */
|
||||
ompi_seq_tracker_t seq_recvs_matched; /**< Tracks the received vfrags that have been matched */
|
||||
};
|
||||
typedef struct mca_pml_dr_comm_proc_t mca_pml_dr_comm_proc_t;
|
||||
|
||||
|
@ -157,17 +157,24 @@ void mca_pml_dr_recv_frag_callback(
|
||||
|
||||
/* seq_recvs protected by matching lock */
|
||||
OPAL_THREAD_LOCK(&comm->matching_lock);
|
||||
if(ompi_seq_tracker_check_duplicate(&proc->seq_recvs, hdr->hdr_common.hdr_vid)) {
|
||||
if(ompi_seq_tracker_check_duplicate(&proc->seq_recvs, hdr->hdr_common.hdr_vid)){
|
||||
/* ack only if the vfrag has been matched */
|
||||
mca_pml_dr_recv_request_t* recvreq =
|
||||
mca_pml_dr_comm_proc_check_matched(proc, hdr->hdr_common.hdr_vid);
|
||||
OPAL_THREAD_UNLOCK(&comm->matching_lock);
|
||||
if(NULL != recvreq) {
|
||||
OPAL_OUTPUT((0, "%s:%d: acking duplicate matched rendezvous\n", __FILE__, __LINE__));
|
||||
OPAL_OUTPUT((0, "%s:%d: acking duplicate matched rendezvous from pending matched\n", __FILE__, __LINE__));
|
||||
mca_pml_dr_recv_request_ack(recvreq, &hdr->hdr_common,
|
||||
hdr->hdr_match.hdr_src_ptr, recvreq->req_bytes_received, 1);
|
||||
} else {
|
||||
OPAL_OUTPUT((0, "%s:%d: droping duplicate unmatched rendezvous\n", __FILE__, __LINE__));
|
||||
if(ompi_seq_tracker_check_duplicate(&proc->seq_recvs_matched, hdr->hdr_common.hdr_vid)) {
|
||||
OPAL_OUTPUT((0, "%s:%d: acking duplicate matched rendezvous from sequence tracker\n", __FILE__, __LINE__));
|
||||
mca_pml_dr_recv_request_ack(recvreq, &hdr->hdr_common,
|
||||
hdr->hdr_match.hdr_src_ptr, recvreq->req_bytes_received, 1);
|
||||
|
||||
} else {
|
||||
OPAL_OUTPUT((0, "%s:%d: droping duplicate unmatched rendezvous\n", __FILE__, __LINE__));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
OPAL_THREAD_UNLOCK(&comm->matching_lock);
|
||||
|
@ -225,6 +225,7 @@ do {
|
||||
(request)->req_recv.req_base.req_ompi.req_status.MPI_SOURCE = \
|
||||
(hdr)->hdr_common.hdr_src; \
|
||||
opal_list_append(&proc->matched_receives, (opal_list_item_t*)request); \
|
||||
ompi_seq_tracker_insert(&proc->seq_recvs_matched, (hdr)->hdr_common.hdr_vid); \
|
||||
} while(0)
|
||||
|
||||
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user