From: Augustin Degomme Date: Fri, 6 Jul 2018 12:19:09 +0000 (+0200) Subject: Have MPI_* send a debug messages whenever output is not MPI_SUCCESS X-Git-Tag: v3_21~553 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/715f1ab3817012946c01cda5d1e0a9deb9de4343 Have MPI_* send a debug messages whenever output is not MPI_SUCCESS Should help debugging quite a lot TODO - pass the message in WARNING - requalify teshes for this (some intentionally give bad params to test) - fix bugs in SMPI (already found one useless MPI_Attr_put call for example). --- diff --git a/src/smpi/bindings/smpi_mpi.cpp b/src/smpi/bindings/smpi_mpi.cpp index 2da03f31b4..e2c617ac2b 100644 --- a/src/smpi/bindings/smpi_mpi.cpp +++ b/src/smpi/bindings/smpi_mpi.cpp @@ -27,6 +27,21 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_mpi, smpi, "Logging specific to SMPI ,(mpi) } #define WRAPPED_PMPI_CALL(type, name, args, args2) \ + type name args \ + { \ + XBT_VERB("SMPI - Entering %s", __func__); \ + type ret = P##name args2; \ + if(ret!=MPI_SUCCESS) { \ + char error_string[MPI_MAX_ERROR_STRING]; \ + int error_size; \ + PMPI_Error_string(ret, error_string, &error_size); \ + XBT_DEBUG("%s - returned %.*s instead of MPI_SUCCESS", __func__, error_size,error_string); \ + } \ + XBT_VERB("SMPI - Leaving %s", __func__); \ + return ret; \ + } + +#define WRAPPED_PMPI_CALL_NORETURN(type, name, args, args2) \ type name args \ { \ XBT_VERB("SMPI - Entering %s", __func__); \ @@ -54,8 +69,8 @@ return P##name args2 ; \ /* MPI User level calls */ -WRAPPED_PMPI_CALL(double, MPI_Wtick,(void),()) -WRAPPED_PMPI_CALL(double, MPI_Wtime,(void),()) +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,( 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,(void *location, MPI_Aint * address),(location, address)) @@ -246,20 +261,20 @@ 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(MPI_Comm, MPI_Comm_f2c,(MPI_Fint comm),(comm)) -WRAPPED_PMPI_CALL(MPI_Datatype, MPI_Type_f2c,(MPI_Fint datatype),(datatype)) -WRAPPED_PMPI_CALL(MPI_Fint, MPI_Comm_c2f,(MPI_Comm comm),(comm)) -WRAPPED_PMPI_CALL(MPI_Fint, MPI_Group_c2f,(MPI_Group group),(group)) -WRAPPED_PMPI_CALL(MPI_Fint, MPI_Info_c2f,(MPI_Info info),(info)) -WRAPPED_PMPI_CALL(MPI_Fint, MPI_Op_c2f,(MPI_Op op),(op)) -WRAPPED_PMPI_CALL(MPI_Fint, MPI_Request_c2f,(MPI_Request request) ,(request)) -WRAPPED_PMPI_CALL(MPI_Fint, MPI_Type_c2f,(MPI_Datatype datatype),( datatype)) -WRAPPED_PMPI_CALL(MPI_Fint, MPI_Win_c2f,(MPI_Win win),(win)) -WRAPPED_PMPI_CALL(MPI_Group, MPI_Group_f2c,(MPI_Fint group),( group)) -WRAPPED_PMPI_CALL(MPI_Info, MPI_Info_f2c,(MPI_Fint info),(info)) -WRAPPED_PMPI_CALL(MPI_Op, MPI_Op_f2c,(MPI_Fint op),(op)) -WRAPPED_PMPI_CALL(MPI_Request, MPI_Request_f2c,(MPI_Fint request),(request)) -WRAPPED_PMPI_CALL(MPI_Win, MPI_Win_f2c,(MPI_Fint win),(win)) +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)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Fint, MPI_Group_c2f,(MPI_Group group),(group)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Fint, MPI_Info_c2f,(MPI_Info info),(info)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Fint, MPI_Op_c2f,(MPI_Op op),(op)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Fint, MPI_Request_c2f,(MPI_Request request) ,(request)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Fint, MPI_Type_c2f,(MPI_Datatype datatype),( datatype)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Fint, MPI_Win_c2f,(MPI_Win win),(win)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Group, MPI_Group_f2c,(MPI_Fint group),( group)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Info, MPI_Info_f2c,(MPI_Fint info),(info)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Op, MPI_Op_f2c,(MPI_Fint op),(op)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Request, MPI_Request_f2c,(MPI_Fint request),(request)) +WRAPPED_PMPI_CALL_NORETURN(MPI_Win, MPI_Win_f2c,(MPI_Fint win),(win)) WRAPPED_PMPI_CALL(int,MPI_Cancel,(MPI_Request* request) ,(request)) WRAPPED_PMPI_CALL(int, MPI_Test_cancelled,(MPI_Status* status, int* flag) ,(status, flag)) /*