Commit the code to test at OSU.
This commit was SVN r1824.
Этот коммит содержится в:
родитель
985687112b
Коммит
1e162da7c7
@ -42,7 +42,7 @@ mca_ptl_elan_t mca_ptl_elan = {
|
|||||||
mca_ptl_elan_get,
|
mca_ptl_elan_get,
|
||||||
mca_ptl_elan_matched,
|
mca_ptl_elan_matched,
|
||||||
mca_ptl_elan_req_init,
|
mca_ptl_elan_req_init,
|
||||||
mca_ptl_elan_req_fini,
|
mca_ptl_elan_req_fini
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -164,27 +164,25 @@ int
|
|||||||
mca_ptl_elan_req_init (struct mca_ptl_t *ptl,
|
mca_ptl_elan_req_init (struct mca_ptl_t *ptl,
|
||||||
struct mca_pml_base_send_request_t *request)
|
struct mca_pml_base_send_request_t *request)
|
||||||
{
|
{
|
||||||
int rc = OMPI_SUCCESS;
|
|
||||||
mca_ptl_elan_send_frag_t *sd;
|
mca_ptl_elan_send_frag_t *sd;
|
||||||
mca_ptl_elan_send_request_t * elan_req;
|
mca_ptl_elan_send_request_t * elan_req;
|
||||||
|
|
||||||
START_FUNC();
|
START_FUNC();
|
||||||
|
|
||||||
/*OBJ_CONSTRUCT (request, mca_pml_base_send_request_t);*/
|
|
||||||
sd = mca_ptl_elan_alloc_send_desc(ptl, request);
|
sd = mca_ptl_elan_alloc_send_desc(ptl, request);
|
||||||
if (NULL == sd) {
|
if (NULL == sd) {
|
||||||
ompi_output(0,
|
ompi_output(0,
|
||||||
"[%s:%d] Unable to allocate an elan send descriptors \n",
|
"[%s:%d] Unable to allocate an elan send descriptors \n",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
rc = OMPI_ERR_OUT_OF_RESOURCE;
|
return OMPI_ERR_OUT_OF_RESOURCE;
|
||||||
} else {
|
} else {
|
||||||
/* XXX: Hope PML never writes into the fragment */
|
/* XXX: Hope PML never writes into the fragment */
|
||||||
(mca_ptl_elan_send_request_t *request)->req_frag = sd;
|
((mca_ptl_elan_send_request_t *)request)->req_frag = sd;
|
||||||
}
|
}
|
||||||
sd->desc->desc_status = MCA_PTL_ELAN_DESC_CACHED;
|
sd->desc->desc_status = MCA_PTL_ELAN_DESC_CACHED;
|
||||||
|
|
||||||
END_FUNC();
|
END_FUNC();
|
||||||
return rc;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -193,10 +191,12 @@ mca_ptl_elan_req_fini (struct mca_ptl_t *ptl,
|
|||||||
{
|
{
|
||||||
/* XXX: Lock to be added */
|
/* XXX: Lock to be added */
|
||||||
ompi_ptl_elan_queue_ctrl_t *queue;
|
ompi_ptl_elan_queue_ctrl_t *queue;
|
||||||
queue = (struct mca_ptl_elan_t * ptl)->queue;
|
mca_ptl_elan_send_frag_t *desc;
|
||||||
|
|
||||||
|
queue = ((struct mca_ptl_elan_t * )ptl)->queue;
|
||||||
|
|
||||||
/* return the fragment and update the status */
|
/* return the fragment and update the status */
|
||||||
desc = (mca_ptl_elan_send_request_t *) request->req_frag;
|
desc = ((mca_ptl_elan_send_request_t *) request)->req_frag;
|
||||||
OMPI_FREE_LIST_RETURN (&queue->tx_desc_free, (ompi_list_item_t *) desc);
|
OMPI_FREE_LIST_RETURN (&queue->tx_desc_free, (ompi_list_item_t *) desc);
|
||||||
desc->desc->desc_status = MCA_PTL_ELAN_DESC_LOCAL;
|
desc->desc->desc_status = MCA_PTL_ELAN_DESC_LOCAL;
|
||||||
return;
|
return;
|
||||||
@ -243,19 +243,20 @@ mca_ptl_elan_isend (struct mca_ptl_t *ptl,
|
|||||||
|
|
||||||
START_FUNC();
|
START_FUNC();
|
||||||
|
|
||||||
if (offset == 0) /* The first fragment uses a cached desc */
|
if (offset == 0) { /* The first fragment uses a cached desc */
|
||||||
sd = ((mca_ptl_elan_send_request_t*)sendreq)->req_frag;
|
sd = ((mca_ptl_elan_send_request_t*)sendreq)->req_frag;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/* Get a frag desc and allocate a send desc */
|
/* Get a frag desc and allocate a send desc */
|
||||||
ompi_free_list_t * frag_list;
|
ompi_free_list_t * frag_list;
|
||||||
|
ompi_list_item_t * item;
|
||||||
|
|
||||||
frag_list = &mca_ptl_elan_module.elan_send_frags_free;
|
frag_list = &mca_ptl_elan_module.elan_send_frags_free;
|
||||||
|
|
||||||
/* More sendfrag then descritpors, no need to block */
|
/* More sendfrag then descritpors, no need to block */
|
||||||
ompi_mutex_lock(&frag_list->fl_lock);
|
ompi_mutex_lock(&frag_list->fl_lock);
|
||||||
item = ompi_list_remove_first (&((flist)->super));
|
item = ompi_list_remove_first (&((frag_list)->super));
|
||||||
ompi_mutex_unlock(&flist->fl_lock);
|
ompi_mutex_unlock(&frag_list->fl_lock);
|
||||||
OMPI_PTL_ELAN_CHECK_UNEX (item, NULL, OMPI_ERROR, 0);
|
OMPI_PTL_ELAN_CHECK_UNEX (item, NULL, OMPI_ERROR, 0);
|
||||||
|
|
||||||
sd = mca_ptl_elan_alloc_send_desc(ptl, sendreq);
|
sd = mca_ptl_elan_alloc_send_desc(ptl, sendreq);
|
||||||
@ -329,7 +330,7 @@ mca_ptl_elan_matched (mca_ptl_t * ptl,
|
|||||||
request = frag->frag_request;
|
request = frag->frag_request;
|
||||||
|
|
||||||
/* Process the fragment */
|
/* Process the fragment */
|
||||||
set = fetchNset (&(mca_ptl_elan_recv_frag_t *)frag->frag_progressed, 1);
|
set = fetchNset (&((mca_ptl_elan_recv_frag_t *)frag)->frag_progressed, 1);
|
||||||
|
|
||||||
if (!set) {
|
if (!set) {
|
||||||
|
|
||||||
@ -339,7 +340,7 @@ mca_ptl_elan_matched (mca_ptl_t * ptl,
|
|||||||
* But in ELAN cases, we save the data into an unex buffer
|
* But in ELAN cases, we save the data into an unex buffer
|
||||||
* if the recv descriptor is not posted (for too long) (TODO).
|
* if the recv descriptor is not posted (for too long) (TODO).
|
||||||
* We then need to copy from unex_buffer to application buffer */
|
* We then need to copy from unex_buffer to application buffer */
|
||||||
if(header->hdr_frag_length > 0) {
|
if(header->hdr_frag.hdr_frag_length > 0) {
|
||||||
|
|
||||||
struct iovec iov;
|
struct iovec iov;
|
||||||
ompi_proc_t *proc;
|
ompi_proc_t *proc;
|
||||||
@ -377,8 +378,11 @@ mca_ptl_elan_matched (mca_ptl_t * ptl,
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
frag->frag_base.frag_owner->ptl_recv_progress
|
frag->frag_base.frag_owner->ptl_recv_progress (
|
||||||
(frag->frag_base.frag_owner, request, frag->frag_base.frag_size);
|
frag->frag_base.frag_owner,
|
||||||
|
request,
|
||||||
|
frag->frag_base.frag_size,
|
||||||
|
frag->frag_base.frag_size);
|
||||||
|
|
||||||
/* FIXME:
|
/* FIXME:
|
||||||
* To support the required ACK, do not return
|
* To support the required ACK, do not return
|
||||||
|
@ -124,7 +124,7 @@ mca_ptl_elan_alloc_send_desc (struct mca_ptl_t *ptl_ptr,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
desc = (mca_ptl_elan_send_frag_t *) item;
|
desc = (mca_ptl_elan_send_frag_t *) item;
|
||||||
desc->desc->desc_type = MCA_PTL_ELAN_QDMA_DESC;
|
desc->desc->desc_type = MCA_PTL_ELAN_DESC_QDMA;
|
||||||
}
|
}
|
||||||
desc->desc->req = (struct mca_pml_base_send_request_t *)sendreq;
|
desc->desc->req = (struct mca_pml_base_send_request_t *)sendreq;
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ typedef struct mca_ptl_elan_send_frag_t mca_ptl_elan_send_frag_t;
|
|||||||
* ELAN received fragment derived type.
|
* ELAN received fragment derived type.
|
||||||
*/
|
*/
|
||||||
struct mca_ptl_elan_recv_frag_t {
|
struct mca_ptl_elan_recv_frag_t {
|
||||||
mca_ptl_base_recv_frag_t frag_base;
|
mca_ptl_base_recv_frag_t frag_recv;
|
||||||
size_t frag_hdr_cnt;
|
size_t frag_hdr_cnt;
|
||||||
size_t frag_msg_cnt;
|
size_t frag_msg_cnt;
|
||||||
int frag_progressed;
|
int frag_progressed;
|
||||||
|
@ -26,6 +26,7 @@ mca_ptl_elan_init_qdma_desc (struct ompi_ptl_elan_qdma_desc_t *desc,
|
|||||||
int destvp;
|
int destvp;
|
||||||
int size_out;
|
int size_out;
|
||||||
int size_in;
|
int size_in;
|
||||||
|
int rc = OMPI_SUCCESS;
|
||||||
|
|
||||||
START_FUNC();
|
START_FUNC();
|
||||||
|
|
||||||
@ -92,7 +93,7 @@ mca_ptl_elan_init_qdma_desc (struct ompi_ptl_elan_qdma_desc_t *desc,
|
|||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
ompi_output (0, "[%s:%d] Unable to pack data\n",
|
ompi_output (0, "[%s:%d] Unable to pack data\n",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
return OMPI_ERROR;
|
return;
|
||||||
}
|
}
|
||||||
size_out = iov.iov_len;
|
size_out = iov.iov_len;
|
||||||
} else {
|
} else {
|
||||||
@ -158,7 +159,7 @@ mca_ptl_elan_start_desc (mca_ptl_elan_send_frag_t * desc,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if (desc->desc->desc_type == MCA_PTL_ELAN_QDMA_DESC) {
|
if (desc->desc->desc_type == MCA_PTL_ELAN_DESC_QDMA) {
|
||||||
struct ompi_ptl_elan_qdma_desc_t *qdma;
|
struct ompi_ptl_elan_qdma_desc_t *qdma;
|
||||||
|
|
||||||
qdma = (ompi_ptl_elan_qdma_desc_t *)desc->desc;
|
qdma = (ompi_ptl_elan_qdma_desc_t *)desc->desc;
|
||||||
@ -197,10 +198,10 @@ mca_ptl_elan_data_frag (struct mca_ptl_elan_t *ptl,
|
|||||||
ompi_list_item_t *item;
|
ompi_list_item_t *item;
|
||||||
mca_pml_base_recv_request_t *request;
|
mca_pml_base_recv_request_t *request;
|
||||||
|
|
||||||
int rc;
|
bool matched;
|
||||||
|
int rc = OMPI_SUCCESS;
|
||||||
|
|
||||||
rc = OMPI_FREE_LIST_GET (&mca_ptl_elan_module.elan_recv_frags_free,
|
OMPI_FREE_LIST_GET (&mca_ptl_elan_module.elan_recv_frags_free, item, rc);
|
||||||
item, rc);
|
|
||||||
|
|
||||||
while (OMPI_SUCCESS != rc) {
|
while (OMPI_SUCCESS != rc) {
|
||||||
|
|
||||||
@ -208,7 +209,7 @@ mca_ptl_elan_data_frag (struct mca_ptl_elan_t *ptl,
|
|||||||
ompi_output (0,
|
ompi_output (0,
|
||||||
"[%s:%d] Retry to allocate a recv fragment",
|
"[%s:%d] Retry to allocate a recv fragment",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
rc = OMPI_FREE_LIST_GET (&mca_ptl_elan_module.elan_recv_frags_free,
|
OMPI_FREE_LIST_GET (&mca_ptl_elan_module.elan_recv_frags_free,
|
||||||
item, rc);
|
item, rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,8 +234,7 @@ mca_ptl_elan_data_frag (struct mca_ptl_elan_t *ptl,
|
|||||||
/* Taking the data starting point be default */
|
/* Taking the data starting point be default */
|
||||||
recv_frag->frag_recv.frag_base.frag_addr =
|
recv_frag->frag_recv.frag_base.frag_addr =
|
||||||
(char *) header + sizeof (mca_ptl_base_header_t);
|
(char *) header + sizeof (mca_ptl_base_header_t);
|
||||||
recv_frag->frag_recv.frag_base.frag_size =
|
recv_frag->frag_recv.frag_base.frag_size = header->hdr_frag.hdr_frag_length;
|
||||||
header->hdr_frag.hdr_frag_length;
|
|
||||||
|
|
||||||
/* match with preposted requests */
|
/* match with preposted requests */
|
||||||
matched = mca_ptl_base_recv_frag_match (
|
matched = mca_ptl_base_recv_frag_match (
|
||||||
@ -294,7 +294,7 @@ mca_ptl_elan_drain_recv (mca_ptl_elan_module_1_0_0_t * emp)
|
|||||||
OMPI_LOCK (&queue->rx_lock);
|
OMPI_LOCK (&queue->rx_lock);
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
rc = (int *) (&rxq->qr_doneWord);
|
rc = (*(int *) (&rxq->qr_doneWord));
|
||||||
#else
|
#else
|
||||||
rc = elan4_pollevent_word (ctx, &rxq->qr_doneWord, 1);
|
rc = elan4_pollevent_word (ctx, &rxq->qr_doneWord, 1);
|
||||||
#endif
|
#endif
|
||||||
@ -402,7 +402,7 @@ mca_ptl_elan_update_send (mca_ptl_elan_module_1_0_0_t * emp)
|
|||||||
desc = (mca_ptl_elan_send_frag_t *)
|
desc = (mca_ptl_elan_send_frag_t *)
|
||||||
ompi_list_get_first (&queue->tx_desc);
|
ompi_list_get_first (&queue->tx_desc);
|
||||||
#if 1
|
#if 1
|
||||||
rc = (int *) (&desc->desc->main_doneWord);
|
rc = * ((int *) (&desc->desc->main_doneWord));
|
||||||
#else
|
#else
|
||||||
/* Poll the completion event for 1usec */
|
/* Poll the completion event for 1usec */
|
||||||
rc = elan4_pollevent_word(ctx, &desc->desc->main_doneWord, 1);
|
rc = elan4_pollevent_word(ctx, &desc->desc->main_doneWord, 1);
|
||||||
@ -414,14 +414,15 @@ mca_ptl_elan_update_send (mca_ptl_elan_module_1_0_0_t * emp)
|
|||||||
desc = (mca_ptl_elan_send_frag_t *)
|
desc = (mca_ptl_elan_send_frag_t *)
|
||||||
ompi_list_remove_first (&queue->tx_desc);
|
ompi_list_remove_first (&queue->tx_desc);
|
||||||
req = desc->desc->req;
|
req = desc->desc->req;
|
||||||
header = (mca_ptl_base_header_t *)&desc->desc->buff[0];
|
header = (mca_ptl_base_header_t *)&
|
||||||
|
((ompi_ptl_elan_qdma_desc_t *)desc->desc)->buff[0];
|
||||||
|
|
||||||
if(NULL == req) { /* An ack descriptor */
|
if(NULL == req) { /* An ack descriptor */
|
||||||
OMPI_FREE_LIST_RETURN (&queue->tx_desc_free,
|
OMPI_FREE_LIST_RETURN (&queue->tx_desc_free,
|
||||||
(ompi_list_item_t *) desc);
|
(ompi_list_item_t *) desc);
|
||||||
} else if (0 == (header->hdr_common.hdr_flags
|
} else if (0 == (header->hdr_common.hdr_flags
|
||||||
& MCA_PTL_FLAGS_ACK_MATCHED)
|
& MCA_PTL_FLAGS_ACK_MATCHED)
|
||||||
|| mca_pml_base_send_request_matched(request)) {
|
|| mca_pml_base_send_request_matched(req)) {
|
||||||
/* XXX: NO_NEED_FOR_MATCH || ALREADY_MATCHED */
|
/* XXX: NO_NEED_FOR_MATCH || ALREADY_MATCHED */
|
||||||
|
|
||||||
if(fetchNset (&desc->frag_progressed, 1) == 0) {
|
if(fetchNset (&desc->frag_progressed, 1) == 0) {
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user