1
1

need state to ack sync send retransmits, even after the recvreq is gone..

This commit was SVN r9397.
Этот коммит содержится в:
Galen Shipman 2006-03-23 22:02:59 +00:00
родитель d1d8967844
Коммит c38fd90e63
4 изменённых файлов: 14 добавлений и 3 удалений

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

@ -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->unexpected_frags, opal_list_t);
OBJ_CONSTRUCT(&proc->seq_sends, ompi_seq_tracker_t); OBJ_CONSTRUCT(&proc->seq_sends, ompi_seq_tracker_t);
OBJ_CONSTRUCT(&proc->seq_recvs, 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->unexpected_frags);
OBJ_DESTRUCT(&proc->seq_sends); OBJ_DESTRUCT(&proc->seq_sends);
OBJ_DESTRUCT(&proc->seq_recvs); 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_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_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; /**< 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; 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 */ /* seq_recvs protected by matching lock */
OPAL_THREAD_LOCK(&comm->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 */ /* ack only if the vfrag has been matched */
mca_pml_dr_recv_request_t* recvreq = mca_pml_dr_recv_request_t* recvreq =
mca_pml_dr_comm_proc_check_matched(proc, hdr->hdr_common.hdr_vid); mca_pml_dr_comm_proc_check_matched(proc, hdr->hdr_common.hdr_vid);
OPAL_THREAD_UNLOCK(&comm->matching_lock); OPAL_THREAD_UNLOCK(&comm->matching_lock);
if(NULL != recvreq) { 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, mca_pml_dr_recv_request_ack(recvreq, &hdr->hdr_common,
hdr->hdr_match.hdr_src_ptr, recvreq->req_bytes_received, 1); hdr->hdr_match.hdr_src_ptr, recvreq->req_bytes_received, 1);
} else { } 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 { } else {
OPAL_THREAD_UNLOCK(&comm->matching_lock); OPAL_THREAD_UNLOCK(&comm->matching_lock);

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

@ -225,6 +225,7 @@ do {
(request)->req_recv.req_base.req_ompi.req_status.MPI_SOURCE = \ (request)->req_recv.req_base.req_ompi.req_status.MPI_SOURCE = \
(hdr)->hdr_common.hdr_src; \ (hdr)->hdr_common.hdr_src; \
opal_list_append(&proc->matched_receives, (opal_list_item_t*)request); \ 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) } while(0)