Refs trac:250
This commit essentially caches the invoking comm/win/file on the ompi_request_t. This, paired with the req_type field, allows us to retrieve the invoking MPI object and invoke the proper errhandler. The patch is missing most updates for the MPI-2 one-sided stuff (i.e., the patch mainly fixes comms and files); I didn't really understand that code and didn't want to hazard trying to figure it out when Brian can probably do it much more quickly. So #250 will still stay open, pending MPI-2 one-sided updates for this stuff. This commit was SVN r12339. The following Trac tickets were found above: Ticket 250 --> https://svn.open-mpi.org/trac/ompi/ticket/250
Этот коммит содержится в:
родитель
e02114dcf3
Коммит
020efdf1f9
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* Copyright (c) 2004-2006 The Regents of the University of California.
|
* Copyright (c) 2004-2006 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -35,6 +36,9 @@ mca_pml_cm_start(size_t count, ompi_request_t** requests)
|
|||||||
for (i = 0 ; i < count ; i++) {
|
for (i = 0 ; i < count ; i++) {
|
||||||
mca_pml_cm_request_t *pml_request =
|
mca_pml_cm_request_t *pml_request =
|
||||||
(mca_pml_cm_request_t*)requests[i];
|
(mca_pml_cm_request_t*)requests[i];
|
||||||
|
if (OMPI_REQUEST_PML != requests[i]->req_type) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (NULL == pml_request) {
|
if (NULL == pml_request) {
|
||||||
/* opal_output(0, "hmm, null request!\n"); */
|
/* opal_output(0, "hmm, null request!\n"); */
|
||||||
continue;
|
continue;
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* Copyright (c) 2004-2006 The Regents of the University of California.
|
* Copyright (c) 2004-2006 The Regents of the University of California.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
|
||||||
* $COPYRIGHT$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -29,6 +30,9 @@ int mca_pml_dr_start(size_t count, ompi_request_t** requests)
|
|||||||
size_t i;
|
size_t i;
|
||||||
for(i=0; i<count; i++) {
|
for(i=0; i<count; i++) {
|
||||||
mca_pml_base_request_t *pml_request = (mca_pml_base_request_t*)requests[i];
|
mca_pml_base_request_t *pml_request = (mca_pml_base_request_t*)requests[i];
|
||||||
|
if (OMPI_REQUEST_PML != requests[i]->req_type) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if(NULL == pml_request)
|
if(NULL == pml_request)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* 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$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -31,6 +32,9 @@ int mca_pml_ob1_start(size_t count, ompi_request_t** requests)
|
|||||||
|
|
||||||
for(i=0; i<count; i++) {
|
for(i=0; i<count; i++) {
|
||||||
mca_pml_base_request_t *pml_request = (mca_pml_base_request_t*)requests[i];
|
mca_pml_base_request_t *pml_request = (mca_pml_base_request_t*)requests[i];
|
||||||
|
if (OMPI_REQUEST_PML != requests[i]->req_type) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if(NULL == pml_request)
|
if(NULL == pml_request)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* 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$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -59,7 +60,15 @@ int MPI_Bsend_init(void *buf, int count, MPI_Datatype type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (MPI_PROC_NULL == dest) {
|
if (MPI_PROC_NULL == dest) {
|
||||||
*request = &ompi_request_empty;
|
*request = OBJ_NEW(ompi_request_t);
|
||||||
|
/* Other fields were initialized by the constructor for
|
||||||
|
ompi_request_t */
|
||||||
|
(*request)->req_type = OMPI_REQUEST_NOOP;
|
||||||
|
(*request)->req_status = ompi_request_empty.req_status;
|
||||||
|
(*request)->req_complete = true;
|
||||||
|
(*request)->req_state = OMPI_REQUEST_INACTIVE;
|
||||||
|
(*request)->req_persistent = true;
|
||||||
|
(*request)->req_free = ompi_request_persistent_proc_null_free;
|
||||||
return MPI_SUCCESS;
|
return MPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* 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$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -56,7 +57,15 @@ int MPI_Recv_init(void *buf, int count, MPI_Datatype type, int source,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (MPI_PROC_NULL == source) {
|
if (MPI_PROC_NULL == source) {
|
||||||
*request = &ompi_request_empty;
|
*request = OBJ_NEW(ompi_request_t);
|
||||||
|
/* Other fields were initialized by the constructor for
|
||||||
|
ompi_request_t */
|
||||||
|
(*request)->req_type = OMPI_REQUEST_NOOP;
|
||||||
|
(*request)->req_status = ompi_request_empty.req_status;
|
||||||
|
(*request)->req_complete = true;
|
||||||
|
(*request)->req_state = OMPI_REQUEST_INACTIVE;
|
||||||
|
(*request)->req_persistent = true;
|
||||||
|
(*request)->req_free = ompi_request_persistent_proc_null_free;
|
||||||
return MPI_SUCCESS;
|
return MPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* 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$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -60,7 +61,15 @@ int MPI_Rsend_init(void *buf, int count, MPI_Datatype type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (MPI_PROC_NULL == dest) {
|
if (MPI_PROC_NULL == dest) {
|
||||||
*request = &ompi_request_empty;
|
*request = OBJ_NEW(ompi_request_t);
|
||||||
|
/* Other fields were initialized by the constructor for
|
||||||
|
ompi_request_t */
|
||||||
|
(*request)->req_type = OMPI_REQUEST_NOOP;
|
||||||
|
(*request)->req_status = ompi_request_empty.req_status;
|
||||||
|
(*request)->req_complete = true;
|
||||||
|
(*request)->req_state = OMPI_REQUEST_INACTIVE;
|
||||||
|
(*request)->req_persistent = true;
|
||||||
|
(*request)->req_free = ompi_request_persistent_proc_null_free;
|
||||||
return MPI_SUCCESS;
|
return MPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* 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$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -62,7 +63,15 @@ int MPI_Send_init(void *buf, int count, MPI_Datatype type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (MPI_PROC_NULL == dest) {
|
if (MPI_PROC_NULL == dest) {
|
||||||
*request = &ompi_request_empty;
|
*request = OBJ_NEW(ompi_request_t);
|
||||||
|
/* Other fields were initialized by the constructor for
|
||||||
|
ompi_request_t */
|
||||||
|
(*request)->req_type = OMPI_REQUEST_NOOP;
|
||||||
|
(*request)->req_status = ompi_request_empty.req_status;
|
||||||
|
(*request)->req_complete = true;
|
||||||
|
(*request)->req_state = OMPI_REQUEST_INACTIVE;
|
||||||
|
(*request)->req_persistent = true;
|
||||||
|
(*request)->req_free = ompi_request_persistent_proc_null_free;
|
||||||
return MPI_SUCCESS;
|
return MPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* 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$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -60,7 +61,15 @@ int MPI_Ssend_init(void *buf, int count, MPI_Datatype type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (MPI_PROC_NULL == dest) {
|
if (MPI_PROC_NULL == dest) {
|
||||||
*request = &ompi_request_empty;
|
*request = OBJ_NEW(ompi_request_t);
|
||||||
|
/* Other fields were initialized by the constructor for
|
||||||
|
ompi_request_t */
|
||||||
|
(*request)->req_type = OMPI_REQUEST_NOOP;
|
||||||
|
(*request)->req_status = ompi_request_empty.req_status;
|
||||||
|
(*request)->req_complete = true;
|
||||||
|
(*request)->req_state = OMPI_REQUEST_INACTIVE;
|
||||||
|
(*request)->req_persistent = true;
|
||||||
|
(*request)->req_free = ompi_request_persistent_proc_null_free;
|
||||||
return MPI_SUCCESS;
|
return MPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* 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$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -21,6 +22,7 @@
|
|||||||
#include "ompi/mpi/c/bindings.h"
|
#include "ompi/mpi/c/bindings.h"
|
||||||
#include "ompi/mca/pml/pml.h"
|
#include "ompi/mca/pml/pml.h"
|
||||||
#include "ompi/request/request.h"
|
#include "ompi/request/request.h"
|
||||||
|
#include "ompi/errhandler/errhandler.h"
|
||||||
|
|
||||||
#if OMPI_HAVE_WEAK_SYMBOLS && OMPI_PROFILING_DEFINES
|
#if OMPI_HAVE_WEAK_SYMBOLS && OMPI_PROFILING_DEFINES
|
||||||
#pragma weak MPI_Start = PMPI_Start
|
#pragma weak MPI_Start = PMPI_Start
|
||||||
@ -47,8 +49,14 @@ int MPI_Start(MPI_Request *request)
|
|||||||
switch((*request)->req_type) {
|
switch((*request)->req_type) {
|
||||||
case OMPI_REQUEST_PML:
|
case OMPI_REQUEST_PML:
|
||||||
return MCA_PML_CALL(start(1, request));
|
return MCA_PML_CALL(start(1, request));
|
||||||
default:
|
break;
|
||||||
|
|
||||||
|
case OMPI_REQUEST_NOOP:
|
||||||
return MPI_SUCCESS;
|
return MPI_SUCCESS;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
OMPI_ERRHANDLER_INVOKE(MPI_COMM_WORLD, MPI_ERR_REQUEST, FUNC_NAME);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* 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$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -20,6 +21,7 @@
|
|||||||
|
|
||||||
#include "ompi/mpi/c/bindings.h"
|
#include "ompi/mpi/c/bindings.h"
|
||||||
#include "ompi/mca/pml/pml.h"
|
#include "ompi/mca/pml/pml.h"
|
||||||
|
#include "ompi/request/request.h"
|
||||||
|
|
||||||
#if OMPI_HAVE_WEAK_SYMBOLS && OMPI_PROFILING_DEFINES
|
#if OMPI_HAVE_WEAK_SYMBOLS && OMPI_PROFILING_DEFINES
|
||||||
#pragma weak MPI_Startall = PMPI_Startall
|
#pragma weak MPI_Startall = PMPI_Startall
|
||||||
@ -34,6 +36,8 @@ static const char FUNC_NAME[] = "MPI_Startall";
|
|||||||
|
|
||||||
int MPI_Startall(int count, MPI_Request *requests)
|
int MPI_Startall(int count, MPI_Request *requests)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
if ( MPI_PARAM_CHECK ) {
|
if ( MPI_PARAM_CHECK ) {
|
||||||
int rc = MPI_SUCCESS;
|
int rc = MPI_SUCCESS;
|
||||||
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
OMPI_ERR_INIT_FINALIZE(FUNC_NAME);
|
||||||
@ -42,6 +46,13 @@ int MPI_Startall(int count, MPI_Request *requests)
|
|||||||
} else if (count < 0) {
|
} else if (count < 0) {
|
||||||
rc = MPI_ERR_ARG;
|
rc = MPI_ERR_ARG;
|
||||||
}
|
}
|
||||||
|
for (i = 0; i < count; ++i) {
|
||||||
|
if (OMPI_REQUEST_PML != requests[i]->req_type &&
|
||||||
|
OMPI_REQUEST_NOOP != requests[i]->req_type) {
|
||||||
|
rc = MPI_ERR_REQUEST;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
OMPI_ERRHANDLER_CHECK(rc, MPI_COMM_WORLD, rc, FUNC_NAME);
|
OMPI_ERRHANDLER_CHECK(rc, MPI_COMM_WORLD, rc, FUNC_NAME);
|
||||||
}
|
}
|
||||||
return MCA_PML_CALL(start(count, requests));
|
return MCA_PML_CALL(start(count, requests));
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* 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$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -63,6 +64,13 @@ static int ompi_request_empty_free(ompi_request_t** request)
|
|||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ompi_request_persistent_proc_null_free(ompi_request_t** request)
|
||||||
|
{
|
||||||
|
(*request)->req_state = OMPI_REQUEST_INVALID;
|
||||||
|
OBJ_RELEASE(*request);
|
||||||
|
return OMPI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
OBJ_CLASS_INSTANCE(
|
OBJ_CLASS_INSTANCE(
|
||||||
ompi_request_t,
|
ompi_request_t,
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
* University of Stuttgart. All rights reserved.
|
* University of Stuttgart. All rights reserved.
|
||||||
* 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$
|
* $COPYRIGHT$
|
||||||
*
|
*
|
||||||
* Additional copyrights may follow
|
* Additional copyrights may follow
|
||||||
@ -183,6 +184,14 @@ OMPI_DECLSPEC extern ompi_status_public_t ompi_status_empty;
|
|||||||
|
|
||||||
OMPI_DECLSPEC int ompi_request_init(void);
|
OMPI_DECLSPEC int ompi_request_init(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Free a persistent request to a MPI_PROC_NULL peer (there's no
|
||||||
|
* freelist to put it back to, so we have to actually OBJ_RELEASE it).
|
||||||
|
*/
|
||||||
|
|
||||||
|
OMPI_DECLSPEC int ompi_request_persistent_proc_null_free(ompi_request_t **request);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shut down the MPI_Request subsystem; invoked during MPI_FINALIZE.
|
* Shut down the MPI_Request subsystem; invoked during MPI_FINALIZE.
|
||||||
*/
|
*/
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user