work in progress
This commit was SVN r3384.
Этот коммит содержится в:
родитель
847c08fda5
Коммит
28f870e052
@ -293,7 +293,7 @@ int mca_ptl_mx_send_continue(
|
||||
hdr->hdr_frag.hdr_frag_seq = 0;
|
||||
hdr->hdr_frag.hdr_src_ptr.lval = 0; /* for VALGRIND/PURIFY - REPLACE WITH MACRO */
|
||||
hdr->hdr_frag.hdr_src_ptr.pval = sendfrag;
|
||||
hdr->hdr_frag.hdr_dst_ptr.lval = 0;
|
||||
hdr->hdr_frag.hdr_dst_ptr = sendreq->req_peer_match;
|
||||
|
||||
/* initialize convertor */
|
||||
sendfrag->frag_free = 0;
|
||||
@ -421,7 +421,7 @@ void mca_ptl_mx_matched(
|
||||
OMPI_THREAD_UNLOCK(&mca_ptl_mx_component.mx_lock);
|
||||
} else {
|
||||
mx_return_t mx_return;
|
||||
mca_ptl_mx_send_frag_init_ack(ack, mx_ptl, mx_frag);
|
||||
MCA_PTL_MX_SEND_FRAG_INIT_ACK(ack, ptl, mx_frag);
|
||||
if(ack->frag_send.frag_base.frag_peer->peer_byte_swap) {
|
||||
MCA_PTL_BASE_ACK_HDR_HTON(ack->frag_send.frag_base.frag_header.hdr_ack);
|
||||
}
|
||||
|
@ -56,73 +56,72 @@ do {
|
||||
* Routine to process complete request(s).
|
||||
*/
|
||||
|
||||
static inline void MCA_PTL_MX_PROGRESS(mca_ptl_mx_module_t* ptl, mx_request_t mx_request)
|
||||
{
|
||||
mx_return_t mx_return;
|
||||
mx_status_t mx_status;
|
||||
uint32_t mx_result;
|
||||
mca_ptl_base_frag_t* frag;
|
||||
|
||||
mx_return = mx_test(
|
||||
ptl->mx_endpoint,
|
||||
&mx_request,
|
||||
&mx_status,
|
||||
&mx_result);
|
||||
if(mx_return != MX_SUCCESS) {
|
||||
ompi_output(0, "mca_ptl_mx_progress: mx_test() failed with status=%dn",
|
||||
mx_return);
|
||||
return;
|
||||
}
|
||||
|
||||
frag = (mca_ptl_base_frag_t*)mx_status.context;
|
||||
switch(frag->frag_type) {
|
||||
case MCA_PTL_FRAGMENT_SEND:
|
||||
{
|
||||
mca_ptl_mx_send_frag_t* sendfrag = (mca_ptl_mx_send_frag_t*)frag;
|
||||
mca_pml_base_send_request_t* sendreq =
|
||||
sendfrag->frag_send.frag_request;
|
||||
bool req_cached = sendreq->req_cached;
|
||||
ptl->super.ptl_send_progress(
|
||||
&ptl->super,
|
||||
sendreq,
|
||||
sendfrag->frag_send.frag_base.frag_size);
|
||||
if(req_cached == false)
|
||||
MCA_PTL_MX_SEND_FRAG_RETURN(sendfrag);
|
||||
break;
|
||||
}
|
||||
case MCA_PTL_FRAGMENT_RECV:
|
||||
{
|
||||
mca_ptl_mx_recv_frag_t* recvfrag = (mca_ptl_mx_recv_frag_t*)frag;
|
||||
mca_ptl_base_header_t* hdr =
|
||||
&recvfrag->frag_recv.frag_base.frag_header;
|
||||
int rc;
|
||||
switch(hdr->hdr_common.hdr_type) {
|
||||
case MCA_PTL_HDR_TYPE_MATCH:
|
||||
{
|
||||
if(hdr->hdr_common.hdr_flags & MCA_PTL_FLAGS_NBO) {
|
||||
MCA_PTL_BASE_MATCH_HDR_NTOH(hdr->hdr_match);
|
||||
}
|
||||
ptl->super.ptl_match(&ptl->super, &recvfrag->frag_recv,
|
||||
&hdr->hdr_match);
|
||||
break;
|
||||
}
|
||||
case MCA_PTL_HDR_TYPE_FRAG:
|
||||
break;
|
||||
case MCA_PTL_HDR_TYPE_ACK:
|
||||
break;
|
||||
}
|
||||
MCA_PTL_MX_POST(ptl, rc);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
ompi_output(0, "mca_ptl_mx_progress: invalid request type: %dn",
|
||||
frag->frag_type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#define MCA_PTL_MX_PROGRESS(ptl, mx_request) \
|
||||
{ \
|
||||
mx_return_t mx_return; \
|
||||
mx_status_t mx_status; \
|
||||
uint32_t mx_result; \
|
||||
mca_ptl_base_frag_t* frag; \
|
||||
\
|
||||
mx_return = mx_test( \
|
||||
ptl->mx_endpoint, \
|
||||
&mx_request, \
|
||||
&mx_status, \
|
||||
&mx_result); \
|
||||
if(mx_return != MX_SUCCESS) { \
|
||||
ompi_output(0, "mca_ptl_mx_progress: mx_test() failed with status=%dn", \
|
||||
mx_return); \
|
||||
break; \
|
||||
} \
|
||||
\
|
||||
frag = (mca_ptl_base_frag_t*)mx_status.context; \
|
||||
switch(frag->frag_type) { \
|
||||
case MCA_PTL_FRAGMENT_SEND: \
|
||||
{ \
|
||||
mca_ptl_mx_send_frag_t* sendfrag = (mca_ptl_mx_send_frag_t*)frag; \
|
||||
mca_pml_base_send_request_t* sendreq = \
|
||||
sendfrag->frag_send.frag_request; \
|
||||
bool req_cached = sendreq->req_cached; \
|
||||
ptl->super.ptl_send_progress( \
|
||||
&ptl->super, \
|
||||
sendreq, \
|
||||
sendfrag->frag_send.frag_base.frag_size); \
|
||||
if(req_cached == false) \
|
||||
MCA_PTL_MX_SEND_FRAG_RETURN(sendfrag); \
|
||||
break; \
|
||||
} \
|
||||
case MCA_PTL_FRAGMENT_RECV: \
|
||||
{ \
|
||||
mca_ptl_mx_recv_frag_t* recvfrag = (mca_ptl_mx_recv_frag_t*)frag; \
|
||||
mca_ptl_base_header_t* hdr = \
|
||||
&recvfrag->frag_recv.frag_base.frag_header; \
|
||||
int rc; \
|
||||
switch(hdr->hdr_common.hdr_type) { \
|
||||
case MCA_PTL_HDR_TYPE_MATCH: \
|
||||
{ \
|
||||
if(hdr->hdr_common.hdr_flags & MCA_PTL_FLAGS_NBO) { \
|
||||
MCA_PTL_BASE_MATCH_HDR_NTOH(hdr->hdr_match); \
|
||||
} \
|
||||
ptl->super.ptl_match(&ptl->super, &recvfrag->frag_recv, \
|
||||
&hdr->hdr_match); \
|
||||
break; \
|
||||
} \
|
||||
case MCA_PTL_HDR_TYPE_FRAG: \
|
||||
break; \
|
||||
case MCA_PTL_HDR_TYPE_ACK: \
|
||||
break; \
|
||||
} \
|
||||
MCA_PTL_MX_POST(ptl, rc); \
|
||||
break; \
|
||||
} \
|
||||
default: \
|
||||
{ \
|
||||
ompi_output(0, "mca_ptl_mx_progress: invalid request type: %dn", \
|
||||
frag->frag_type); \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -34,18 +34,4 @@ static void mca_ptl_mx_send_frag_destruct(mca_ptl_mx_send_frag_t* frag)
|
||||
}
|
||||
|
||||
|
||||
static void *mca_ptl_mx_alloc(size_t *size)
|
||||
{
|
||||
return malloc(*size);
|
||||
}
|
||||
|
||||
|
||||
void mca_ptl_mx_send_frag_init_ack(
|
||||
mca_ptl_mx_send_frag_t* ack,
|
||||
mca_ptl_mx_module_t* ptl,
|
||||
struct mca_ptl_mx_recv_frag_t* recv_frag)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -51,11 +51,28 @@ typedef struct mca_ptl_mx_send_frag_t mca_ptl_mx_send_frag_t;
|
||||
OBJ_CLASS_DECLARATION(mca_ptl_mx_send_frag_t);
|
||||
|
||||
|
||||
void mca_ptl_mx_send_frag_init_ack(
|
||||
mca_ptl_mx_send_frag_t* ack,
|
||||
mca_ptl_mx_module_t* ptl,
|
||||
struct mca_ptl_mx_recv_frag_t* recv_frag);
|
||||
|
||||
#define MCA_PTL_MX_SEND_FRAG_INIT_ACK(ack,ptl,frag) \
|
||||
{ \
|
||||
mca_ptl_base_header_t* hdr = &(ack)->frag_send.frag_base.frag_header; \
|
||||
mca_pml_base_recv_request_t* request = frag->frag_recv.frag_request; \
|
||||
hdr->hdr_common.hdr_type = MCA_PTL_HDR_TYPE_ACK; \
|
||||
hdr->hdr_common.hdr_flags = 0; \
|
||||
hdr->hdr_common.hdr_size = sizeof(mca_ptl_base_ack_header_t); \
|
||||
hdr->hdr_ack.hdr_src_ptr = frag->frag_recv.frag_base.frag_header.hdr_frag.hdr_src_ptr; \
|
||||
hdr->hdr_ack.hdr_dst_match.lval = 0; /* for VALGRIND/PURIFY - REPLACE WITH MACRO */ \
|
||||
hdr->hdr_ack.hdr_dst_match.pval = request; \
|
||||
hdr->hdr_ack.hdr_dst_addr.lval = 0; /* for VALGRIND/PURIFY - REPLACE WITH MACRO */ \
|
||||
hdr->hdr_ack.hdr_dst_addr.pval = request->req_base.req_addr; \
|
||||
hdr->hdr_ack.hdr_dst_size = request->req_bytes_packed; \
|
||||
(ack)->frag_send.frag_request = NULL; \
|
||||
(ack)->frag_send.frag_base.frag_peer = NULL; \
|
||||
(ack)->frag_send.frag_base.frag_owner = ptl; \
|
||||
(ack)->frag_send.frag_base.frag_addr = NULL; \
|
||||
(ack)->frag_send.frag_base.frag_size = 0; \
|
||||
(ack)->frag_segment_count = 1; \
|
||||
(ack)->frag_free = 0; \
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user