From: degomme Date: Tue, 15 Jul 2014 16:28:21 +0000 (+0200) Subject: Add MPI_Type_set_name and MPI_Type_get_name and activate tests X-Git-Tag: v3_12~902 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/6a1582e115b08d0012c289028cab7cd112167e3a Add MPI_Type_set_name and MPI_Type_get_name and activate tests --- diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 330e94781f..34ec68e228 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -204,7 +204,7 @@ XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT16_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT32_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT64_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT8_T; -#define MPI_BYTE MPI_UINT8_T +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_BYTE; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT16_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT32_T; XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT64_T; @@ -226,6 +226,19 @@ XBT_PUBLIC_DATA(MPI_Datatype) MPI_LONG_DOUBLE_INT; XBT_PUBLIC_DATA(MPI_Datatype) MPI_2FLOAT; XBT_PUBLIC_DATA(MPI_Datatype) MPI_2DOUBLE; XBT_PUBLIC_DATA(MPI_Datatype) MPI_2LONG;//only for compatibility with Fortran + +XBT_PUBLIC_DATA(MPI_Datatype) MPI_REAL4; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_REAL8; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_REAL16; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_COMPLEX8; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_COMPLEX16; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_COMPLEX32; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER1; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER2; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER4; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER8; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_INTEGER16; + //for now we only send int values at max #define MPI_Count int #define MPI_COUNT MPI_INT @@ -240,14 +253,7 @@ XBT_PUBLIC_DATA(MPI_Datatype) MPI_2LONG;//only for compatibility with Fortran #define MPI_2INTEGER MPI_2LONG #define MPI_LOGICAL MPI_LONG #endif -#define MPI_INTEGER1 MPI_INT -#define MPI_INTEGER2 MPI_INT16_T -#define MPI_INTEGER4 MPI_INT32_T -#define MPI_INTEGER8 MPI_INT64_T -#define MPI_REAL MPI_FLOAT -#define MPI_REAL4 MPI_FLOAT -#define MPI_REAL8 MPI_DOUBLE -#define MPI_REAL16 MPI_DOUBLE + #define MPI_COMPLEX MPI_C_FLOAT_COMPLEX #define MPI_DOUBLE_COMPLEX MPI_C_DOUBLE_COMPLEX #define MPI_LOGICAL1 MPI_UINT8_T @@ -258,9 +264,7 @@ XBT_PUBLIC_DATA(MPI_Datatype) MPI_2LONG;//only for compatibility with Fortran #define MPI_CHARACTER MPI_CHAR #define MPI_DOUBLE_PRECISION MPI_DOUBLE #define MPI_2DOUBLE_PRECISION MPI_2DOUBLE -#define MPI_COMPLEX8 MPI_DATATYPE_NULL -#define MPI_COMPLEX16 MPI_DATATYPE_NULL -#define MPI_COMPLEX32 MPI_DATATYPE_NULL + typedef void MPI_User_function(void *invec, void *inoutvec, int *len, diff --git a/src/smpi/private.h b/src/smpi/private.h index 9196cd1e2b..9e57d523f1 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -49,6 +49,7 @@ typedef struct s_smpi_subtype{ } s_smpi_subtype_t; typedef struct s_smpi_mpi_datatype{ + char* name; size_t size; /* this let us know if a serialization is required*/ size_t has_subtype; @@ -183,6 +184,8 @@ MPI_Datatype smpi_datatype_dup(MPI_Datatype datatype); int smpi_datatype_extent(MPI_Datatype datatype, MPI_Aint * lb, MPI_Aint * extent); MPI_Aint smpi_datatype_get_extent(MPI_Datatype datatype); +void smpi_datatype_get_name(MPI_Datatype datatype, char* name, int* length); +void smpi_datatype_set_name(MPI_Datatype datatype, char* name); int smpi_datatype_copy(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype); diff --git a/src/smpi/smpi_mpi_dt.c b/src/smpi/smpi_mpi_dt.c index 7ce041dc92..923193b576 100644 --- a/src/smpi/smpi_mpi_dt.c +++ b/src/smpi/smpi_mpi_dt.c @@ -22,6 +22,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_mpi_dt, smpi, #define CREATE_MPI_DATATYPE(name, type) \ static s_smpi_mpi_datatype_t mpi_##name = { \ + (char*) # name, \ sizeof(type), /* size */ \ 0, /*was 1 has_subtype*/ \ 0, /* lb */ \ @@ -33,6 +34,7 @@ MPI_Datatype name = &mpi_##name; #define CREATE_MPI_DATATYPE_NULL(name) \ static s_smpi_mpi_datatype_t mpi_##name = { \ + (char*) # name, \ 0, /* size */ \ 0, /*was 1 has_subtype*/ \ 0, /* lb */ \ @@ -79,7 +81,10 @@ typedef struct { long double value; int index; } long_double_int; - +typedef struct { + int64_t value; + int64_t index; +} integer128_t; // Predefined data types CREATE_MPI_DATATYPE(MPI_CHAR, char); CREATE_MPI_DATATYPE(MPI_SHORT, short); @@ -97,6 +102,7 @@ CREATE_MPI_DATATYPE(MPI_DOUBLE, double); CREATE_MPI_DATATYPE(MPI_LONG_DOUBLE, long double); CREATE_MPI_DATATYPE(MPI_WCHAR, wchar_t); CREATE_MPI_DATATYPE(MPI_C_BOOL, _Bool); +CREATE_MPI_DATATYPE(MPI_BYTE, int8_t); CREATE_MPI_DATATYPE(MPI_INT8_T, int8_t); CREATE_MPI_DATATYPE(MPI_INT16_T, int16_t); CREATE_MPI_DATATYPE(MPI_INT32_T, int32_t); @@ -120,6 +126,18 @@ CREATE_MPI_DATATYPE(MPI_2FLOAT, float_float); CREATE_MPI_DATATYPE(MPI_2DOUBLE, double_double); CREATE_MPI_DATATYPE(MPI_2LONG, long_long); +CREATE_MPI_DATATYPE(MPI_REAL4, float); +CREATE_MPI_DATATYPE(MPI_REAL8, float); +CREATE_MPI_DATATYPE(MPI_REAL16, double); +CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX8); +CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX16); +CREATE_MPI_DATATYPE_NULL(MPI_COMPLEX32); +CREATE_MPI_DATATYPE(MPI_INTEGER1, int); +CREATE_MPI_DATATYPE(MPI_INTEGER2, int16_t); +CREATE_MPI_DATATYPE(MPI_INTEGER4, int32_t); +CREATE_MPI_DATATYPE(MPI_INTEGER8, int64_t); +CREATE_MPI_DATATYPE(MPI_INTEGER16, integer128_t); + CREATE_MPI_DATATYPE(MPI_LONG_DOUBLE_INT, long_double_int); CREATE_MPI_DATATYPE_NULL(MPI_UB); @@ -156,6 +174,8 @@ MPI_Datatype smpi_datatype_dup(MPI_Datatype datatype) memcpy(new_t, datatype, sizeof(s_smpi_mpi_datatype_t)); if (datatype->has_subtype) memcpy(new_t->substruct, datatype->substruct, sizeof(s_smpi_subtype_t)); + if(datatype->name) + new_t->name = strdup(datatype->name); return new_t; } @@ -171,6 +191,15 @@ MPI_Aint smpi_datatype_get_extent(MPI_Datatype datatype){ return datatype->ub - datatype->lb; } +void smpi_datatype_get_name(MPI_Datatype datatype, char* name, int* length){ + *length = strlen(datatype->name); + strcpy(name, datatype->name); +} + +void smpi_datatype_set_name(MPI_Datatype datatype, char* name){ + datatype->name = strdup(name);; +} + int smpi_datatype_copy(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype) { @@ -319,6 +348,7 @@ s_smpi_mpi_vector_t* smpi_datatype_vector_create( int block_stride, void smpi_datatype_create(MPI_Datatype* new_type, int size,int lb, int ub, int has_subtype, void *struct_type, int flags){ MPI_Datatype new_t= xbt_new(s_smpi_mpi_datatype_t,1); + new_t->name = NULL; new_t->size = size; new_t->has_subtype = size>0? has_subtype:0; new_t->lb = lb; @@ -348,6 +378,9 @@ void smpi_datatype_free(MPI_Datatype* type){ ((s_smpi_subtype_t *)(*type)->substruct)->subtype_free(type); xbt_free((*type)->substruct); } + if ((*type)->name != NULL){ + xbt_free((*type)->name); + } xbt_free(*type); *type = MPI_DATATYPE_NULL; } diff --git a/src/smpi/smpi_pmpi.c b/src/smpi/smpi_pmpi.c index 5d7836022a..b278f07936 100644 --- a/src/smpi/smpi_pmpi.c +++ b/src/smpi/smpi_pmpi.c @@ -2848,7 +2848,34 @@ int PMPI_Free_mem(void *baseptr){ return MPI_SUCCESS; } +int PMPI_Type_set_name(MPI_Datatype datatype, char * name) +{ + int retval = 0; + if (datatype == MPI_DATATYPE_NULL) { + retval = MPI_ERR_TYPE; + } else if (name == NULL) { + retval = MPI_ERR_ARG; + } else { + smpi_datatype_set_name(datatype, name); + retval = MPI_SUCCESS; + } + return retval; +} +int PMPI_Type_get_name(MPI_Datatype datatype, char * name, int* len) +{ + int retval = 0; + + if (datatype == MPI_DATATYPE_NULL) { + retval = MPI_ERR_TYPE; + } else if (name == NULL) { + retval = MPI_ERR_ARG; + } else { + smpi_datatype_get_name(datatype, name, len); + retval = MPI_SUCCESS; + } + return retval; +} /* The following calls are not yet implemented and will fail at runtime. */ /* Once implemented, please move them above this notice. */ @@ -2858,15 +2885,7 @@ int PMPI_Free_mem(void *baseptr){ return MPI_SUCCESS; \ } -int PMPI_Type_set_name(MPI_Datatype datatype, char * name) -{ - NOT_YET_IMPLEMENTED -} -int PMPI_Type_get_name(MPI_Datatype datatype, char * name, int* len) -{ - NOT_YET_IMPLEMENTED -} int PMPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int* size) { NOT_YET_IMPLEMENTED diff --git a/teshsuite/smpi/mpich3-test/datatype/CMakeLists.txt b/teshsuite/smpi/mpich3-test/datatype/CMakeLists.txt index 83015326da..c3c28830e1 100644 --- a/teshsuite/smpi/mpich3-test/datatype/CMakeLists.txt +++ b/teshsuite/smpi/mpich3-test/datatype/CMakeLists.txt @@ -61,7 +61,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite) add_executable(typecommit typecommit.c) add_executable(typefree typefree.c) add_executable(typelb typelb.c) -# add_executable(typename typename.c) + add_executable(typename typename.c) # add_executable(unpack unpack.c) # add_executable(unusual-noncontigs unusual-noncontigs.c) # add_executable(zero-blklen-vector zero-blklen-vector.c) @@ -117,7 +117,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite) target_link_libraries(typecommit simgrid mtest_c) target_link_libraries(typefree simgrid mtest_c) target_link_libraries(typelb simgrid mtest_c) -# target_link_libraries(typename simgrid mtest_c) + target_link_libraries(typename simgrid mtest_c) # target_link_libraries(unpack simgrid mtest_c) # target_link_libraries(unusual-noncontigs simgrid mtest_c) # target_link_libraries(zero-blklen-vector simgrid mtest_c) diff --git a/teshsuite/smpi/mpich3-test/datatype/testlist b/teshsuite/smpi/mpich3-test/datatype/testlist index c319f73af3..cd073947fc 100644 --- a/teshsuite/smpi/mpich3-test/datatype/testlist +++ b/teshsuite/smpi/mpich3-test/datatype/testlist @@ -11,8 +11,7 @@ gaddress 1 #slice-pack 1 #struct-pack 1 typecommit 1 -#needs MPI_Type_get_name -#typename 1 +typename 1 typefree 1 zeroparms 1 #getpartelm 2 diff --git a/teshsuite/smpi/mpich3-test/include/mpitestconf.h b/teshsuite/smpi/mpich3-test/include/mpitestconf.h index 4eb4bb2c7a..2e073ada68 100644 --- a/teshsuite/smpi/mpich3-test/include/mpitestconf.h +++ b/teshsuite/smpi/mpich3-test/include/mpitestconf.h @@ -94,7 +94,7 @@ /* #undef HAVE_MPI_INIT_THREAD */ /* Define if MPI_INTEGER16 is available */ -/* #undef HAVE_MPI_INTEGER16 */ +#define HAVE_MPI_INTEGER16 1 /* Define if MPI-IO (really ROMIO) is included */ //#define HAVE_MPI_IO 1