1
1

Merge pull request #1935 from hjelmn/persistent_fix

pml/ob1: reset req_bytes_packed on start
Этот коммит содержится в:
Nathan Hjelm 2016-08-08 14:17:13 -06:00 коммит произвёл GitHub
родитель b90da992c8 889dd32806
Коммит e4d7ea75a9
5 изменённых файлов: 48 добавлений и 41 удалений

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

@ -1,3 +1,4 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/* /*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology * University Research and Technology
@ -10,6 +11,8 @@
* Copyright (c) 2004-2005 The Regents of the University of California. * Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved. * All rights reserved.
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2016 Los Alamos National Security, LLC. All rights
* reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -87,20 +90,21 @@ OMPI_DECLSPEC OBJ_CLASS_DECLARATION(mca_pml_base_recv_request_t);
*/ */
#define MCA_PML_BASE_RECV_START( request ) \ #define MCA_PML_BASE_RECV_START( request ) \
do { \ do { \
(request)->req_pml_complete = false; \ (request)->req_bytes_packed = 0; \
(request)->req_base.req_pml_complete = false; \
\ \
/* always set the req_status.MPI_TAG to ANY_TAG before starting the \ /* always set the req_status.MPI_TAG to ANY_TAG before starting the \
* request. This field is used if cancelled to find out if the request \ * request. This field is used if cancelled to find out if the request \
* has been matched or not. \ * has been matched or not. \
*/ \ */ \
(request)->req_ompi.req_status.MPI_SOURCE = OMPI_ANY_SOURCE; \ (request)->req_base.req_ompi.req_status.MPI_SOURCE = OMPI_ANY_SOURCE; \
(request)->req_ompi.req_status.MPI_TAG = OMPI_ANY_TAG; \ (request)->req_base.req_ompi.req_status.MPI_TAG = OMPI_ANY_TAG; \
(request)->req_ompi.req_status.MPI_ERROR = OMPI_SUCCESS; \ (request)->req_base.req_ompi.req_status.MPI_ERROR = OMPI_SUCCESS; \
(request)->req_ompi.req_status._ucount = 0; \ (request)->req_base.req_ompi.req_status._ucount = 0; \
(request)->req_ompi.req_status._cancelled = 0; \ (request)->req_base.req_ompi.req_status._cancelled = 0; \
\ \
(request)->req_ompi.req_complete = REQUEST_PENDING; \ (request)->req_base.req_ompi.req_complete = REQUEST_PENDING; \
(request)->req_ompi.req_state = OMPI_REQUEST_ACTIVE; \ (request)->req_base.req_ompi.req_state = OMPI_REQUEST_ACTIVE; \
} while (0) } while (0)
/** /**

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

@ -1,3 +1,4 @@
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
/* /*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology * University Research and Technology
@ -12,6 +13,8 @@
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. * Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2015 Research Organization for Information Science * Copyright (c) 2015 Research Organization for Information Science
* and Technology (RIST). All rights reserved. * and Technology (RIST). All rights reserved.
* Copyright (c) 2016 Los Alamos National Security, LLC. All rights
* reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
@ -110,6 +113,12 @@ OMPI_DECLSPEC OBJ_CLASS_DECLARATION( mca_pml_base_send_request_t );
} \ } \
} }
#define MCA_PML_BASE_SEND_REQUEST_RESET(request) \
if ((request)->req_bytes_packed > 0) { \
opal_convertor_set_position(&(sendreq)->req_send.req_base.req_convertor, \
&(size_t){0}); \
}
/** /**
* Mark the request as started from the PML base point of view. * Mark the request as started from the PML base point of view.
* *
@ -118,10 +127,11 @@ OMPI_DECLSPEC OBJ_CLASS_DECLARATION( mca_pml_base_send_request_t );
#define MCA_PML_BASE_SEND_START( request ) \ #define MCA_PML_BASE_SEND_START( request ) \
do { \ do { \
(request)->req_pml_complete = false; \ (request)->req_base.req_pml_complete = false; \
(request)->req_ompi.req_complete = REQUEST_PENDING; \ (request)->req_base.req_ompi.req_complete = REQUEST_PENDING; \
(request)->req_ompi.req_state = OMPI_REQUEST_ACTIVE; \ (request)->req_base.req_ompi.req_state = OMPI_REQUEST_ACTIVE; \
(request)->req_ompi.req_status._cancelled = 0; \ (request)->req_base.req_ompi.req_status._cancelled = 0; \
MCA_PML_BASE_SEND_REQUEST_RESET(request); \
} while (0) } while (0)
/** /**

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

@ -193,7 +193,7 @@ mca_pml_ob1_imrecv( void *buf,
recvreq->req_pending = false; recvreq->req_pending = false;
recvreq->req_ack_sent = false; recvreq->req_ack_sent = false;
MCA_PML_BASE_RECV_START(&recvreq->req_recv.req_base); MCA_PML_BASE_RECV_START(&recvreq->req_recv);
/* Note - sequence number already assigned */ /* Note - sequence number already assigned */
recvreq->req_recv.req_base.req_sequence = seq; recvreq->req_recv.req_base.req_sequence = seq;
@ -285,7 +285,7 @@ mca_pml_ob1_mrecv( void *buf,
recvreq->req_rdma_idx = 0; recvreq->req_rdma_idx = 0;
recvreq->req_pending = false; recvreq->req_pending = false;
MCA_PML_BASE_RECV_START(&recvreq->req_recv.req_base); MCA_PML_BASE_RECV_START(&recvreq->req_recv);
/* Note - sequence number already assigned */ /* Note - sequence number already assigned */
recvreq->req_recv.req_base.req_sequence = seq; recvreq->req_recv.req_base.req_sequence = seq;

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

@ -13,7 +13,7 @@
* Copyright (c) 2008 UT-Battelle, LLC. All rights reserved. * Copyright (c) 2008 UT-Battelle, LLC. All rights reserved.
* Copyright (c) 2011 Sandia National Laboratories. All rights reserved. * Copyright (c) 2011 Sandia National Laboratories. All rights reserved.
* Copyright (c) 2012-2015 NVIDIA Corporation. All rights reserved. * Copyright (c) 2012-2015 NVIDIA Corporation. All rights reserved.
* Copyright (c) 2011-2015 Los Alamos National Security, LLC. All rights * Copyright (c) 2011-2016 Los Alamos National Security, LLC. All rights
* reserved. * reserved.
* Copyright (c) 2012 FUJITSU LIMITED. All rights reserved. * Copyright (c) 2012 FUJITSU LIMITED. All rights reserved.
* Copyright (c) 2014-2015 Research Organization for Information Science * Copyright (c) 2014-2015 Research Organization for Information Science
@ -70,27 +70,25 @@ void mca_pml_ob1_recv_request_process_pending(void)
static int mca_pml_ob1_recv_request_free(struct ompi_request_t** request) static int mca_pml_ob1_recv_request_free(struct ompi_request_t** request)
{ {
mca_pml_ob1_recv_request_t* recvreq = *(mca_pml_ob1_recv_request_t**)request; mca_pml_ob1_recv_request_t* recvreq = *(mca_pml_ob1_recv_request_t**)request;
assert (false == recvreq->req_recv.req_base.req_free_called);
if(false == recvreq->req_recv.req_base.req_free_called){ recvreq->req_recv.req_base.req_free_called = true;
PERUSE_TRACE_COMM_EVENT( PERUSE_COMM_REQ_NOTIFY,
&(recvreq->req_recv.req_base), PERUSE_RECV );
recvreq->req_recv.req_base.req_free_called = true; if( true == recvreq->req_recv.req_base.req_pml_complete ) {
PERUSE_TRACE_COMM_EVENT( PERUSE_COMM_REQ_NOTIFY, /* make buffer defined when the request is compeleted,
&(recvreq->req_recv.req_base), PERUSE_RECV ); and before releasing the objects. */
MEMCHECKER(
if( true == recvreq->req_recv.req_base.req_pml_complete ) { memchecker_call(&opal_memchecker_base_mem_defined,
/* make buffer defined when the request is compeleted, recvreq->req_recv.req_base.req_addr,
and before releasing the objects. */ recvreq->req_recv.req_base.req_count,
MEMCHECKER( recvreq->req_recv.req_base.req_datatype);
memchecker_call(&opal_memchecker_base_mem_defined, );
recvreq->req_recv.req_base.req_addr,
recvreq->req_recv.req_base.req_count,
recvreq->req_recv.req_base.req_datatype);
);
MCA_PML_OB1_RECV_REQUEST_RETURN( recvreq );
}
MCA_PML_OB1_RECV_REQUEST_RETURN( recvreq );
} }
*request = MPI_REQUEST_NULL; *request = MPI_REQUEST_NULL;
return OMPI_SUCCESS; return OMPI_SUCCESS;
} }
@ -1171,7 +1169,7 @@ void mca_pml_ob1_recv_req_start(mca_pml_ob1_recv_request_t *req)
req->req_pending = false; req->req_pending = false;
req->req_ack_sent = false; req->req_ack_sent = false;
MCA_PML_BASE_RECV_START(&req->req_recv.req_base); MCA_PML_BASE_RECV_START(&req->req_recv);
OB1_MATCHING_LOCK(&ob1_comm->matching_lock); OB1_MATCHING_LOCK(&ob1_comm->matching_lock);
/** /**

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

@ -12,7 +12,7 @@
* All rights reserved. * All rights reserved.
* Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
* Copyright (c) 2011-2012 NVIDIA Corporation. All rights reserved. * Copyright (c) 2011-2012 NVIDIA Corporation. All rights reserved.
* Copyright (c) 2011-2015 Los Alamos National Security, LLC. All rights * Copyright (c) 2011-2016 Los Alamos National Security, LLC. All rights
* reserved. * reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
@ -156,12 +156,7 @@ get_request_from_send_pending(mca_pml_ob1_send_pending_t *type)
} }
#define MCA_PML_OB1_SEND_REQUEST_RESET(sendreq) \ #define MCA_PML_OB1_SEND_REQUEST_RESET(sendreq) \
if ((sendreq)->req_send.req_bytes_packed > 0) { \ MCA_PML_BASE_SEND_REQUEST_RESET(&(sendreq)->req_send)
size_t _position = 0; \
opal_convertor_set_position(&(sendreq)->req_send.req_base.req_convertor, \
&_position); \
assert( 0 == _position ); \
}
static inline void mca_pml_ob1_free_rdma_resources (mca_pml_ob1_send_request_t* sendreq) static inline void mca_pml_ob1_free_rdma_resources (mca_pml_ob1_send_request_t* sendreq)
{ {
@ -460,7 +455,7 @@ mca_pml_ob1_send_request_start_seq (mca_pml_ob1_send_request_t* sendreq, mca_bml
sendreq->req_pending = MCA_PML_OB1_SEND_PENDING_NONE; sendreq->req_pending = MCA_PML_OB1_SEND_PENDING_NONE;
sendreq->req_send.req_base.req_sequence = seqn; sendreq->req_send.req_base.req_sequence = seqn;
MCA_PML_BASE_SEND_START( &sendreq->req_send.req_base ); MCA_PML_BASE_SEND_START( &sendreq->req_send );
for(size_t i = 0; i < mca_bml_base_btl_array_get_size(&endpoint->btl_eager); i++) { for(size_t i = 0; i < mca_bml_base_btl_array_get_size(&endpoint->btl_eager); i++) {
mca_bml_base_btl_t* bml_btl; mca_bml_base_btl_t* bml_btl;