From: Augustin Degomme Date: Sun, 18 Aug 2019 18:39:15 +0000 (+0200) Subject: Add support for MPI Errhandlers in Comm, File, Win. X-Git-Tag: v3.24~166 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/98755faee042e94d1ff52f6e9508b18015bb1ae5 Add support for MPI Errhandlers in Comm, File, Win. Default remains MPI_ERRORS_RETURN for now, pending test fixes --- diff --git a/ChangeLog b/ChangeLog index b064546353..1847ee9a3a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19,6 +19,7 @@ SMPI: - Add support for MPI_Irsend, MPI_Rsend, MPI_Rsend_init - SMPI can now be selected by cmake's find_module(MPI) with MPI_C_COMPILER, MPI_CXX_COMPILER, MPI_Fortran_COMPILER variables. + - Add support for MPI Errhandlers in Comm, File or Win. Default one is still set to MPI_ERRORS_RETURN. Model-Checker: - Option model-checker/hash was removed. This is always activated now. diff --git a/include/smpi/forward.hpp b/include/smpi/forward.hpp index e3039c42a8..fd92dd6ee0 100644 --- a/include/smpi/forward.hpp +++ b/include/smpi/forward.hpp @@ -17,6 +17,7 @@ class Coll; class Colls; class Comm; class Datatype; +class Errhandler; class File; class Group; class Info; @@ -36,6 +37,7 @@ class Win; typedef simgrid::smpi::Comm SMPI_Comm; typedef simgrid::smpi::Datatype SMPI_Datatype; +typedef simgrid::smpi::Errhandler SMPI_Errhandler; typedef simgrid::smpi::File SMPI_File; typedef simgrid::smpi::Group SMPI_Group; typedef simgrid::smpi::Info SMPI_Info; @@ -51,6 +53,7 @@ typedef simgrid::smpi::Win SMPI_Win; typedef struct SMPI_Comm SMPI_Comm; typedef struct SMPI_Datatype SMPI_Datatype; +typedef struct SMPI_Errhandler SMPI_Errhandler; typedef struct SMPI_File SMPI_File; typedef struct SMPI_Group SMPI_Group; typedef struct SMPI_Info SMPI_Info; diff --git a/include/smpi/mpif.h.in b/include/smpi/mpif.h.in index d795cca862..019ee69113 100644 --- a/include/smpi/mpif.h.in +++ b/include/smpi/mpif.h.in @@ -106,12 +106,6 @@ parameter(MPI_UNIVERSE_SIZE=-7) parameter(MPI_LASTUSEDCODE=-8) - integer MPI_ERRORS_RETURN, MPI_ERRORS_ARE_FATAL - integer MPI_ERRHANDLER_NULL - parameter(MPI_ERRORS_RETURN=0) - parameter(MPI_ERRORS_ARE_FATAL=1) - parameter(MPI_ERRHANDLER_NULL=2) - ! This should be equal to the number of int fields in MPI_Status integer MPI_STATUS_SIZE parameter(MPI_STATUS_SIZE=5) @@ -140,7 +134,7 @@ integer MPI_REQUEST_NULL,MPI_DATATYPE_NULL,MPI_OP_NULL integer MPI_COMM_NULL, MPI_COMM_WORLD, MPI_COMM_SELF integer MPI_GROUP_NULL, MPI_GROUP_EMPTY, MPI_WIN_NULL - integer MPI_INFO_NULL + integer MPI_INFO_NULL, MPI_ERRHANDLER_NULL parameter(MPI_REQUEST_NULL=-1) parameter(MPI_DATATYPE_NULL=-1) @@ -151,6 +145,7 @@ parameter(MPI_GROUP_NULL=-1) parameter(MPI_GROUP_EMPTY=-2) parameter(MPI_WIN_NULL=-1) + parameter(MPI_ERRHANDLER_NULL=-1) integer MPI_WIN_BASE, MPI_WIN_SIZE, MPI_WIN_DISP_UNIT @@ -204,6 +199,10 @@ parameter(MPI_BOR=40) parameter(MPI_BXOR=41) + integer MPI_ERRORS_RETURN, MPI_ERRORS_ARE_FATAL + parameter(MPI_ERRORS_RETURN=42) + parameter(MPI_ERRORS_ARE_FATAL=43) + INTEGER MPI_ADDRESS_KIND, MPI_OFFSET_KIND PARAMETER (MPI_ADDRESS_KIND=@CMAKE_SIZEOF_VOID_P@) PARAMETER (MPI_OFFSET_KIND=@CMAKE_SIZEOF_VOID_P@) diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index d2aee1f56b..c4e27b890a 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -364,6 +364,10 @@ typedef SMPI_Request* MPI_Request; #define MPI_REQUEST_NULL ((MPI_Request)NULL) #define MPI_FORTRAN_REQUEST_NULL -1 +typedef SMPI_Errhandler* MPI_Errhandler; +#define MPI_ERRHANDLER_NULL ((MPI_Errhandler)NULL) + + typedef enum SMPI_Topo_type { MPI_GRAPH=1, MPI_CART=2, @@ -812,8 +816,6 @@ typedef enum MPIR_Combiner_enum{ }MPIR_Combiner_enum; typedef void MPI_Handler_function(MPI_Comm*, int*, ...); - -typedef void* MPI_Errhandler; typedef void* MPI_Message; typedef void MPI_Comm_errhandler_function(MPI_Comm *, int *, ...); typedef void MPI_File_errhandler_function(MPI_File *, int *, ...); @@ -828,9 +830,8 @@ typedef MPI_File_errhandler_function MPI_File_errhandler_fn; typedef MPI_Win_errhandler_function MPI_Win_errhandler_fn; #define MPI_INFO_ENV smpi_process_info_env() XBT_PUBLIC_DATA const MPI_Datatype MPI_PACKED; -XBT_PUBLIC_DATA MPI_Errhandler* MPI_ERRORS_RETURN; -XBT_PUBLIC_DATA MPI_Errhandler* MPI_ERRORS_ARE_FATAL; -XBT_PUBLIC_DATA MPI_Errhandler* MPI_ERRHANDLER_NULL; +XBT_PUBLIC_DATA MPI_Errhandler MPI_ERRORS_RETURN; +XBT_PUBLIC_DATA MPI_Errhandler MPI_ERRORS_ARE_FATAL; MPI_CALL(XBT_PUBLIC MPI_Errhandler, MPI_Errhandler_f2c, (MPI_Fint errhandler)); MPI_CALL(XBT_PUBLIC MPI_Fint, MPI_Errhandler_c2f, (MPI_Errhandler errhandler)); @@ -878,7 +879,9 @@ MPI_CALL(XBT_PUBLIC int, MPI_Get_elements, (MPI_Status * status, MPI_Datatype da MPI_CALL(XBT_PUBLIC int, MPI_Pcontrol, (const int level, ...)); MPI_CALL(XBT_PUBLIC int, MPI_Win_set_errhandler, (MPI_Win win, MPI_Errhandler errhandler)); -MPI_CALL(XBT_PUBLIC int, MPI_Type_get_envelope, +MPI_CALL(XBT_PUBLIC int, MPI_Win_get_errhandler, (MPI_Win win, MPI_Errhandler* errhandler)); +MPI_CALL(XBT_PUBLIC int, MPI_Win_create_errhandler, (MPI_Win_errhandler_fn * function, MPI_Errhandler* errhandler)); +MPI_CALL(XBT_PUBLIC int, MPI_Win_call_errhandler, (MPI_Win win, int errorcode));MPI_CALL(XBT_PUBLIC int, MPI_Type_get_envelope, (MPI_Datatype datatype, int* num_integers, int* num_addresses, int* num_datatypes, int* combiner)); MPI_CALL(XBT_PUBLIC int, MPI_Type_get_contents, (MPI_Datatype datatype, int max_integers, int max_addresses, int max_datatypes, int* array_of_integers, diff --git a/src/smpi/bindings/smpi_f77.cpp b/src/smpi/bindings/smpi_f77.cpp index 1be6ec2330..9e96429ed9 100644 --- a/src/smpi/bindings/smpi_f77.cpp +++ b/src/smpi/bindings/smpi_f77.cpp @@ -6,6 +6,7 @@ #include "private.hpp" #include "smpi_comm.hpp" #include "smpi_datatype.hpp" +#include "smpi_errhandler.hpp" #include "smpi_op.hpp" #include "smpi_request.hpp" #include "smpi_win.hpp" @@ -67,6 +68,9 @@ void smpi_init_fortran_types(){ MPI_BAND->add_f(); MPI_BOR->add_f(); MPI_BXOR->add_f(); + + MPI_ERRORS_RETURN->add_f(); + MPI_ERRORS_ARE_FATAL->add_f(); } } @@ -680,20 +684,32 @@ void mpi_error_class_ (int* errorcode, int* errorclass, int* ierr) { *ierr = MPI_Error_class(*errorcode, errorclass); } -void mpi_errhandler_create_ (void* function, void* errhandler, int* ierr) { - *ierr = MPI_Errhandler_create(reinterpret_cast(function), static_cast(errhandler)); +void mpi_errhandler_create_ (void* function, int* errhandler, int* ierr) { + MPI_Errhandler tmp; + *ierr = MPI_Errhandler_create( reinterpret_cast(function), &tmp); + if(*ierr==MPI_SUCCESS){ + *errhandler = tmp->c2f(); + } } -void mpi_errhandler_free_ (void* errhandler, int* ierr) { - *ierr = MPI_Errhandler_free(static_cast(errhandler)); +void mpi_errhandler_free_ (int* errhandler, int* ierr) { + MPI_Errhandler tmp = simgrid::smpi::Errhandler::f2c(*errhandler); + *ierr = MPI_Errhandler_free(&tmp); + if(*ierr == MPI_SUCCESS) { + simgrid::smpi::F2C::free_f(*errhandler); + } } -void mpi_errhandler_get_ (int* comm, void* errhandler, int* ierr) { - *ierr = MPI_Errhandler_get(simgrid::smpi::Comm::f2c(*comm), static_cast(errhandler)); +void mpi_errhandler_get_ (int* comm, int* errhandler, int* ierr) { + MPI_Errhandler tmp; + *ierr = MPI_Errhandler_get(simgrid::smpi::Comm::f2c(*comm), &tmp); + if(*ierr == MPI_SUCCESS) { + *errhandler = tmp->c2f(); + } } -void mpi_errhandler_set_ (int* comm, void* errhandler, int* ierr) { - *ierr = MPI_Errhandler_set(simgrid::smpi::Comm::f2c(*comm), *static_cast(errhandler)); +void mpi_errhandler_set_ (int* comm, int* errhandler, int* ierr) { + *ierr = MPI_Errhandler_set(simgrid::smpi::Comm::f2c(*comm), simgrid::smpi::Errhandler::f2c(*errhandler)); } void mpi_cancel_ (int* request, int* ierr) { diff --git a/src/smpi/bindings/smpi_f77_comm.cpp b/src/smpi/bindings/smpi_f77_comm.cpp index 4ea26641c3..afca7860ab 100644 --- a/src/smpi/bindings/smpi_f77_comm.cpp +++ b/src/smpi/bindings/smpi_f77_comm.cpp @@ -5,6 +5,7 @@ #include "private.hpp" #include "smpi_comm.hpp" +#include "smpi_errhandler.hpp" #include "smpi_info.hpp" extern "C" { // This should really use the C linkage to be usable from Fortran @@ -117,12 +118,16 @@ void mpi_comm_disconnect_ (int* comm, int* ierr){ } } -void mpi_comm_set_errhandler_ (int* comm, void* errhandler, int* ierr) { - *ierr = MPI_Errhandler_set(simgrid::smpi::Comm::f2c(*comm), *static_cast(errhandler)); +void mpi_comm_set_errhandler_ (int* comm, int* errhandler, int* ierr) { + *ierr = MPI_Errhandler_set(simgrid::smpi::Comm::f2c(*comm), simgrid::smpi::Errhandler::f2c(*errhandler)); } -void mpi_comm_get_errhandler_ (int* comm, void* errhandler, int* ierr) { - *ierr = MPI_Errhandler_set(simgrid::smpi::Comm::f2c(*comm), static_cast(errhandler)); +void mpi_comm_get_errhandler_ (int* comm, int* errhandler, int* ierr) { + MPI_Errhandler tmp; + *ierr = MPI_Errhandler_get(simgrid::smpi::Comm::f2c(*comm), &tmp); + if(*ierr == MPI_SUCCESS) { + *errhandler = tmp->c2f(); + } } void mpi_comm_test_inter_ (int* comm, int* flag, int* ierr) { @@ -180,8 +185,12 @@ void mpi_comm_get_info_ (int* comm, int* info, int* ierr){ } } -void mpi_comm_create_errhandler_ ( void *function, void *errhandler, int* ierr){ - *ierr = MPI_Comm_create_errhandler( reinterpret_cast(function), static_cast(errhandler)); +void mpi_comm_create_errhandler_ ( void *function, int *errhandler, int* ierr){ + MPI_Errhandler tmp; + *ierr = MPI_Comm_create_errhandler( reinterpret_cast(function), &tmp); + if(*ierr==MPI_SUCCESS){ + *errhandler = tmp->c2f(); + } } void mpi_comm_call_errhandler_ (int* comm,int* errorcode, int* ierr){ diff --git a/src/smpi/bindings/smpi_mpi.cpp b/src/smpi/bindings/smpi_mpi.cpp index 09b5a5d0ae..2f1ef2a21f 100644 --- a/src/smpi/bindings/smpi_mpi.cpp +++ b/src/smpi/bindings/smpi_mpi.cpp @@ -6,6 +6,9 @@ #include "private.hpp" #include "simgrid/modelchecker.h" #include "simgrid/sg_config.hpp" +#include "smpi_comm.hpp" +#include "smpi_file.hpp" +#include "smpi_win.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_mpi, smpi, "Logging specific to SMPI ,(mpi)"); @@ -27,7 +30,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_mpi, smpi, "Logging specific to SMPI ,(mpi) return MPI_SUCCESS; \ } -#define WRAPPED_PMPI_CALL(type, name, args, args2) \ +#define WRAPPED_PMPI_CALL_ERRHANDLER(type, name, args, args2, errhan) \ type name args \ { \ XBT_VERB("SMPI - Entering %s", __func__); \ @@ -36,13 +39,23 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_mpi, smpi, "Logging specific to SMPI ,(mpi) char error_string[MPI_MAX_ERROR_STRING]; \ int error_size; \ PMPI_Error_string(ret, error_string, &error_size); \ - XBT_WARN("%s - returned %.*s instead of MPI_SUCCESS", __func__, error_size, error_string); \ + if(errhan==nullptr || errhan->errhandler()==MPI_ERRORS_RETURN) \ + XBT_WARN("%s - returned %.*s instead of MPI_SUCCESS", __func__, error_size, error_string); \ + else if(errhan->errhandler()==MPI_ERRORS_ARE_FATAL) \ + xbt_die("%s - returned %.*s instead of MPI_SUCCESS", __func__, error_size, error_string); \ + else \ + errhan->errhandler()->call(errhan, ret); \ MC_assert(not MC_is_active()); /* Only fail in MC mode */ \ } \ XBT_VERB("SMPI - Leaving %s", __func__); \ return ret; \ } +#define WRAPPED_PMPI_CALL_ERRHANDLER_COMM(type, name, args, args2) WRAPPED_PMPI_CALL_ERRHANDLER(type, name, args, args2, comm) +#define WRAPPED_PMPI_CALL_ERRHANDLER_WIN(type, name, args, args2) WRAPPED_PMPI_CALL_ERRHANDLER(type, name, args, args2, win) +#define WRAPPED_PMPI_CALL_ERRHANDLER_FILE(type, name, args, args2) WRAPPED_PMPI_CALL_ERRHANDLER(type, name, args, args2, fh) +#define WRAPPED_PMPI_CALL(type, name, args, args2) WRAPPED_PMPI_CALL_ERRHANDLER(type, name, args, args2, MPI_COMM_WORLD) + #define WRAPPED_PMPI_CALL_NORETURN(type, name, args, args2) \ type name args \ { \ @@ -64,68 +77,78 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_mpi, smpi, "Logging specific to SMPI ,(mpi) WRAPPED_PMPI_CALL_NORETURN(double, MPI_Wtick,(void),()) WRAPPED_PMPI_CALL_NORETURN(double, MPI_Wtime,(void),()) -WRAPPED_PMPI_CALL(int,MPI_Abort,(MPI_Comm comm, int errorcode),(comm, errorcode)) -WRAPPED_PMPI_CALL(int,MPI_Accumulate,(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win),( origin_addr,origin_count, origin_datatype,target_rank,target_disp, target_count,target_datatype,op, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Abort,(MPI_Comm comm, int errorcode),(comm, errorcode)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Accumulate,(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win),( origin_addr,origin_count, origin_datatype,target_rank,target_disp, target_count,target_datatype,op, win)) WRAPPED_PMPI_CALL(int, MPI_Address, (const void* location, MPI_Aint* address), (location, address)) -WRAPPED_PMPI_CALL(int,MPI_Allgather,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm)) -WRAPPED_PMPI_CALL(int,MPI_Allgatherv,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs,MPI_Datatype recvtype, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Allgather,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Allgatherv,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs,MPI_Datatype recvtype, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm)) WRAPPED_PMPI_CALL(int,MPI_Alloc_mem,(MPI_Aint size, MPI_Info info, void *baseptr),(size, info, baseptr)) -WRAPPED_PMPI_CALL(int,MPI_Allreduce,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm),(sendbuf, recvbuf, count, datatype, op, comm)) -WRAPPED_PMPI_CALL(int,MPI_Alltoall,(const void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbuf, int recvcount,MPI_Datatype recvtype, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm)) -WRAPPED_PMPI_CALL(int,MPI_Alltoallv,(const void *sendbuf, const int *sendcounts, const int *senddisps, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *recvdisps, MPI_Datatype recvtype, MPI_Comm comm),(sendbuf, sendcounts, senddisps, sendtype, recvbuf, recvcounts, recvdisps, recvtype, comm)) -WRAPPED_PMPI_CALL(int,MPI_Alltoallw,(const void *sendbuf, const int *sendcnts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcnts, const int *rdispls, const MPI_Datatype *recvtypes, MPI_Comm comm),( sendbuf, sendcnts, sdispls, sendtypes, recvbuf, recvcnts, rdispls, recvtypes, comm)) -WRAPPED_PMPI_CALL(int,MPI_Attr_delete,(MPI_Comm comm, int keyval) ,(comm, keyval)) -WRAPPED_PMPI_CALL(int,MPI_Attr_get,(MPI_Comm comm, int keyval, void* attr_value, int* flag) ,(comm, keyval, attr_value, flag)) -WRAPPED_PMPI_CALL(int,MPI_Attr_put,(MPI_Comm comm, int keyval, void* attr_value) ,(comm, keyval, attr_value)) -WRAPPED_PMPI_CALL(int,MPI_Barrier,(MPI_Comm comm),(comm)) -WRAPPED_PMPI_CALL(int,MPI_Bcast,(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm),(buf, count, datatype, root, comm)) -WRAPPED_PMPI_CALL(int,MPI_Cart_coords,(MPI_Comm comm, int rank, int maxdims, int* coords) ,(comm, rank, maxdims, coords)) -WRAPPED_PMPI_CALL(int,MPI_Cart_create,(MPI_Comm comm_old, int ndims, const int* dims, const int* periods, int reorder, MPI_Comm* comm_cart) ,(comm_old, ndims, dims, periods, reorder, comm_cart)) -WRAPPED_PMPI_CALL(int,MPI_Cartdim_get,(MPI_Comm comm, int* ndims) ,(comm, ndims)) -WRAPPED_PMPI_CALL(int,MPI_Cart_get,(MPI_Comm comm, int maxdims, int* dims, int* periods, int* coords) ,(comm, maxdims, dims, periods, coords)) -WRAPPED_PMPI_CALL(int,MPI_Cart_rank,(MPI_Comm comm, const int* coords, int* rank) ,(comm, coords, rank)) -WRAPPED_PMPI_CALL(int,MPI_Cart_shift,(MPI_Comm comm, int direction, int displ, int* source, int* dest) ,(comm, direction, displ, source, dest)) -WRAPPED_PMPI_CALL(int,MPI_Cart_sub,(MPI_Comm comm, const int* remain_dims, MPI_Comm* comm_new) ,(comm, remain_dims, comm_new)) -WRAPPED_PMPI_CALL(int,MPI_Comm_compare,(MPI_Comm comm1, MPI_Comm comm2, int *result),(comm1, comm2, result)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Allreduce,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm),(sendbuf, recvbuf, count, datatype, op, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Alltoall,(const void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbuf, int recvcount,MPI_Datatype recvtype, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Alltoallv,(const void *sendbuf, const int *sendcounts, const int *senddisps, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *recvdisps, MPI_Datatype recvtype, MPI_Comm comm),(sendbuf, sendcounts, senddisps, sendtype, recvbuf, recvcounts, recvdisps, recvtype, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Alltoallw,(const void *sendbuf, const int *sendcnts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcnts, const int *rdispls, const MPI_Datatype *recvtypes, MPI_Comm comm),( sendbuf, sendcnts, sdispls, sendtypes, recvbuf, recvcnts, rdispls, recvtypes, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Attr_delete,(MPI_Comm comm, int keyval) ,(comm, keyval)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Attr_get,(MPI_Comm comm, int keyval, void* attr_value, int* flag) ,(comm, keyval, attr_value, flag)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Attr_put,(MPI_Comm comm, int keyval, void* attr_value) ,(comm, keyval, attr_value)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Barrier,(MPI_Comm comm),(comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Bcast,(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm),(buf, count, datatype, root, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Cart_coords,(MPI_Comm comm, int rank, int maxdims, int* coords) ,(comm, rank, maxdims, coords)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Cart_create,(MPI_Comm comm, int ndims, const int* dims, const int* periods, int reorder, MPI_Comm* comm_cart) ,(comm, ndims, dims, periods, reorder, comm_cart)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Cartdim_get,(MPI_Comm comm, int* ndims) ,(comm, ndims)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Cart_get,(MPI_Comm comm, int maxdims, int* dims, int* periods, int* coords) ,(comm, maxdims, dims, periods, coords)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Cart_rank,(MPI_Comm comm, const int* coords, int* rank) ,(comm, coords, rank)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Cart_shift,(MPI_Comm comm, int direction, int displ, int* source, int* dest) ,(comm, direction, displ, source, dest)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Cart_sub,(MPI_Comm comm, const int* remain_dims, MPI_Comm* comm_new) ,(comm, remain_dims, comm_new)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_compare,(MPI_Comm comm, MPI_Comm comm2, int *result),(comm, comm2, result)) WRAPPED_PMPI_CALL(int,MPI_Comm_create_keyval,(MPI_Comm_copy_attr_function* copy_fn, MPI_Comm_delete_attr_function* delete_fn, int* keyval, void* extra_state),(copy_fn,delete_fn,keyval,extra_state)) -WRAPPED_PMPI_CALL(int,MPI_Comm_create,(MPI_Comm comm, MPI_Group group, MPI_Comm * newcomm),(comm, group, newcomm)) -WRAPPED_PMPI_CALL(int,MPI_Comm_delete_attr ,(MPI_Comm comm, int comm_keyval),(comm,comm_keyval)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_create,(MPI_Comm comm, MPI_Group group, MPI_Comm * newcomm),(comm, group, newcomm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_delete_attr ,(MPI_Comm comm, int comm_keyval),(comm,comm_keyval)) WRAPPED_PMPI_CALL(int,MPI_Comm_disconnect,(MPI_Comm * comm),(comm)) -WRAPPED_PMPI_CALL(int,MPI_Comm_dup,(MPI_Comm comm, MPI_Comm * newcomm),(comm, newcomm)) -WRAPPED_PMPI_CALL(int,MPI_Comm_dup_with_info,(MPI_Comm comm, MPI_Info info, MPI_Comm * newcomm),(comm,info,newcomm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_dup,(MPI_Comm comm, MPI_Comm * newcomm),(comm, newcomm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_dup_with_info,(MPI_Comm comm, MPI_Info info, MPI_Comm * newcomm),(comm,info,newcomm)) WRAPPED_PMPI_CALL(int,MPI_Comm_free_keyval,(int* keyval) ,( keyval)) WRAPPED_PMPI_CALL(int,MPI_Comm_free,(MPI_Comm * comm),(comm)) -WRAPPED_PMPI_CALL(int,MPI_Comm_get_attr ,(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag),(comm, comm_keyval, attribute_val, flag)) -WRAPPED_PMPI_CALL(int,MPI_Comm_get_info ,(MPI_Comm comm, MPI_Info* info),(comm, info)) -WRAPPED_PMPI_CALL(int,MPI_Comm_get_name ,(MPI_Comm comm, char* name, int* len),(comm, name, len)) -WRAPPED_PMPI_CALL(int,MPI_Comm_set_name ,(MPI_Comm comm, const char* name),(comm, name)) -WRAPPED_PMPI_CALL(int,MPI_Comm_group,(MPI_Comm comm, MPI_Group * group),(comm, group)) -WRAPPED_PMPI_CALL(int,MPI_Comm_rank,(MPI_Comm comm, int *rank),(comm, rank)) -WRAPPED_PMPI_CALL(int,MPI_Comm_set_attr ,(MPI_Comm comm, int comm_keyval, void *attribute_val),( comm, comm_keyval, attribute_val)) -WRAPPED_PMPI_CALL(int,MPI_Comm_set_info ,(MPI_Comm comm, MPI_Info info),(comm, info)) -WRAPPED_PMPI_CALL(int,MPI_Comm_size,(MPI_Comm comm, int *size),(comm, size)) -WRAPPED_PMPI_CALL(int,MPI_Comm_split,(MPI_Comm comm, int color, int key, MPI_Comm* comm_out),(comm, color, key, comm_out)) -WRAPPED_PMPI_CALL(int,MPI_Comm_split_type,(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm),(comm, split_type, key, info, newcomm)) -WRAPPED_PMPI_CALL(int,MPI_Comm_create_group,(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm* comm_out),(comm, group, tag, comm_out)) -WRAPPED_PMPI_CALL(int,MPI_Compare_and_swap,(const void *origin_addr, void *compare_addr, +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_get_attr ,(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag),(comm, comm_keyval, attribute_val, flag)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_get_info ,(MPI_Comm comm, MPI_Info* info),(comm, info)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_get_name ,(MPI_Comm comm, char* name, int* len),(comm, name, len)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_set_name ,(MPI_Comm comm, const char* name),(comm, name)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_group,(MPI_Comm comm, MPI_Group * group),(comm, group)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_rank,(MPI_Comm comm, int *rank),(comm, rank)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_set_attr ,(MPI_Comm comm, int comm_keyval, void *attribute_val),( comm, comm_keyval, attribute_val)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_set_info ,(MPI_Comm comm, MPI_Info info),(comm, info)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_size,(MPI_Comm comm, int *size),(comm, size)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_split,(MPI_Comm comm, int color, int key, MPI_Comm* comm_out),(comm, color, key, comm_out)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_split_type,(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm),(comm, split_type, key, info, newcomm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_create_group,(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm* comm_out),(comm, group, tag, comm_out)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_call_errhandler,(MPI_Comm comm,int errorcode),(comm, errorcode)) +WRAPPED_PMPI_CALL(int,MPI_Comm_create_errhandler,( MPI_Comm_errhandler_fn *function, MPI_Errhandler *errhandler),( function, errhandler)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_get_errhandler,(MPI_Comm comm, MPI_Errhandler* errhandler) ,(comm, errhandler)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Comm_set_errhandler,(MPI_Comm comm, MPI_Errhandler errhandler) ,(comm, errhandler)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Compare_and_swap,(const void *origin_addr, void *compare_addr, void *result_addr, MPI_Datatype datatype, int target_rank, MPI_Aint target_disp, MPI_Win win), (origin_addr, compare_addr, result_addr, datatype, target_rank, target_disp, win)) WRAPPED_PMPI_CALL(int,MPI_Dims_create,(int nnodes, int ndims, int* dims) ,(nnodes, ndims, dims)) +WRAPPED_PMPI_CALL(int,MPI_Errhandler_free,(MPI_Errhandler* errhandler) ,(errhandler)) +WRAPPED_PMPI_CALL(int,MPI_Errhandler_create,(MPI_Handler_function* function, MPI_Errhandler* errhandler) ,(function, errhandler)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Errhandler_get,(MPI_Comm comm, MPI_Errhandler* errhandler) ,(comm, errhandler)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Errhandler_set,(MPI_Comm comm, MPI_Errhandler errhandler) ,(comm, errhandler)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Errhandler, MPI_Errhandler_f2c,(MPI_Fint errhandler),(errhandler)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Fint, MPI_Errhandler_c2f,(MPI_Errhandler errhandler),(errhandler)) WRAPPED_PMPI_CALL(int,MPI_Error_class,(int errorcode, int* errorclass) ,(errorcode, errorclass)) WRAPPED_PMPI_CALL_NORETURN(int,MPI_Error_string,(int errorcode, char* string, int* resultlen) ,(errorcode, string, resultlen)) -WRAPPED_PMPI_CALL(int,MPI_Exscan,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm),(sendbuf, recvbuf, count, datatype, op, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Exscan,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm),(sendbuf, recvbuf, count, datatype, op, comm)) WRAPPED_PMPI_CALL(int,MPI_Finalized,(int * flag),(flag)) WRAPPED_PMPI_CALL(int,MPI_Finalize,(void),()) WRAPPED_PMPI_CALL(int,MPI_Free_mem,(void *baseptr),(baseptr)) -WRAPPED_PMPI_CALL(int,MPI_Gather,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm)) -WRAPPED_PMPI_CALL(int,MPI_Gatherv,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs,MPI_Datatype recvtype, int root, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Gather,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Gatherv,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs,MPI_Datatype recvtype, int root, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm)) WRAPPED_PMPI_CALL(int,MPI_Get_address,(const void *location, MPI_Aint * address),(location, address)) WRAPPED_PMPI_CALL(int,MPI_Get_count,(const MPI_Status * status, MPI_Datatype datatype, int *count),(status, datatype, count)) WRAPPED_PMPI_CALL(int,MPI_Get_library_version ,(char *version,int *len),(version,len)) WRAPPED_PMPI_CALL(int,MPI_Get_processor_name,(char *name, int *resultlen),(name, resultlen)) WRAPPED_PMPI_CALL(int,MPI_Get_version ,(int *version,int *subversion),(version,subversion)) -WRAPPED_PMPI_CALL(int,MPI_Get,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win),(origin_addr,origin_count, origin_datatype,target_rank, target_disp, target_count,target_datatype,win)) -WRAPPED_PMPI_CALL(int,MPI_Get_accumulate, (const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr, int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win),(origin_addr, origin_count, origin_datatype, result_addr, result_count, result_datatype, target_rank, target_disp, target_count, target_datatype, op, win)) -WRAPPED_PMPI_CALL(int,MPI_Fetch_and_op, (const void *origin_addr, void *result_addr, MPI_Datatype datatype, int target_rank, MPI_Aint target_disp, MPI_Op op, MPI_Win win),(origin_addr, result_addr, datatype, target_rank, target_disp, op, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Get,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win),(origin_addr,origin_count, origin_datatype,target_rank, target_disp, target_count,target_datatype,win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Get_accumulate, (const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr, int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win),(origin_addr, origin_count, origin_datatype, result_addr, result_count, result_datatype, target_rank, target_disp, target_count, target_datatype, op, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Fetch_and_op, (const void *origin_addr, void *result_addr, MPI_Datatype datatype, int target_rank, MPI_Aint target_disp, MPI_Op op, MPI_Win win),(origin_addr, result_addr, datatype, target_rank, target_disp, op, win)) WRAPPED_PMPI_CALL(int,MPI_Group_compare,(MPI_Group group1, MPI_Group group2, int *result),(group1, group2, result)) WRAPPED_PMPI_CALL(int,MPI_Group_difference,(MPI_Group group1, MPI_Group group2, MPI_Group * newgroup),(group1, group2, newgroup)) WRAPPED_PMPI_CALL(int,MPI_Group_excl,(MPI_Group group, int n, const int *ranks, MPI_Group * newgroup),(group, n, ranks, newgroup)) @@ -138,24 +161,24 @@ WRAPPED_PMPI_CALL(int,MPI_Group_rank,(MPI_Group group, int *rank),(group, rank)) WRAPPED_PMPI_CALL(int,MPI_Group_size,(MPI_Group group, int *size),(group, size)) WRAPPED_PMPI_CALL(int,MPI_Group_translate_ranks,(MPI_Group group1, int n, const int *ranks1, MPI_Group group2, int *ranks2),(group1, n, ranks1, group2, ranks2)) WRAPPED_PMPI_CALL(int,MPI_Group_union,(MPI_Group group1, MPI_Group group2, MPI_Group * newgroup),(group1, group2, newgroup)) -WRAPPED_PMPI_CALL(int,MPI_Ibarrier,(MPI_Comm comm, MPI_Request *request),(comm,request)) -WRAPPED_PMPI_CALL(int,MPI_Ibcast,(void* buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm, MPI_Request *request),(buf, count, datatype, root, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Ibarrier,(MPI_Comm comm, MPI_Request *request),(comm,request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Ibcast,(void* buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm, MPI_Request *request),(buf, count, datatype, root, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Iallgather,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Iallgatherv,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs,MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Iallreduce,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, count, datatype, op, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Ialltoall,(const void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbuf, int recvcount,MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Ialltoallv,(const void *sendbuf, const int *sendcounts, const int *senddisps, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *recvdisps, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcounts, senddisps, sendtype, recvbuf, recvcounts, recvdisps, recvtype, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Ialltoallw,(const void *sendbuf, const int *sendcnts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcnts, const int *rdispls, const MPI_Datatype *recvtypes, MPI_Comm comm, MPI_Request *request),( sendbuf, sendcnts, sdispls, sendtypes, recvbuf, recvcnts, rdispls, recvtypes, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Igather,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Igatherv,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs,MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Ireduce_scatter_block,(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op,MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, recvcount, datatype, op, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Ireduce_scatter,(const void *sendbuf, void *recvbuf, const int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, recvcounts, datatype, op, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Ireduce,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, count, datatype, op, root, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Iexscan,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, count, datatype, op, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Iscan,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, count, datatype, op, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Iscatter,(const void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbuf, int recvcount, MPI_Datatype recvtype,int root, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Iscatterv,(const void *sendbuf, const int *sendcounts, const int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount,MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Iallgather,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Iallgatherv,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs,MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Iallreduce,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, count, datatype, op, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Ialltoall,(const void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbuf, int recvcount,MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Ialltoallv,(const void *sendbuf, const int *sendcounts, const int *senddisps, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *recvdisps, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcounts, senddisps, sendtype, recvbuf, recvcounts, recvdisps, recvtype, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Ialltoallw,(const void *sendbuf, const int *sendcnts, const int *sdispls, const MPI_Datatype *sendtypes, void *recvbuf, const int *recvcnts, const int *rdispls, const MPI_Datatype *recvtypes, MPI_Comm comm, MPI_Request *request),( sendbuf, sendcnts, sdispls, sendtypes, recvbuf, recvcnts, rdispls, recvtypes, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Igather,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Igatherv,(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs,MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Ireduce_scatter_block,(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op,MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, recvcount, datatype, op, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Ireduce_scatter,(const void *sendbuf, void *recvbuf, const int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, recvcounts, datatype, op, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Ireduce,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, count, datatype, op, root, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Iexscan,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, count, datatype, op, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Iscan,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request),(sendbuf, recvbuf, count, datatype, op, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Iscatter,(const void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbuf, int recvcount, MPI_Datatype recvtype,int root, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Iscatterv,(const void *sendbuf, const int *sendcounts, const int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount,MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request),(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm, request)) WRAPPED_PMPI_CALL(int,MPI_Info_create,( MPI_Info *info),( info)) WRAPPED_PMPI_CALL(int,MPI_Info_delete,(MPI_Info info, const char *key),(info, key)) @@ -169,11 +192,11 @@ WRAPPED_PMPI_CALL(int,MPI_Info_set,( MPI_Info info, const char *key, const char WRAPPED_PMPI_CALL(int,MPI_Initialized,(int* flag) ,(flag)) WRAPPED_PMPI_CALL(int,MPI_Init,(int *argc, char ***argv),(argc, argv)) WRAPPED_PMPI_CALL(int,MPI_Init_thread,(int *argc, char ***argv, int required, int *provided),(argc, argv, required, provided)) -WRAPPED_PMPI_CALL(int,MPI_Iprobe,(int source, int tag, MPI_Comm comm, int* flag, MPI_Status* status) ,(source, tag, comm, flag, status)) -WRAPPED_PMPI_CALL(int,MPI_Irecv,(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Request * request),(buf, count, datatype, src, tag, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Isend,(const void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm, MPI_Request * request),(buf, count, datatype, dst, tag, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Issend,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request) ,(buf, count, datatype, dest, tag, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Irsend,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request),(buf, count, datatype, dest, tag, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Iprobe,(int source, int tag, MPI_Comm comm, int* flag, MPI_Status* status) ,(source, tag, comm, flag, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Irecv,(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Request * request),(buf, count, datatype, src, tag, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Isend,(const void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm, MPI_Request * request),(buf, count, datatype, dst, tag, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Issend,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request) ,(buf, count, datatype, dest, tag, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Irsend,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request),(buf, count, datatype, dest, tag, comm, request)) WRAPPED_PMPI_CALL(int,MPI_Is_thread_main,(int *flag),(flag)) WRAPPED_PMPI_CALL(int,MPI_Keyval_create,(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state) ,(copy_fn, delete_fn, keyval, extra_state)) WRAPPED_PMPI_CALL(int,MPI_Keyval_free,(int* keyval) ,(keyval)) @@ -182,31 +205,31 @@ WRAPPED_PMPI_CALL(int,MPI_Op_free,(MPI_Op * op),(op)) WRAPPED_PMPI_CALL(int,MPI_Op_commutative,(MPI_Op op, int *commute), (op, commute)) WRAPPED_PMPI_CALL(int,MPI_Pack_size,(int incount, MPI_Datatype datatype, MPI_Comm comm, int* size) ,(incount, datatype, comm, size)) WRAPPED_PMPI_CALL(int,MPI_Pack,(const void* inbuf, int incount, MPI_Datatype type, void* outbuf, int outcount, int* position, MPI_Comm comm) ,(inbuf, incount, type, outbuf, outcount, position, comm)) -WRAPPED_PMPI_CALL(int,MPI_Probe,(int source, int tag, MPI_Comm comm, MPI_Status* status) ,(source, tag, comm, status)) -WRAPPED_PMPI_CALL(int,MPI_Put,(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win),(origin_addr,origin_count, origin_datatype,target_rank,target_disp, target_count,target_datatype, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Probe,(int source, int tag, MPI_Comm comm, MPI_Status* status) ,(source, tag, comm, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Put,(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win),(origin_addr,origin_count, origin_datatype,target_rank,target_disp, target_count,target_datatype, win)) WRAPPED_PMPI_CALL(int,MPI_Query_thread,(int *provided),(provided)) -WRAPPED_PMPI_CALL(int,MPI_Raccumulate,(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request* request),( origin_addr,origin_count, origin_datatype,target_rank,target_disp, target_count,target_datatype,op, win, request)) -WRAPPED_PMPI_CALL(int,MPI_Recv_init,(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Request * request),(buf, count, datatype, src, tag, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Recv,(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Status * status),(buf, count, datatype, src, tag, comm, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Raccumulate,(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request* request),( origin_addr,origin_count, origin_datatype,target_rank,target_disp, target_count,target_datatype,op, win, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Recv_init,(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Request * request),(buf, count, datatype, src, tag, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Recv,(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Status * status),(buf, count, datatype, src, tag, comm, status)) WRAPPED_PMPI_CALL(int,MPI_Reduce_local,(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype, MPI_Op op),(inbuf, inoutbuf, count, datatype, op)) -WRAPPED_PMPI_CALL(int,MPI_Reduce_scatter_block,(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op,MPI_Comm comm),(sendbuf, recvbuf, recvcount, datatype, op, comm)) -WRAPPED_PMPI_CALL(int,MPI_Reduce_scatter,(const void *sendbuf, void *recvbuf, const int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm),(sendbuf, recvbuf, recvcounts, datatype, op, comm)) -WRAPPED_PMPI_CALL(int,MPI_Reduce,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm),(sendbuf, recvbuf, count, datatype, op, root, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Reduce_scatter_block,(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op,MPI_Comm comm),(sendbuf, recvbuf, recvcount, datatype, op, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Reduce_scatter,(const void *sendbuf, void *recvbuf, const int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm),(sendbuf, recvbuf, recvcounts, datatype, op, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Reduce,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm),(sendbuf, recvbuf, count, datatype, op, root, comm)) WRAPPED_PMPI_CALL(int,MPI_Request_free,(MPI_Request * request),(request)) -WRAPPED_PMPI_CALL(int,MPI_Rget,(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win, MPI_Request* request),(origin_addr,origin_count, origin_datatype,target_rank, target_disp, target_count,target_datatype,win, request)) -WRAPPED_PMPI_CALL(int,MPI_Rget_accumulate, (const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr, int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request* request),(origin_addr, origin_count, origin_datatype, result_addr, result_count, result_datatype, target_rank, target_disp, target_count, target_datatype, op, win, request)) -WRAPPED_PMPI_CALL(int,MPI_Rput,(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win, MPI_Request* request),(origin_addr,origin_count, origin_datatype,target_rank,target_disp, target_count,target_datatype, win, request)) -WRAPPED_PMPI_CALL(int,MPI_Scan,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm),(sendbuf, recvbuf, count, datatype, op, comm)) -WRAPPED_PMPI_CALL(int,MPI_Scatter,(const void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbuf, int recvcount, MPI_Datatype recvtype,int root, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm)) -WRAPPED_PMPI_CALL(int,MPI_Scatterv,(const void *sendbuf, const int *sendcounts, const int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount,MPI_Datatype recvtype, int root, MPI_Comm comm),(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm)) -WRAPPED_PMPI_CALL(int,MPI_Send_init,(const void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm, MPI_Request * request),(buf, count, datatype, dst, tag, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Sendrecv_replace,(void *buf, int count, MPI_Datatype datatype, int dst, int sendtag, int src, int recvtag,MPI_Comm comm, MPI_Status * status),(buf, count, datatype, dst, sendtag, src, recvtag, comm, status)) -WRAPPED_PMPI_CALL(int,MPI_Sendrecv,(const void *sendbuf, int sendcount, MPI_Datatype sendtype,int dst, int sendtag, void *recvbuf, int recvcount,MPI_Datatype recvtype, int src, int recvtag, MPI_Comm comm, MPI_Status * status),(sendbuf, sendcount, sendtype, dst, sendtag, recvbuf, recvcount, recvtype, src, recvtag,comm, status)) -WRAPPED_PMPI_CALL(int,MPI_Send,(const void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm),(buf, count, datatype, dst, tag, comm)) -WRAPPED_PMPI_CALL(int,MPI_Ssend_init,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request),(buf, count, datatype, dest, tag, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Ssend,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) ,(buf, count, datatype, dest, tag, comm)) -WRAPPED_PMPI_CALL(int,MPI_Rsend_init,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request),(buf, count, datatype, dest, tag, comm, request)) -WRAPPED_PMPI_CALL(int,MPI_Rsend,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) ,(buf, count, datatype, dest, tag, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Rget,(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win, MPI_Request* request),(origin_addr,origin_count, origin_datatype,target_rank, target_disp, target_count,target_datatype,win, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Rget_accumulate, (const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr, int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request* request),(origin_addr, origin_count, origin_datatype, result_addr, result_count, result_datatype, target_rank, target_disp, target_count, target_datatype, op, win, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Rput,(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win, MPI_Request* request),(origin_addr,origin_count, origin_datatype,target_rank,target_disp, target_count,target_datatype, win, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Scan,(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm),(sendbuf, recvbuf, count, datatype, op, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Scatter,(const void *sendbuf, int sendcount, MPI_Datatype sendtype,void *recvbuf, int recvcount, MPI_Datatype recvtype,int root, MPI_Comm comm),(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Scatterv,(const void *sendbuf, const int *sendcounts, const int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount,MPI_Datatype recvtype, int root, MPI_Comm comm),(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Send_init,(const void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm, MPI_Request * request),(buf, count, datatype, dst, tag, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Sendrecv_replace,(void *buf, int count, MPI_Datatype datatype, int dst, int sendtag, int src, int recvtag,MPI_Comm comm, MPI_Status * status),(buf, count, datatype, dst, sendtag, src, recvtag, comm, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Sendrecv,(const void *sendbuf, int sendcount, MPI_Datatype sendtype,int dst, int sendtag, void *recvbuf, int recvcount,MPI_Datatype recvtype, int src, int recvtag, MPI_Comm comm, MPI_Status * status),(sendbuf, sendcount, sendtype, dst, sendtag, recvbuf, recvcount, recvtype, src, recvtag,comm, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Send,(const void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm),(buf, count, datatype, dst, tag, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Ssend_init,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request),(buf, count, datatype, dest, tag, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Ssend,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) ,(buf, count, datatype, dest, tag, comm)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Rsend_init,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request),(buf, count, datatype, dest, tag, comm, request)) +WRAPPED_PMPI_CALL_ERRHANDLER_COMM(int,MPI_Rsend,(const void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) ,(buf, count, datatype, dest, tag, comm)) WRAPPED_PMPI_CALL(int,MPI_Startall,(int count, MPI_Request * requests),(count, requests)) WRAPPED_PMPI_CALL(int,MPI_Start,(MPI_Request * request),(request)) WRAPPED_PMPI_CALL(int,MPI_Testall,(int count, MPI_Request* requests, int* flag, MPI_Status* statuses) ,(count, requests, flag, statuses)) @@ -252,38 +275,42 @@ WRAPPED_PMPI_CALL(int,MPI_Waitall,(int count, MPI_Request requests[], MPI_Status WRAPPED_PMPI_CALL(int,MPI_Waitany,(int count, MPI_Request requests[], int *index, MPI_Status * status),(count, requests, index, status)) WRAPPED_PMPI_CALL(int,MPI_Wait,(MPI_Request * request, MPI_Status * status),(request, status)) WRAPPED_PMPI_CALL(int,MPI_Waitsome,(int incount, MPI_Request requests[], int *outcount, int *indices, MPI_Status status[]),(incount, requests, outcount, indices, status)) -WRAPPED_PMPI_CALL(int,MPI_Win_complete,(MPI_Win win),(win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_complete,(MPI_Win win),(win)) WRAPPED_PMPI_CALL(int,MPI_Win_create,( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win *win),( base, size, disp_unit, info, comm,win)) WRAPPED_PMPI_CALL(int,MPI_Win_allocate,(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *base, MPI_Win *win),(size, disp_unit, info, comm, base, win)) WRAPPED_PMPI_CALL(int,MPI_Win_allocate_shared,(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *base, MPI_Win *win),(size, disp_unit, info, comm, base, win)) -WRAPPED_PMPI_CALL(int,MPI_Win_attach,(MPI_Win win, void *base, MPI_Aint size),(win, base, size)) -WRAPPED_PMPI_CALL(int,MPI_Win_detach,(MPI_Win win, const void *base),(win, base)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_attach,(MPI_Win win, void *base, MPI_Aint size),(win, base, size)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_detach,(MPI_Win win, const void *base),(win, base)) WRAPPED_PMPI_CALL(int,MPI_Win_create_dynamic,( MPI_Info info, MPI_Comm comm, MPI_Win *win),(info, comm,win)) -WRAPPED_PMPI_CALL(int,MPI_Win_fence,( int assert,MPI_Win win),( assert, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_fence,( int assert,MPI_Win win),( assert, win)) WRAPPED_PMPI_CALL(int,MPI_Win_free,( MPI_Win* win),(win)) -WRAPPED_PMPI_CALL(int,MPI_Win_get_group,(MPI_Win win, MPI_Group * group),(win, group)) -WRAPPED_PMPI_CALL(int,MPI_Win_get_name,(MPI_Win win, char * name, int* len),(win,name,len)) -WRAPPED_PMPI_CALL(int,MPI_Win_get_info,(MPI_Win win, MPI_Info * info),(win,info)) -WRAPPED_PMPI_CALL(int,MPI_Win_post,(MPI_Group group, int assert, MPI_Win win),(group, assert, win)) -WRAPPED_PMPI_CALL(int,MPI_Win_set_name,(MPI_Win win, const char * name),(win, name)) -WRAPPED_PMPI_CALL(int,MPI_Win_set_info,(MPI_Win win, MPI_Info info),(win,info)) -WRAPPED_PMPI_CALL(int,MPI_Win_start,(MPI_Group group, int assert, MPI_Win win),(group, assert, win)) -WRAPPED_PMPI_CALL(int,MPI_Win_wait,(MPI_Win win),(win)) -WRAPPED_PMPI_CALL(int,MPI_Win_lock,(int lock_type, int rank, int assert, MPI_Win win) ,(lock_type, rank, assert, win)) -WRAPPED_PMPI_CALL(int,MPI_Win_unlock,(int rank, MPI_Win win),(rank, win)) -WRAPPED_PMPI_CALL(int,MPI_Win_lock_all,(int assert, MPI_Win win) ,(assert, win)) -WRAPPED_PMPI_CALL(int,MPI_Win_unlock_all,(MPI_Win win),(win)) -WRAPPED_PMPI_CALL(int,MPI_Win_flush,(int rank, MPI_Win win),(rank, win)) -WRAPPED_PMPI_CALL(int,MPI_Win_flush_local,(int rank, MPI_Win win),(rank, win)) -WRAPPED_PMPI_CALL(int,MPI_Win_flush_all,(MPI_Win win),(win)) -WRAPPED_PMPI_CALL(int,MPI_Win_flush_local_all,(MPI_Win win),(win)) -WRAPPED_PMPI_CALL(int,MPI_Win_get_attr, (MPI_Win type, int type_keyval, void *attribute_val, int* flag), (type, type_keyval, attribute_val, flag)) -WRAPPED_PMPI_CALL(int,MPI_Win_set_attr, (MPI_Win type, int type_keyval, void *att), (type, type_keyval, att)) -WRAPPED_PMPI_CALL(int,MPI_Win_delete_attr, (MPI_Win type, int comm_keyval), (type, comm_keyval)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_get_group,(MPI_Win win, MPI_Group * group),(win, group)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_get_name,(MPI_Win win, char * name, int* len),(win,name,len)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_get_info,(MPI_Win win, MPI_Info * info),(win,info)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_post,(MPI_Group group, int assert, MPI_Win win),(group, assert, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_set_name,(MPI_Win win, const char * name),(win, name)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_set_info,(MPI_Win win, MPI_Info info),(win,info)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_start,(MPI_Group group, int assert, MPI_Win win),(group, assert, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_wait,(MPI_Win win),(win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_lock,(int lock_type, int rank, int assert, MPI_Win win) ,(lock_type, rank, assert, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_unlock,(int rank, MPI_Win win),(rank, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_lock_all,(int assert, MPI_Win win) ,(assert, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_unlock_all,(MPI_Win win),(win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_flush,(int rank, MPI_Win win),(rank, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_flush_local,(int rank, MPI_Win win),(rank, win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_flush_all,(MPI_Win win),(win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_flush_local_all,(MPI_Win win),(win)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_get_attr, (MPI_Win win, int type_keyval, void *attribute_val, int* flag), (win, type_keyval, attribute_val, flag)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_set_attr, (MPI_Win win, int type_keyval, void *att), (win, type_keyval, att)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_delete_attr, (MPI_Win win, int comm_keyval), (win, comm_keyval)) WRAPPED_PMPI_CALL(int,MPI_Win_create_keyval,(MPI_Win_copy_attr_function* copy_fn, MPI_Win_delete_attr_function* delete_fn, int* keyval, void* extra_state), (copy_fn, delete_fn, keyval, extra_state)) WRAPPED_PMPI_CALL(int,MPI_Win_free_keyval,(int* keyval), (keyval)) -WRAPPED_PMPI_CALL(int,MPI_Win_shared_query,(MPI_Win win, int rank, MPI_Aint* size, int* disp_unit, void* baseptr),(win, rank, size, disp_unit, baseptr)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_shared_query,(MPI_Win win, int rank, MPI_Aint* size, int* disp_unit, void* baseptr),(win, rank, size, disp_unit, baseptr)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_set_errhandler,(MPI_Win win, MPI_Errhandler errhandler) ,(win, errhandler)) +WRAPPED_PMPI_CALL_ERRHANDLER_WIN(int,MPI_Win_call_errhandler,(MPI_Win win,int errorcode),(win, errorcode)) +WRAPPED_PMPI_CALL(int,MPI_Win_create_errhandler,( MPI_Win_errhandler_function *function, MPI_Errhandler *errhandler),( function, errhandler)) +WRAPPED_PMPI_CALL(int,MPI_Win_get_errhandler,(MPI_Win win, MPI_Errhandler* errhandler) ,(win, errhandler)) WRAPPED_PMPI_CALL_NORETURN(MPI_Comm, MPI_Comm_f2c,(MPI_Fint comm),(comm)) WRAPPED_PMPI_CALL_NORETURN(MPI_Datatype, MPI_Type_f2c,(MPI_Fint datatype),(datatype)) WRAPPED_PMPI_CALL_NORETURN(MPI_Fint, MPI_Comm_c2f,(MPI_Comm comm),(comm)) @@ -305,28 +332,32 @@ WRAPPED_PMPI_CALL(int,MPI_Status_set_elements,( MPI_Status *status, MPI_Datatype WRAPPED_PMPI_CALL(int, MPI_File_open,(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh),(comm, filename, amode, info, fh)) WRAPPED_PMPI_CALL(int, MPI_File_close,(MPI_File *fh), (fh)) WRAPPED_PMPI_CALL(int, MPI_File_delete,(const char *filename, MPI_Info info), (filename, info)) -WRAPPED_PMPI_CALL(int, MPI_File_set_info,(MPI_File fh, MPI_Info info), (fh, info)) -WRAPPED_PMPI_CALL(int, MPI_File_get_info,(MPI_File fh, MPI_Info *info_used), (fh, info_used)) -WRAPPED_PMPI_CALL(int, MPI_File_read_at,(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, offset, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_read_at_all,(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, offset, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_write_at,(MPI_File fh, MPI_Offset offset, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, offset, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_write_at_all,(MPI_File fh, MPI_Offset offset, const void *buf,int count, MPI_Datatype datatype, MPI_Status *status), (fh, offset, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_read,(MPI_File fh, void *buf, int count,MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_read_all,(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_write,(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_write_all,(MPI_File fh, const void *buf, int count,MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_seek,(MPI_File fh, MPI_Offset offset, int whenace), (fh, offset, whenace)) -WRAPPED_PMPI_CALL(int, MPI_File_get_position,(MPI_File fh, MPI_Offset *offset), (fh, offset)) -WRAPPED_PMPI_CALL(int, MPI_File_read_shared,(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_write_shared,(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_read_ordered,(MPI_File fh, void *buf, int count,MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_write_ordered,(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) -WRAPPED_PMPI_CALL(int, MPI_File_seek_shared,(MPI_File fh, MPI_Offset offset, int whence), (fh, offset, whence)) -WRAPPED_PMPI_CALL(int, MPI_File_get_position_shared,(MPI_File fh, MPI_Offset *offset), (fh, offset)) -WRAPPED_PMPI_CALL(int, MPI_File_get_size,(MPI_File fh, MPI_Offset *size), (fh, size)) -WRAPPED_PMPI_CALL(int, MPI_File_get_group,(MPI_File fh, MPI_Group *group), (fh, group)) -WRAPPED_PMPI_CALL(int, MPI_File_get_amode,(MPI_File fh, int *amode), (fh, amode)) -WRAPPED_PMPI_CALL(int, MPI_File_sync,(MPI_File fh), (fh)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_set_info,(MPI_File fh, MPI_Info info), (fh, info)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_get_info,(MPI_File fh, MPI_Info *info_used), (fh, info_used)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_read_at,(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, offset, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_read_at_all,(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, offset, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_write_at,(MPI_File fh, MPI_Offset offset, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, offset, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_write_at_all,(MPI_File fh, MPI_Offset offset, const void *buf,int count, MPI_Datatype datatype, MPI_Status *status), (fh, offset, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_read,(MPI_File fh, void *buf, int count,MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_read_all,(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_write,(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_write_all,(MPI_File fh, const void *buf, int count,MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_seek,(MPI_File fh, MPI_Offset offset, int whenace), (fh, offset, whenace)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_get_position,(MPI_File fh, MPI_Offset *offset), (fh, offset)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_read_shared,(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_write_shared,(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_read_ordered,(MPI_File fh, void *buf, int count,MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_write_ordered,(MPI_File fh, const void *buf, int count, MPI_Datatype datatype, MPI_Status *status), (fh, buf, count, datatype, status)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_seek_shared,(MPI_File fh, MPI_Offset offset, int whence), (fh, offset, whence)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_get_position_shared,(MPI_File fh, MPI_Offset *offset), (fh, offset)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_get_size,(MPI_File fh, MPI_Offset *size), (fh, size)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_get_group,(MPI_File fh, MPI_Group *group), (fh, group)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_get_amode,(MPI_File fh, int *amode), (fh, amode)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_sync,(MPI_File fh), (fh)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_call_errhandler,(MPI_File fh, int errorcode), (fh, errorcode)) +WRAPPED_PMPI_CALL(int, MPI_File_create_errhandler,(MPI_File_errhandler_function *function, MPI_Errhandler *errhandler),(function, errhandler)) +WRAPPED_PMPI_CALL(int, MPI_File_set_errhandler,( MPI_File file, MPI_Errhandler errhandler), (file, errhandler)) +WRAPPED_PMPI_CALL(int, MPI_File_get_errhandler,( MPI_File file, MPI_Errhandler *errhandler), (file, errhandler)) /* Unimplemented Calls - both PMPI and MPI calls are generated. @@ -345,29 +376,17 @@ UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Buffer_detach,(void* buffer, int* size) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Cart_map,(MPI_Comm comm_old, int ndims, const int* dims, const int* periods, int* newrank) ,(comm_old, ndims, dims, periods, newrank)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Close_port,(const char *port_name),( port_name)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Comm_accept,(const char *port_name, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *newcomm),( port_name, info, root, comm, newcomm)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Comm_call_errhandler,(MPI_Comm comm,int errorcode),(comm, errorcode)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Comm_connect,(const char *port_name, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *newcomm),( port_name, info, root, comm, newcomm)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Comm_create_errhandler,( MPI_Comm_errhandler_fn *function, MPI_Errhandler *errhandler),( function, errhandler)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Comm_get_errhandler,(MPI_Comm comm, MPI_Errhandler* errhandler) ,(comm, errhandler)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Comm_get_parent,( MPI_Comm *parent),( parent)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Comm_join,( int fd, MPI_Comm *intercomm),( fd, intercomm)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Comm_remote_group,(MPI_Comm comm, MPI_Group* group) ,(comm, group)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Comm_remote_size,(MPI_Comm comm, int* size) ,(comm, size)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Comm_set_errhandler,(MPI_Comm comm, MPI_Errhandler errhandler) ,(comm, errhandler)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Comm_spawn,(const char *command, char **argv, int maxprocs, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *intercomm, int* array_of_errcodes),( command, argv, maxprocs, info, root, comm, intercomm, array_of_errcodes)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Comm_spawn_multiple,(int count, char **array_of_commands, char*** array_of_argv, int* array_of_maxprocs, MPI_Info* array_of_info, int root, MPI_Comm comm, MPI_Comm *intercomm, int* array_of_errcodes), (count, array_of_commands, array_of_argv, array_of_maxprocs, array_of_info, root, comm, intercomm, array_of_errcodes)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Comm_test_inter,(MPI_Comm comm, int* flag) ,(comm, flag)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Errhandler_create,(MPI_Handler_function* function, MPI_Errhandler* errhandler) ,(function, errhandler)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Errhandler_free,(MPI_Errhandler* errhandler) ,(errhandler)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Errhandler_get,(MPI_Comm comm, MPI_Errhandler* errhandler) ,(comm, errhandler)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Errhandler_set,(MPI_Comm comm, MPI_Errhandler errhandler) ,(comm, errhandler)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Register_datarep, (char *datarep, MPI_Datarep_conversion_function *read_conversion_fn, MPI_Datarep_conversion_function *write_conversion_fn, MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state) ,(datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(MPI_Fint, MPI_File_c2f,(MPI_File file), (file)) //UNIMPLEMENTED_WRAPPED_PMPI_CALL(MPI_File, MPI_File_f2c,(MPI_Fint file), (file)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_call_errhandler,(MPI_File fh, int errorcode), (fh, errorcode)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_create_errhandler,(MPI_File_errhandler_function *function, MPI_Errhandler *errhandler),(function, errhandler)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int, MPI_File_set_errhandler,( MPI_File file, MPI_Errhandler errhandler), (file, errhandler)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int, MPI_File_get_errhandler,( MPI_File file, MPI_Errhandler *errhandler), (file, errhandler)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_set_size,(MPI_File fh, MPI_Offset size), (fh, size)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_preallocate,(MPI_File fh, MPI_Offset size), (fh, size)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_set_view,(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, const char *datarep, MPI_Info info), (fh, disp, etype, filetype, datarep, info)) @@ -421,11 +440,8 @@ UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Type_get_envelope,( MPI_Datatype datatyp UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Type_match_size,(int typeclass,int size,MPI_Datatype *datatype),(typeclass,size,datatype)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Unpack_external,(char *datarep, void *inbuf, MPI_Aint insize, MPI_Aint *position, void *outbuf, int outcount, MPI_Datatype datatype),( datarep, inbuf, insize, position, outbuf, outcount, datatype)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Unpublish_name,( char *service_name, MPI_Info info, char *port_name),( service_name, info, port_name)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Win_set_errhandler,(MPI_Win win, MPI_Errhandler errhandler) ,(win, errhandler)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Win_test,(MPI_Win win, int *flag),(win, flag)) UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(int,MPI_Win_sync,(MPI_Win win),(win)) -//UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(MPI_Errhandler, MPI_Errhandler_f2c,(MPI_Fint errhandler),(errhandler)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL_NOFAIL(MPI_Fint, MPI_Errhandler_c2f,(MPI_Errhandler errhandler),(errhandler)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Mprobe,(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status* status) ,(source, tag, comm, message, status)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Mrecv,(void *buf, int count, MPI_Datatype datatype, MPI_Message *message, MPI_Status* status),(buf, count, datatype, message, status)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int,MPI_Improbe,(int source, int tag, MPI_Comm comm, int* flag, MPI_Message *message, MPI_Status* status) ,(source, tag, comm, flag, message, status)) diff --git a/src/smpi/bindings/smpi_pmpi.cpp b/src/smpi/bindings/smpi_pmpi.cpp index 663ac17434..2b8f28e299 100644 --- a/src/smpi/bindings/smpi_pmpi.cpp +++ b/src/smpi/bindings/smpi_pmpi.cpp @@ -232,3 +232,15 @@ int PMPI_Keyval_create(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_f int PMPI_Keyval_free(int* keyval) { return simgrid::smpi::Keyval::keyval_free(keyval); } + +MPI_Errhandler PMPI_Errhandler_f2c(MPI_Fint errhan){ + if(errhan==-1) + return MPI_ERRHANDLER_NULL; + return static_cast(simgrid::smpi::Errhandler::f2c(errhan)); +} + +MPI_Fint PMPI_Errhandler_c2f(MPI_Errhandler errhan){ + if(errhan==MPI_ERRHANDLER_NULL) + return -1; + return errhan->c2f(); +} diff --git a/src/smpi/bindings/smpi_pmpi_comm.cpp b/src/smpi/bindings/smpi_pmpi_comm.cpp index cc75503412..19d511ad25 100644 --- a/src/smpi/bindings/smpi_pmpi_comm.cpp +++ b/src/smpi/bindings/smpi_pmpi_comm.cpp @@ -8,6 +8,7 @@ #include "private.hpp" #include "smpi_comm.hpp" #include "smpi_info.hpp" +#include "smpi_errhandler.hpp" #include "src/smpi/include/smpi_actor.hpp" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(smpi_pmpi); @@ -333,3 +334,54 @@ int PMPI_Attr_put(MPI_Comm comm, int keyval, void* attr_value) { else return comm->attr_put(keyval, attr_value); } + +int PMPI_Errhandler_free(MPI_Errhandler* errhandler){ + if (errhandler==nullptr){ + return MPI_ERR_ARG; + } + simgrid::smpi::Errhandler::unref(*errhandler); + return MPI_SUCCESS; +} + +int PMPI_Errhandler_create(MPI_Handler_function* function, MPI_Errhandler* errhandler){ + *errhandler=new simgrid::smpi::Errhandler(function); + return MPI_SUCCESS; +} + +int PMPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler* errhandler){ + if (comm == nullptr) { + return MPI_ERR_COMM; + } else if (errhandler==nullptr){ + return MPI_ERR_ARG; + } + *errhandler=comm->errhandler(); + return MPI_SUCCESS; +} + +int PMPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler){ + if (comm == nullptr) { + return MPI_ERR_COMM; + } else if (errhandler==nullptr){ + return MPI_ERR_ARG; + } + comm->set_errhandler(errhandler); + return MPI_SUCCESS; +} + +int PMPI_Comm_call_errhandler(MPI_Comm comm,int errorcode){ + if (comm == nullptr) { + return MPI_ERR_COMM; + } + comm->errhandler()->call(comm, errorcode); + return MPI_SUCCESS; +} + +int PMPI_Comm_create_errhandler( MPI_Comm_errhandler_fn *function, MPI_Errhandler *errhandler){ + return MPI_Errhandler_create(function, errhandler); +} +int PMPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler* errhandler){ + return PMPI_Errhandler_get(comm, errhandler); +} +int PMPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler){ + return PMPI_Errhandler_set(comm, errhandler); +} diff --git a/src/smpi/bindings/smpi_pmpi_file.cpp b/src/smpi/bindings/smpi_pmpi_file.cpp index 068bbbf1d6..42e336a011 100644 --- a/src/smpi/bindings/smpi_pmpi_file.cpp +++ b/src/smpi/bindings/smpi_pmpi_file.cpp @@ -363,3 +363,36 @@ int PMPI_File_sync(MPI_File fh) fh->sync(); return MPI_SUCCESS; } + +int PMPI_File_create_errhandler(MPI_File_errhandler_function* function, MPI_Errhandler* errhandler){ + *errhandler=new simgrid::smpi::Errhandler(function); + return MPI_SUCCESS; +} + +int PMPI_File_get_errhandler(MPI_File file, MPI_Errhandler* errhandler){ + if (file == nullptr) { + return MPI_ERR_FILE; + } else if (errhandler==nullptr){ + return MPI_ERR_ARG; + } + *errhandler=file->errhandler(); + return MPI_SUCCESS; +} + +int PMPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler){ + if (file == nullptr) { + return MPI_ERR_FILE; + } else if (errhandler==nullptr){ + return MPI_ERR_ARG; + } + file->set_errhandler(errhandler); + return MPI_SUCCESS; +} + +int PMPI_File_call_errhandler(MPI_File file,int errorcode){ + if (file == nullptr) { + return MPI_ERR_WIN; + } + file->errhandler()->call(file, errorcode); + return MPI_SUCCESS; +} diff --git a/src/smpi/bindings/smpi_pmpi_win.cpp b/src/smpi/bindings/smpi_pmpi_win.cpp index c833206a80..32abd4ef65 100644 --- a/src/smpi/bindings/smpi_pmpi_win.cpp +++ b/src/smpi/bindings/smpi_pmpi_win.cpp @@ -849,3 +849,36 @@ MPI_Fint PMPI_Win_c2f(MPI_Win win){ return -1; return win->c2f(); } + +int PMPI_Win_create_errhandler(MPI_Win_errhandler_function* function, MPI_Errhandler* errhandler){ + *errhandler=new simgrid::smpi::Errhandler(function); + return MPI_SUCCESS; +} + +int PMPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler* errhandler){ + if (win == nullptr) { + return MPI_ERR_WIN; + } else if (errhandler==nullptr){ + return MPI_ERR_ARG; + } + *errhandler=win->errhandler(); + return MPI_SUCCESS; +} + +int PMPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler){ + if (win == nullptr) { + return MPI_ERR_WIN; + } else if (errhandler==nullptr){ + return MPI_ERR_ARG; + } + win->set_errhandler(errhandler); + return MPI_SUCCESS; +} + +int PMPI_Win_call_errhandler(MPI_Win win,int errorcode){ + if (win == nullptr) { + return MPI_ERR_WIN; + } + win->errhandler()->call(win, errorcode); + return MPI_SUCCESS; +} diff --git a/src/smpi/include/private.hpp b/src/smpi/include/private.hpp index 4b0db692d1..8e1588f13c 100644 --- a/src/smpi/include/private.hpp +++ b/src/smpi/include/private.hpp @@ -340,12 +340,12 @@ void mpi_graph_neighbors_count_(int* comm, int* rank, int* nneighbors, int* ierr void mpi_graphdims_get_(int* comm, int* nnodes, int* nedges, int* ierr); void mpi_topo_test_(int* comm, int* top_type, int* ierr); void mpi_error_class_(int* errorcode, int* errorclass, int* ierr); -void mpi_errhandler_create_(void* function, void* errhandler, int* ierr); -void mpi_errhandler_free_(void* errhandler, int* ierr); -void mpi_errhandler_get_(int* comm, void* errhandler, int* ierr); -void mpi_errhandler_set_(int* comm, void* errhandler, int* ierr); -void mpi_comm_set_errhandler_(int* comm, void* errhandler, int* ierr); -void mpi_comm_get_errhandler_(int* comm, void* errhandler, int* ierr); +void mpi_errhandler_create_(void* function, int* errhandler, int* ierr); +void mpi_errhandler_free_(int* errhandler, int* ierr); +void mpi_errhandler_get_(int* comm, int* errhandler, int* ierr); +void mpi_errhandler_set_(int* comm, int* errhandler, int* ierr); +void mpi_comm_set_errhandler_(int* comm, int* errhandler, int* ierr); +void mpi_comm_get_errhandler_(int* comm, int* errhandler, int* ierr); void mpi_type_contiguous_(int* count, int* old_type, int* newtype, int* ierr); void mpi_cancel_(int* request, int* ierr); void mpi_buffer_attach_(void* buffer, int* size, int* ierr); @@ -406,7 +406,7 @@ void mpi_comm_split_type_(int* comm, int* split_type, int* key, int* info, int* void mpi_comm_set_info_(int* comm, int* info, int* ierr); void mpi_comm_get_info_(int* comm, int* info, int* ierr); void mpi_info_get_(int* info, char* key, int* valuelen, char* value, int* flag, int* ierr, unsigned int keylen); -void mpi_comm_create_errhandler_(void* function, void* errhandler, int* ierr); +void mpi_comm_create_errhandler_(void* function, int* errhandler, int* ierr); void mpi_add_error_class_(int* errorclass, int* ierr); void mpi_add_error_code_(int* errorclass, int* errorcode, int* ierr); void mpi_add_error_string_(int* errorcode, char* string, int* ierr); diff --git a/src/smpi/include/smpi_comm.hpp b/src/smpi/include/smpi_comm.hpp index 27d71bd63e..828b752367 100644 --- a/src/smpi/include/smpi_comm.hpp +++ b/src/smpi/include/smpi_comm.hpp @@ -8,6 +8,7 @@ #include #include +#include "smpi_errhandler.hpp" #include "smpi_keyvals.hpp" #include "smpi_group.hpp" #include "smpi_topo.hpp" @@ -32,6 +33,7 @@ class Comm : public F2C, public Keyval{ std::string name_; MPI_Info info_; int id_; + MPI_Errhandler errhandler_; public: static std::unordered_map keyvals_; @@ -50,6 +52,8 @@ public: void set_name(const char* name); MPI_Info info(); void set_info( MPI_Info info); + MPI_Errhandler errhandler(); + void set_errhandler( MPI_Errhandler errhandler); void set_leaders_comm(MPI_Comm leaders); void set_intra_comm(MPI_Comm leaders) { intra_comm_ = leaders; }; int* get_non_uniform_map(); diff --git a/src/smpi/include/smpi_errhandler.hpp b/src/smpi/include/smpi_errhandler.hpp new file mode 100644 index 0000000000..61750edba5 --- /dev/null +++ b/src/smpi/include/smpi_errhandler.hpp @@ -0,0 +1,39 @@ +/* Copyright (c) 2010-2019. The SimGrid Team. + * All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#ifndef SMPI_ERRHANDLER_HPP_INCLUDED +#define SMPI_ERRHANDLER_HPP_INCLUDED +#include "smpi_f2c.hpp" +#include + + +namespace simgrid{ +namespace smpi{ + +class Errhandler: public F2C { + private: + int refcount_ = 1; + MPI_Comm_errhandler_fn* comm_func_=nullptr; + MPI_File_errhandler_fn* file_func_=nullptr; + MPI_Win_errhandler_fn* win_func_=nullptr; + public: + Errhandler() = default; + explicit Errhandler(MPI_Comm_errhandler_fn *function):comm_func_(function){}; + explicit Errhandler(MPI_File_errhandler_fn *function):file_func_(function){}; + explicit Errhandler(MPI_Win_errhandler_fn *function):win_func_(function){}; + void ref(); + void call(MPI_Comm comm, int errorcode); + void call(MPI_Win win, int errorcode); + void call(MPI_File file, int errorcode); + static void unref(Errhandler* errhandler); + static Errhandler* f2c(int id); + +}; + +} +} + +#endif \ No newline at end of file diff --git a/src/smpi/include/smpi_file.hpp b/src/smpi/include/smpi_file.hpp index 97ef812ab9..3feb57f696 100644 --- a/src/smpi/include/smpi_file.hpp +++ b/src/smpi/include/smpi_file.hpp @@ -10,6 +10,7 @@ #include "smpi_comm.hpp" #include "smpi_coll.hpp" #include "smpi_datatype.hpp" +#include "smpi_errhandler.hpp" #include "smpi_info.hpp" #include @@ -26,6 +27,8 @@ class File{ s4u::MutexPtr shared_mutex_; MPI_Win win_; char* list_; + MPI_Errhandler errhandler_; + public: File(MPI_Comm comm, const char *filename, int amode, MPI_Info info); File(const File&) = delete; @@ -50,6 +53,8 @@ class File{ template int op_all(void *buf, int count,MPI_Datatype datatype, MPI_Status *status); static int close(MPI_File *fh); static int del(const char *filename, MPI_Info info); + MPI_Errhandler errhandler(); + void set_errhandler( MPI_Errhandler errhandler); }; /* Read_all, Write_all : loosely based on */ diff --git a/src/smpi/include/smpi_win.hpp b/src/smpi/include/smpi_win.hpp index d067226a82..54862977f6 100644 --- a/src/smpi/include/smpi_win.hpp +++ b/src/smpi/include/smpi_win.hpp @@ -8,6 +8,7 @@ #define SMPI_WIN_HPP_INCLUDED #include "simgrid/s4u/Barrier.hpp" +#include "smpi_errhandler.hpp" #include "smpi_f2c.hpp" #include "smpi_keyvals.hpp" #include "xbt/synchro.h" @@ -40,6 +41,7 @@ class Win : public F2C, public Keyval { int mode_; // exclusive or shared lock int allocated_; int dynamic_; + MPI_Errhandler errhandler_; public: static std::unordered_map keyvals_; @@ -92,6 +94,8 @@ public: int finish_comms(); int finish_comms(int rank); int shared_query(int rank, MPI_Aint* size, int* disp_unit, void* baseptr); + MPI_Errhandler errhandler(); + void set_errhandler( MPI_Errhandler errhandler); }; diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index 5621fb0e7c..8144ad9d14 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -98,9 +98,6 @@ static std::vector privatize_libs_paths; * See smpi_comm.cpp and the functions therein for details. */ MPI_Comm MPI_COMM_WORLD = MPI_COMM_UNINITIALIZED; -MPI_Errhandler *MPI_ERRORS_RETURN = nullptr; -MPI_Errhandler *MPI_ERRORS_ARE_FATAL = nullptr; -MPI_Errhandler *MPI_ERRHANDLER_NULL = nullptr; // No instance gets manually created; check also the smpirun.in script as // this default name is used there as well (when the tag is generated). static const std::string smpi_default_instance_name("smpirun"); diff --git a/src/smpi/mpi/smpi_comm.cpp b/src/smpi/mpi/smpi_comm.cpp index b03c34043b..a670b30bcd 100644 --- a/src/smpi/mpi/smpi_comm.cpp +++ b/src/smpi/mpi/smpi_comm.cpp @@ -39,6 +39,7 @@ Comm::Comm(MPI_Group group, MPI_Topology topo, int smp, int in_id) : group_(grou leaders_map_ = nullptr; is_blocked_ = 0; info_ = MPI_INFO_NULL; + errhandler_ = MPI_ERRORS_RETURN; static int global_id_=0; //First creation of comm is done before SIMIX_run, so only do comms for others if(in_id==MPI_UNDEFINED && smp==0 && this->rank()!=MPI_UNDEFINED ){ @@ -106,6 +107,8 @@ int Comm::dup(MPI_Comm* newcomm){ //duplicate info if present if(info_!=MPI_INFO_NULL) (*newcomm)->info_ = new simgrid::smpi::Info(info_); + //duplicate errhandler + (*newcomm)->set_errhandler(errhandler_); return ret; } @@ -547,6 +550,16 @@ void Comm::set_info(MPI_Info info){ info_=info; } +MPI_Errhandler Comm::errhandler(){ + return errhandler_; +} + +void Comm::set_errhandler(MPI_Errhandler errhandler){ + errhandler_=errhandler; + if(errhandler_!= MPI_ERRHANDLER_NULL) + errhandler->ref(); +} + MPI_Comm Comm::split_type(int type, int /*key*/, MPI_Info) { //MPI_UNDEFINED can be given to some nodes... but we need them to still perform the smp part which is collective diff --git a/src/smpi/mpi/smpi_errhandler.cpp b/src/smpi/mpi/smpi_errhandler.cpp new file mode 100644 index 0000000000..43df91e5d6 --- /dev/null +++ b/src/smpi/mpi/smpi_errhandler.cpp @@ -0,0 +1,53 @@ +/* Copyright (c) 2007-2019. The SimGrid Team. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#include "smpi_errhandler.hpp" +#include "private.hpp" + +#include + +simgrid::smpi::Errhandler mpi_MPI_ERRORS_RETURN; +MPI_Errhandler MPI_ERRORS_RETURN=&mpi_MPI_ERRORS_RETURN; +simgrid::smpi::Errhandler mpi_MPI_ERRORS_ARE_FATAL; +MPI_Errhandler MPI_ERRORS_ARE_FATAL=&mpi_MPI_ERRORS_ARE_FATAL; + +namespace simgrid{ +namespace smpi{ + +MPI_Errhandler Errhandler::f2c(int id) { + if(F2C::f2c_lookup() != nullptr && id >= 0) { + char key[KEY_SIZE]; + return static_cast(F2C::f2c_lookup()->at(get_key(key, id))); + } else { + return static_cast(MPI_ERRHANDLER_NULL); + } +} + +void Errhandler::call(MPI_Comm comm, int errorcode){ + comm_func_(&comm, &errorcode); +} + +void Errhandler::call(MPI_Win win, int errorcode){ + win_func_(&win, &errorcode); +} + +void Errhandler::call(MPI_File file, int errorcode){ + file_func_(&file, &errorcode); +} + +void Errhandler::ref() +{ + refcount_++; +} + +void Errhandler::unref(Errhandler* errhandler){ + errhandler->refcount_--; + if(errhandler->refcount_==0){ + delete errhandler; + } +} + +} +} diff --git a/src/smpi/mpi/smpi_file.cpp b/src/smpi/mpi/smpi_file.cpp index 25fd3ec79c..a7d4c60283 100644 --- a/src/smpi/mpi/smpi_file.cpp +++ b/src/smpi/mpi/smpi_file.cpp @@ -28,6 +28,7 @@ namespace smpi{ if (comm_->rank() == 0) { int size= comm_->size() + FP_SIZE; list_ = new char[size]; + errhandler_=MPI_ERRORS_RETURN; memset(list_, 0, size); shared_file_pointer_ = new MPI_Offset(); shared_mutex_ = s4u::Mutex::create(); @@ -244,5 +245,15 @@ namespace smpi{ MPI_Comm File::comm(){ return comm_; } + + MPI_Errhandler File::errhandler(){ + return errhandler_; + } + + void File::set_errhandler(MPI_Errhandler errhandler){ + errhandler_=errhandler; + if(errhandler_!= MPI_ERRHANDLER_NULL) + errhandler->ref(); + } } } diff --git a/src/smpi/mpi/smpi_win.cpp b/src/smpi/mpi/smpi_win.cpp index 095f870611..6ba1b1c12a 100644 --- a/src/smpi/mpi/smpi_win.cpp +++ b/src/smpi/mpi/smpi_win.cpp @@ -42,7 +42,7 @@ Win::Win(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, bar_ = new s4u::Barrier(comm_size); } mode_=0; - + errhandler_=MPI_ERRORS_RETURN; comm->add_rma_win(this); comm->ref(); @@ -737,5 +737,16 @@ int Win::shared_query(int rank, MPI_Aint* size, int* disp_unit, void* baseptr) } return MPI_SUCCESS; } + +MPI_Errhandler Win::errhandler(){ + return errhandler_; +} + +void Win::set_errhandler(MPI_Errhandler errhandler){ + errhandler_=errhandler; + if(errhandler_!= MPI_ERRHANDLER_NULL) + errhandler->ref(); +} + } } diff --git a/teshsuite/smpi/mpich3-test/rma/CMakeLists.txt b/teshsuite/smpi/mpich3-test/rma/CMakeLists.txt index de3194a64e..d4b2710373 100644 --- a/teshsuite/smpi/mpich3-test/rma/CMakeLists.txt +++ b/teshsuite/smpi/mpich3-test/rma/CMakeLists.txt @@ -11,7 +11,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite) include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/") foreach(file accfence1 accfence2_am accfence2 accpscw1 allocmem epochtest getfence1 getgroup manyrma3 nullpscw lockcontention lockopts contig_displ - putfence1 putfidx putpscw1 test1_am test1 test1_dt test2_am test2 test3 test3_am test4 test4_am test5_am test5 transpose1 transpose2 lockcontention2 + putfence1 putfidx putpscw1 test1_am test1 test1_dt test2_am test2 test3 test3_am test4 test4_am test5_am test5 transpose1 transpose2 lockcontention2 wincall transpose3 transpose4 transpose5 transpose6 transpose7 window_creation selfrma locknull win_info at_complete acc-pairtype manyget large-small-acc lock_dt win_dynamic_acc fetch_and_op flush req_example rmanull rmazero badrma lock_nested winname attrorderwin baseattrwin fkeyvalwin strided_acc_indexed strided_getacc_indexed compare_and_swap diff --git a/teshsuite/smpi/mpich3-test/rma/testlist b/teshsuite/smpi/mpich3-test/rma/testlist index 8a90ca96a6..6f920efdbf 100644 --- a/teshsuite/smpi/mpich3-test/rma/testlist +++ b/teshsuite/smpi/mpich3-test/rma/testlist @@ -55,8 +55,7 @@ test1_dt 2 timeLimit=30 #Needs post/start nullpscw 7 attrorderwin 1 -#Needs MPI_Win_call_errhandler -#wincall 2 +wincall 2 baseattrwin 1 fkeyvalwin 1 selfrma 1 diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index e8b8b96fb2..297daab0a5 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -100,6 +100,7 @@ set(SMPI_SRC src/smpi/mpi/smpi_comm.cpp src/smpi/mpi/smpi_datatype.cpp src/smpi/mpi/smpi_datatype_derived.cpp + src/smpi/mpi/smpi_errhandler.cpp src/smpi/mpi/smpi_f2c.cpp src/smpi/mpi/smpi_file.cpp src/smpi/mpi/smpi_group.cpp @@ -115,6 +116,7 @@ set(SMPI_SRC src/smpi/include/smpi_comm.hpp src/smpi/include/smpi_datatype_derived.hpp src/smpi/include/smpi_datatype.hpp + src/smpi/include/smpi_errhandler.hpp src/smpi/include/smpi_f2c.hpp src/smpi/include/smpi_file.hpp src/smpi/include/smpi_group.hpp