-- Fix known bugs in data integrity.
This commit was SVN r2441.
Этот коммит содержится в:
родитель
03096df34a
Коммит
d03f3b4d36
@ -148,7 +148,10 @@ mca_ptl_elan_finalize (struct mca_ptl_base_module_t *ptl)
|
||||
struct mca_ptl_elan_module_t *elan_ptl;
|
||||
|
||||
START_FUNC(PTL_ELAN_DEBUG_FIN);
|
||||
#if 0
|
||||
|
||||
/* FIXME: move from ptl_elan_component_close()
|
||||
all the ptl_elan_finalize related code here */
|
||||
#if 0
|
||||
elan_ptl = (struct mca_ptl_elan_module_t *) ptl;
|
||||
|
||||
/* XXX: Free all the lists, etc, hanged over PTL
|
||||
|
@ -101,10 +101,11 @@ mca_ptl_elan_component_open (void)
|
||||
mca_ptl_elan_module.super.ptl_exclusivity =
|
||||
mca_ptl_elan_param_register_int ("exclusivity", 0);
|
||||
|
||||
length = OMPI_PTL_ELAN_MAX_QSIZE - sizeof(mca_ptl_base_header_t);
|
||||
/*length = OMPI_PTL_ELAN_MAX_QSIZE - sizeof(mca_ptl_base_header_t);*/
|
||||
length = 128 - sizeof(mca_ptl_base_header_t);
|
||||
param1 = mca_ptl_elan_param_register_int ("first_frag_size", length);
|
||||
param2 = mca_ptl_elan_param_register_int ("min_frag_size", length);
|
||||
param3 = mca_ptl_elan_param_register_int ("max_frag_size", 2<<31);
|
||||
param3 = mca_ptl_elan_param_register_int ("max_frag_size", (1<<31));
|
||||
|
||||
/* Correct these if user give violent parameters */
|
||||
mca_ptl_elan_module.super.ptl_first_frag_size =
|
||||
@ -112,14 +113,14 @@ mca_ptl_elan_component_open (void)
|
||||
mca_ptl_elan_module.super.ptl_min_frag_size =
|
||||
OMPI_PTL_ELAN_GET_MAX(param2, length);
|
||||
mca_ptl_elan_module.super.ptl_max_frag_size =
|
||||
OMPI_PTL_ELAN_GET_MIN(param3, 2<<31);
|
||||
OMPI_PTL_ELAN_GET_MIN(param3, (1<<31));
|
||||
|
||||
/* initialize state */
|
||||
elan_mp->elan_local = NULL;
|
||||
elan_mp->num_modules = 0;
|
||||
elan_mp->modules = NULL;
|
||||
elan_mp->free_list_num = 32;
|
||||
elan_mp->free_list_max = 128;
|
||||
elan_mp->free_list_num = 32;
|
||||
elan_mp->free_list_inc = 32;
|
||||
|
||||
/* initialize objects*/
|
||||
|
@ -320,6 +320,10 @@ mca_ptl_elan_init_qdma_desc (struct mca_ptl_elan_send_frag_t *frag,
|
||||
*size = size_out;
|
||||
hdr->hdr_frag.hdr_frag_length = size_out;
|
||||
|
||||
/* FIXME: change this ugly fix for get */
|
||||
hdr->hdr_frag.hdr_dst_ptr.lval = elan4_main2elan(
|
||||
ctx, (char *)pml_req->req_base.req_addr + size_out);
|
||||
|
||||
/* TODO:
|
||||
* For now just save the information to the provided header
|
||||
* Later will use the inline header to report the progress */
|
||||
@ -596,9 +600,11 @@ mca_ptl_elan_init_get_desc (mca_ptl_elan_module_t *ptl,
|
||||
destvp = ptl_peer->peer_vp;
|
||||
size_in = *size;
|
||||
|
||||
/* XXX: If doing get, the first frag will be left as 0-byte */
|
||||
/* XXX: Match this from the sender addr after the first frag */
|
||||
desc->src_elan_addr = recv_header->hdr_frag.hdr_dst_ptr.lval;
|
||||
desc->dst_elan_addr = elan4_main2elan(ctx, pml_req->req_base.req_addr);
|
||||
|
||||
/* XXX: on recv side, from the addr after the first frag */
|
||||
desc->dst_elan_addr = hdr->hdr_ack.hdr_dst_addr.lval;
|
||||
desc->desc_buff = hdr;
|
||||
|
||||
/* FIXME:
|
||||
@ -877,7 +883,7 @@ mca_ptl_elan_get_with_ack ( mca_ptl_base_module_t * ptl,
|
||||
mca_ptl_elan_module_t *elan_ptl;
|
||||
int destvp;
|
||||
int flags;
|
||||
size_t remain_len;
|
||||
size_t remain_len, recv_len;
|
||||
|
||||
START_FUNC(PTL_ELAN_DEBUG_ACK);
|
||||
|
||||
@ -889,10 +895,12 @@ mca_ptl_elan_get_with_ack ( mca_ptl_base_module_t * ptl,
|
||||
frag->desc->desc_type = MCA_PTL_ELAN_DESC_PUT;
|
||||
gdesc = (ompi_ptl_elan_putget_desc_t *)frag->desc;
|
||||
hdr = (mca_ptl_base_header_t *) &frag->frag_base.frag_header;
|
||||
recv_len =
|
||||
recv_frag->frag_recv.frag_base.frag_header.hdr_frag.hdr_frag_length;
|
||||
|
||||
/* XXX: since send_frag provides a header inside,
|
||||
* no need to allocate a QDMA descriptor w/ buff */
|
||||
remain_len = request->req_bytes_packed - request->req_bytes_received;
|
||||
remain_len = request->req_bytes_packed - recv_len;
|
||||
hdr->hdr_common.hdr_type = MCA_PTL_HDR_TYPE_FIN_ACK;
|
||||
hdr->hdr_common.hdr_flags= 0;
|
||||
hdr->hdr_common.hdr_size = sizeof(mca_ptl_base_ack_header_t);
|
||||
@ -902,8 +910,9 @@ mca_ptl_elan_get_with_ack ( mca_ptl_base_module_t * ptl,
|
||||
hdr->hdr_ack.hdr_dst_match.pval = request;
|
||||
hdr->hdr_ack.hdr_dst_addr.pval = 0;
|
||||
hdr->hdr_ack.hdr_dst_addr.lval = elan4_main2elan(
|
||||
elan_ptl->ptl_elan_ctx, request->req_base.req_addr);
|
||||
hdr->hdr_ack.hdr_dst_size = remain_len;
|
||||
elan_ptl->ptl_elan_ctx,
|
||||
((char*)request->req_base.req_addr + recv_len));
|
||||
hdr->hdr_ack.hdr_dst_size = remain_len + recv_len;
|
||||
|
||||
mca_ptl_elan_init_get_desc (elan_ptl, frag, recv_frag,
|
||||
request, hdr, &remain_len, flags);
|
||||
@ -923,7 +932,8 @@ mca_ptl_elan_get_with_ack ( mca_ptl_base_module_t * ptl,
|
||||
frag->desc->desc_status = MCA_PTL_ELAN_DESC_LOCAL;
|
||||
frag->frag_base.frag_owner= ptl;
|
||||
frag->frag_base.frag_peer = recv_frag->frag_recv.frag_base.frag_peer;
|
||||
frag->frag_base.frag_addr = request->req_base.req_addr;/*final buff*/
|
||||
/* FIXME: final buff*/
|
||||
frag->frag_base.frag_addr = request->req_base.req_addr;
|
||||
frag->frag_base.frag_size = remain_len;
|
||||
frag->frag_progressed = 0;
|
||||
|
||||
@ -952,12 +962,15 @@ mca_ptl_elan_start_ack ( mca_ptl_base_module_t * ptl,
|
||||
mca_ptl_elan_module_t *elan_ptl;
|
||||
ELAN4_CTX *ctx;
|
||||
|
||||
int recv_len;
|
||||
int destvp;
|
||||
|
||||
START_FUNC(PTL_ELAN_DEBUG_ACK);
|
||||
|
||||
destvp = ((mca_ptl_elan_peer_t *)
|
||||
recv_frag->frag_recv.frag_base.frag_peer)->peer_vp;
|
||||
recv_len =
|
||||
recv_frag->frag_recv.frag_base.frag_header.hdr_frag.hdr_frag_length;
|
||||
|
||||
elan_ptl = (mca_ptl_elan_module_t *) ptl;
|
||||
desc->desc->desc_type = MCA_PTL_ELAN_DESC_QDMA;
|
||||
@ -979,19 +992,21 @@ mca_ptl_elan_start_ack ( mca_ptl_base_module_t * ptl,
|
||||
hdr->hdr_ack.hdr_dst_match.pval = request;
|
||||
|
||||
/* FIXME: this needs to be some offsete from the base addr
|
||||
* posted buffer size is the leftover */
|
||||
* posted buffer size is the leftover. Length is
|
||||
* recv_frag->frag_recv.frag_base.frag_header.hdr_frag.hdr_frag_length;
|
||||
*/
|
||||
hdr->hdr_ack.hdr_dst_addr.pval = 0;
|
||||
hdr->hdr_ack.hdr_dst_addr.lval = elan4_main2elan(ctx,
|
||||
request->req_base.req_addr);
|
||||
hdr->hdr_ack.hdr_dst_size =
|
||||
request->req_bytes_packed - request->req_bytes_received;
|
||||
(char *)request->req_base.req_addr + recv_len);
|
||||
hdr->hdr_ack.hdr_dst_size = request->req_bytes_packed - recv_len;
|
||||
|
||||
LOG_PRINT(PTL_ELAN_DEBUG_ACK, "desc %p hdr %p packed %d received %d\n",
|
||||
desc, hdr, request->req_bytes_packed, recv_len);
|
||||
|
||||
#if OMPI_PTL_ELAN_COMP_QUEUE
|
||||
/* FIXME: save frag descriptor somewhere in the header */
|
||||
((mca_ptl_elan_ack_header_t *) hdr)->frag = desc;
|
||||
|
||||
LOG_PRINT(PTL_ELAN_DEBUG_ACK, "desc %p hdr %p \n", desc, hdr);
|
||||
|
||||
#if OMPI_PTL_ELAN_COMP_QUEUE
|
||||
/* XXX: Need to have a way to differentiate different frag */
|
||||
qdma->comp_event->ev_Params[1] = elan4_alloccq_space (ctx, 8, CQ_Size8K);
|
||||
qdma->comp_event->ev_CountAndType = E4_EVENT_INIT_VALUE(-32,
|
||||
@ -1056,7 +1071,7 @@ mca_ptl_elan_drain_recv (struct mca_ptl_elan_module_t *ptl)
|
||||
ELAN_CTX *ctx;
|
||||
int rc;
|
||||
|
||||
START_FUNC(PTL_ELAN_DEBUG_THREAD);
|
||||
START_FUNC(PTL_ELAN_DEBUG_NONE);
|
||||
queue = ptl->queue;
|
||||
rxq = queue->rxq;
|
||||
ctx = ptl->ptl_elan_ctx;
|
||||
@ -1137,7 +1152,7 @@ ptl_elan_recv_comp:
|
||||
goto ptl_elan_recv_comp;
|
||||
#endif
|
||||
|
||||
END_FUNC(PTL_ELAN_DEBUG_THREAD);
|
||||
END_FUNC(PTL_ELAN_DEBUG_NONE);
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
@ -1230,7 +1245,7 @@ ptl_elan_send_comp:
|
||||
#if OMPI_PTL_ELAN_THREADING
|
||||
goto ptl_elan_send_comp;
|
||||
#endif
|
||||
|
||||
END_FUNC(PTL_ELAN_DEBUG_THREAD);
|
||||
#else
|
||||
ctx = ptl->ptl_elan_ctx;
|
||||
while (ompi_list_get_size (&ptl->send_frags) > 0) {
|
||||
@ -1259,7 +1274,6 @@ ptl_elan_send_comp:
|
||||
} /* end of the while loop */
|
||||
#endif
|
||||
|
||||
END_FUNC(PTL_ELAN_DEBUG_THREAD);
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -52,8 +52,7 @@
|
||||
#define PTL_ELAN_DEBUG_GET (0x400)
|
||||
#define PTL_ELAN_DEBUG_CHAIN (0x800)
|
||||
|
||||
#define PTL_ELAN_DEBUG_FLAG \
|
||||
(PTL_ELAN_DEBUG_FIN | PTL_ELAN_DEBUG_THREAD)
|
||||
#define PTL_ELAN_DEBUG_FLAG (PTL_ELAN_DEBUG_NONE)
|
||||
|
||||
#define START_FUNC(flag) \
|
||||
do { \
|
||||
@ -83,22 +82,13 @@ do { \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* PTL_ELAN related MACROS, expose some as configurable options if needed */
|
||||
#define OMPI_PTL_ELAN_ENABLE_GET (0)
|
||||
#define OMPI_PTL_ELAN_COMP_QUEUE (1)
|
||||
#define OMPI_PTL_ELAN_THREADING \
|
||||
(OMPI_PTL_ELAN_COMP_QUEUE && OMPI_HAVE_POSIX_THREADS)
|
||||
|
||||
#define OMPI_PTL_ELAN_MAX_QSIZE (2048)
|
||||
#define OMPI_PTL_ELAN_MAX_QSLOTS (128)
|
||||
#define OMPI_PTL_ELAN_LOST_QSLOTS (1)
|
||||
|
||||
#define OMPI_PTL_ELAN_MAX_QDESCS (128)
|
||||
#define OMPI_PTL_ELAN_NUM_QDESCS (2)
|
||||
#define OMPI_PTL_ELAN_QDMA_RETRY (16)
|
||||
|
||||
#define OMPI_PTL_ELAN_MAX_PUTGET (32)
|
||||
#define OMPI_PTL_ELAN_NUM_PUTGET (1)
|
||||
#define OMPI_PTL_ELAN_QDMA_RETRY (16)
|
||||
#define OMPI_PTL_ELAN_MAX_PGDESC (8)
|
||||
|
||||
#define OMPI_PTL_ELAN_FASTPATH (0x1)
|
||||
@ -107,6 +97,15 @@ do { \
|
||||
#define OMPI_PTL_ELAN_GET_MIN(a,b) ((a<b)? a:b)
|
||||
#define OMPI_PTL_ELAN_ALIGNUP(x,a) (((unsigned int)(x) + ((a)-1)) & (-(a)))
|
||||
|
||||
/* XXX: Potentially configurable parameters */
|
||||
#define OMPI_PTL_ELAN_NUM_QDESCS (16)
|
||||
#define OMPI_PTL_ELAN_NUM_PUTGET (8)
|
||||
|
||||
#define OMPI_PTL_ELAN_ENABLE_GET (1)
|
||||
#define OMPI_PTL_ELAN_COMP_QUEUE (0)
|
||||
#define OMPI_PTL_ELAN_THREADING \
|
||||
(OMPI_PTL_ELAN_COMP_QUEUE && OMPI_HAVE_POSIX_THREADS)
|
||||
|
||||
#if (QSNETLIBS_VERSION_CODE <= QSNETLIBS_VERSION(1,6,6))
|
||||
#define OMPI_PTL_ELAN_ALLOC_CMDQ elan4_alloc_cmdq
|
||||
#define OMPI_PTL_ELAN_PROBE_CMDQ elan4_probe_cmdq
|
||||
|
@ -8,8 +8,8 @@
|
||||
#include "test_util.h"
|
||||
|
||||
#define MYBUFSIZE (4*1024*1024)
|
||||
#define CHECK 0
|
||||
#define PONG 0
|
||||
#define CHECK 1
|
||||
#define PONG 1
|
||||
|
||||
char s_buf[MYBUFSIZE];
|
||||
char r_buf[MYBUFSIZE];
|
||||
@ -50,7 +50,7 @@ main (int argc, char *argv[])
|
||||
|
||||
/* touch the data */
|
||||
for (i = 0; i < size; i++) {
|
||||
s_buf[i] = 'A';
|
||||
s_buf[i] = i;
|
||||
}
|
||||
|
||||
fprintf(stderr, "[proc%d:%s:%d] done with init, to loop %d \n",
|
||||
@ -72,9 +72,9 @@ main (int argc, char *argv[])
|
||||
|
||||
if (CHECK && myid != 0) {
|
||||
for (j=0; j < size; j ++) {
|
||||
if (r_buf[j] != 'A') {
|
||||
fprintf(stderr, "[proc%d:%s] error from byte %d \n",
|
||||
myid, __FUNCTION__, j);
|
||||
if (r_buf[j] != j) {
|
||||
fprintf(stderr, "[proc%d:%s] byte %d error, %02X \n",
|
||||
myid, __FUNCTION__, j, r_buf[j]);
|
||||
break;
|
||||
} else {
|
||||
r_buf[j] = '0';
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user