From: Augustin Degomme Date: Mon, 8 Mar 2021 00:05:00 +0000 (+0100) Subject: change the way MPI datatypes are declared. X-Git-Tag: v3.27~224 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/0e4e8c06b0e29faa6be8391dfa8a1fe6fe5dd300 change the way MPI datatypes are declared. Our previous solution did not let everything seen as const, and it was preventing some codes to compile (initializer element is not constant). This allows to compile https://github.com/open-mpi/mpi-test-suite.git without changint the code (will be added in proxy apps) in tst_types.c todo : other types (op and co) --- diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 557d7eef74..da78005458 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -243,66 +243,131 @@ typedef SMPI_Info* MPI_Info; #define MPI_STATUSES_IGNORE ((MPI_Status*)NULL) #define MPI_STATUS_SIZE 5 -XBT_PUBLIC_DATA const MPI_Datatype MPI_DATATYPE_NULL; -XBT_PUBLIC_DATA const MPI_Datatype MPI_CHAR; -XBT_PUBLIC_DATA const MPI_Datatype MPI_SHORT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_INT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_LONG; -XBT_PUBLIC_DATA const MPI_Datatype MPI_LONG_LONG; +#if !defined(DLL_EXPORT) +#if defined(c_plusplus) || defined(__cplusplus) +#define SMPI_PREDEFINED_POINTER(type, internal) (static_cast (static_cast (&(internal)))) +#else +#define SMPI_PREDEFINED_POINTER(type, internal) ((type) ((void *) &(internal))) +#endif +#else +#define SMPI_PREDEFINED_POINTER(type, internal) ((type) &(internal)) +#endif + +extern SMPI_Datatype smpi_MPI_DATATYPE_NULL; +extern SMPI_Datatype smpi_MPI_CHAR; +extern SMPI_Datatype smpi_MPI_SHORT; +extern SMPI_Datatype smpi_MPI_INT; +extern SMPI_Datatype smpi_MPI_LONG; +extern SMPI_Datatype smpi_MPI_LONG_LONG; +extern SMPI_Datatype smpi_MPI_SIGNED_CHAR; +extern SMPI_Datatype smpi_MPI_UNSIGNED_CHAR; +extern SMPI_Datatype smpi_MPI_UNSIGNED_SHORT; +extern SMPI_Datatype smpi_MPI_UNSIGNED; +extern SMPI_Datatype smpi_MPI_UNSIGNED_LONG; +extern SMPI_Datatype smpi_MPI_UNSIGNED_LONG_LONG; +extern SMPI_Datatype smpi_MPI_FLOAT; +extern SMPI_Datatype smpi_MPI_DOUBLE; +extern SMPI_Datatype smpi_MPI_LONG_DOUBLE; +extern SMPI_Datatype smpi_MPI_WCHAR; +extern SMPI_Datatype smpi_MPI_C_BOOL; +extern SMPI_Datatype smpi_MPI_INT8_T; +extern SMPI_Datatype smpi_MPI_INT16_T; +extern SMPI_Datatype smpi_MPI_INT32_T; +extern SMPI_Datatype smpi_MPI_INT64_T; +extern SMPI_Datatype smpi_MPI_UINT8_T; +extern SMPI_Datatype smpi_MPI_BYTE; +extern SMPI_Datatype smpi_MPI_UINT16_T; +extern SMPI_Datatype smpi_MPI_UINT32_T; +extern SMPI_Datatype smpi_MPI_UINT64_T; +extern SMPI_Datatype smpi_MPI_C_FLOAT_COMPLEX; +extern SMPI_Datatype smpi_MPI_C_DOUBLE_COMPLEX; +extern SMPI_Datatype smpi_MPI_C_LONG_DOUBLE_COMPLEX; +extern SMPI_Datatype smpi_MPI_AINT; +extern SMPI_Datatype smpi_MPI_OFFSET; +extern SMPI_Datatype smpi_MPI_LB; +extern SMPI_Datatype smpi_MPI_UB; +extern SMPI_Datatype smpi_MPI_FLOAT_INT; +extern SMPI_Datatype smpi_MPI_LONG_INT; +extern SMPI_Datatype smpi_MPI_DOUBLE_INT; +extern SMPI_Datatype smpi_MPI_SHORT_INT; +extern SMPI_Datatype smpi_MPI_2INT; +extern SMPI_Datatype smpi_MPI_LONG_DOUBLE_INT; +extern SMPI_Datatype smpi_MPI_2FLOAT; +extern SMPI_Datatype smpi_MPI_2DOUBLE; +extern SMPI_Datatype smpi_MPI_2LONG; +extern SMPI_Datatype smpi_MPI_REAL; +extern SMPI_Datatype smpi_MPI_REAL4; +extern SMPI_Datatype smpi_MPI_REAL8; +extern SMPI_Datatype smpi_MPI_REAL16; +extern SMPI_Datatype smpi_MPI_COMPLEX8; +extern SMPI_Datatype smpi_MPI_COMPLEX16; +extern SMPI_Datatype smpi_MPI_COMPLEX32; +extern SMPI_Datatype smpi_MPI_INTEGER1; +extern SMPI_Datatype smpi_MPI_INTEGER2; +extern SMPI_Datatype smpi_MPI_INTEGER4; +extern SMPI_Datatype smpi_MPI_INTEGER8; +extern SMPI_Datatype smpi_MPI_INTEGER16; +extern SMPI_Datatype smpi_MPI_COUNT; + +#define MPI_DATATYPE_NULL SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_DATATYPE_NULL) +#define MPI_CHAR SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_CHAR) +#define MPI_SHORT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_SHORT) +#define MPI_INT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_INT) +#define MPI_LONG SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_LONG) +#define MPI_LONG_LONG SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_LONG_LONG) #define MPI_LONG_LONG_INT MPI_LONG_LONG -XBT_PUBLIC_DATA const MPI_Datatype MPI_SIGNED_CHAR; -XBT_PUBLIC_DATA const MPI_Datatype MPI_UNSIGNED_CHAR; -XBT_PUBLIC_DATA const MPI_Datatype MPI_UNSIGNED_SHORT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_UNSIGNED; -XBT_PUBLIC_DATA const MPI_Datatype MPI_UNSIGNED_LONG; -XBT_PUBLIC_DATA const MPI_Datatype MPI_UNSIGNED_LONG_LONG; -XBT_PUBLIC_DATA const MPI_Datatype MPI_FLOAT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_DOUBLE; -XBT_PUBLIC_DATA const MPI_Datatype MPI_LONG_DOUBLE; -XBT_PUBLIC_DATA const MPI_Datatype MPI_WCHAR; -XBT_PUBLIC_DATA const MPI_Datatype MPI_C_BOOL; -XBT_PUBLIC_DATA const MPI_Datatype MPI_INT8_T; -XBT_PUBLIC_DATA const MPI_Datatype MPI_INT16_T; -XBT_PUBLIC_DATA const MPI_Datatype MPI_INT32_T; -XBT_PUBLIC_DATA const MPI_Datatype MPI_INT64_T; -XBT_PUBLIC_DATA const MPI_Datatype MPI_UINT8_T; -XBT_PUBLIC_DATA const MPI_Datatype MPI_BYTE; -XBT_PUBLIC_DATA const MPI_Datatype MPI_UINT16_T; -XBT_PUBLIC_DATA const MPI_Datatype MPI_UINT32_T; -XBT_PUBLIC_DATA const MPI_Datatype MPI_UINT64_T; -XBT_PUBLIC_DATA const MPI_Datatype MPI_C_FLOAT_COMPLEX; +#define MPI_SIGNED_CHAR SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_SIGNED_CHAR) +#define MPI_UNSIGNED_CHAR SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_UNSIGNED_CHAR) +#define MPI_UNSIGNED_SHORT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_UNSIGNED_SHORT) +#define MPI_UNSIGNED SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_UNSIGNED) +#define MPI_UNSIGNED_LONG SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_UNSIGNED_LONG) +#define MPI_UNSIGNED_LONG_LONG SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_UNSIGNED_LONG_LONG) +#define MPI_FLOAT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_FLOAT) +#define MPI_DOUBLE SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_DOUBLE) +#define MPI_LONG_DOUBLE SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_LONG_DOUBLE) +#define MPI_WCHAR SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_WCHAR) +#define MPI_C_BOOL SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_C_BOOL) +#define MPI_INT8_T SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_INT8_T) +#define MPI_INT16_T SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_INT16_T) +#define MPI_INT32_T SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_INT32_T) +#define MPI_INT64_T SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_INT64_T) +#define MPI_UINT8_T SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_UINT8_T) +#define MPI_BYTE SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_BYTE) +#define MPI_UINT16_T SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_UINT16_T) +#define MPI_UINT32_T SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_UINT32_T) +#define MPI_UINT64_T SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_UINT64_T) +#define MPI_C_FLOAT_COMPLEX SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_C_FLOAT_COMPLEX) #define MPI_C_COMPLEX MPI_C_FLOAT_COMPLEX -XBT_PUBLIC_DATA const MPI_Datatype MPI_C_DOUBLE_COMPLEX; -XBT_PUBLIC_DATA const MPI_Datatype MPI_C_LONG_DOUBLE_COMPLEX; -XBT_PUBLIC_DATA const MPI_Datatype MPI_AINT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_OFFSET; -XBT_PUBLIC_DATA const MPI_Datatype MPI_LB; -XBT_PUBLIC_DATA const MPI_Datatype MPI_UB; +#define MPI_C_DOUBLE_COMPLEX SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_C_DOUBLE_COMPLEX) +#define MPI_C_LONG_DOUBLE_COMPLEX SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_C_LONG_DOUBLE_COMPLEX) +#define MPI_AINT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_AINT) +#define MPI_OFFSET SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_OFFSET) +#define MPI_LB SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_LB) +#define MPI_UB SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_UB) //The following are datatypes for the MPI functions MPI_MAXLOC and MPI_MINLOC. -XBT_PUBLIC_DATA const MPI_Datatype MPI_FLOAT_INT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_LONG_INT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_DOUBLE_INT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_SHORT_INT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_2INT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_LONG_DOUBLE_INT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_2FLOAT; -XBT_PUBLIC_DATA const MPI_Datatype MPI_2DOUBLE; -XBT_PUBLIC_DATA const MPI_Datatype MPI_2LONG; // only for compatibility with Fortran - -XBT_PUBLIC_DATA const MPI_Datatype MPI_REAL; -XBT_PUBLIC_DATA const MPI_Datatype MPI_REAL4; -XBT_PUBLIC_DATA const MPI_Datatype MPI_REAL8; -XBT_PUBLIC_DATA const MPI_Datatype MPI_REAL16; -XBT_PUBLIC_DATA const MPI_Datatype MPI_COMPLEX8; -XBT_PUBLIC_DATA const MPI_Datatype MPI_COMPLEX16; -XBT_PUBLIC_DATA const MPI_Datatype MPI_COMPLEX32; -XBT_PUBLIC_DATA const MPI_Datatype MPI_INTEGER1; -XBT_PUBLIC_DATA const MPI_Datatype MPI_INTEGER2; -XBT_PUBLIC_DATA const MPI_Datatype MPI_INTEGER4; -XBT_PUBLIC_DATA const MPI_Datatype MPI_INTEGER8; -XBT_PUBLIC_DATA const MPI_Datatype MPI_INTEGER16; - -XBT_PUBLIC_DATA const MPI_Datatype MPI_COUNT; +#define MPI_FLOAT_INT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_FLOAT_INT) +#define MPI_LONG_INT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_LONG_INT) +#define MPI_DOUBLE_INT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_DOUBLE_INT) +#define MPI_SHORT_INT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_SHORT_INT) +#define MPI_2INT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_2INT) +#define MPI_LONG_DOUBLE_INT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_LONG_DOUBLE_INT) +#define MPI_2FLOAT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_2FLOAT) +#define MPI_2DOUBLE SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_2DOUBLE) +#define MPI_2LONG SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_2LONG) + // only for compatibility with Fortran +#define MPI_REAL SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_REAL) +#define MPI_REAL4 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_REAL4) +#define MPI_REAL8 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_REAL8) +#define MPI_REAL16 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_REAL16) +#define MPI_COMPLEX8 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_COMPLEX8) +#define MPI_COMPLEX16 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_COMPLEX16) +#define MPI_COMPLEX32 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_COMPLEX32) +#define MPI_INTEGER1 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_INTEGER1) +#define MPI_INTEGER2 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_INTEGER2) +#define MPI_INTEGER4 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_INTEGER4) +#define MPI_INTEGER8 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_INTEGER8) +#define MPI_INTEGER16 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_INTEGER16) +#define MPI_COUNT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_COUNT) //defines for fortran compatibility #if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__) || defined(__aarch64__) @@ -898,7 +963,9 @@ typedef void* MPI_Message; #define MPI_TYPE_DUP_FN ((MPI_Type_copy_attr_function*)MPI_DUP_FN) #define MPI_COMM_DUP_FN ((MPI_Comm_copy_attr_function *)MPI_DUP_FN) #define MPI_INFO_ENV smpi_process_info_env() -XBT_PUBLIC_DATA const MPI_Datatype MPI_PACKED; +extern SMPI_Datatype smpi_MPI_PACKED; +#define MPI_PACKED SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_PACKED) + MPI_CALL(XBT_PUBLIC int, MPI_Cart_map, (MPI_Comm comm_old, int ndims, const int* dims, const int* periods, int* newrank)); MPI_CALL(XBT_PUBLIC int, MPI_Graph_create, diff --git a/src/smpi/include/smpi_datatype.hpp b/src/smpi/include/smpi_datatype.hpp index 5f7f2876e1..67ac906d84 100644 --- a/src/smpi/include/smpi_datatype.hpp +++ b/src/smpi/include/smpi_datatype.hpp @@ -30,7 +30,7 @@ constexpr unsigned DT_FLAG_DERIVED = 0x0800; /**< is the datatype derived ? constexpr unsigned DT_FLAG_BASIC = (DT_FLAG_PREDEFINED | DT_FLAG_CONTIGUOUS | DT_FLAG_NO_GAPS | DT_FLAG_DATA | DT_FLAG_COMMITED); -extern const MPI_Datatype MPI_PTR; +extern MPI_Datatype MPI_PTR; //The following are datatypes for the MPI functions MPI_MAXLOC and MPI_MINLOC. struct float_int { diff --git a/src/smpi/mpi/smpi_datatype.cpp b/src/smpi/mpi/smpi_datatype.cpp index 42ee36ce06..d0a9b890fe 100644 --- a/src/smpi/mpi/smpi_datatype.cpp +++ b/src/smpi/mpi/smpi_datatype.cpp @@ -21,84 +21,84 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_datatype, smpi, "Logging specific to SMPI ( static std::unordered_map id2type_lookup; #define CREATE_MPI_DATATYPE(name, id, type) \ - static simgrid::smpi::Datatype _XBT_CONCAT(mpi_, name)((char*)_XBT_STRINGIFY(name), (id), sizeof(type), /* size */ \ + simgrid::smpi::Datatype _XBT_CONCAT(smpi_MPI_, name)((char*)"MPI_"#name, (id), sizeof(type), /* size */ \ 0, /* lb */ \ sizeof(type), /* ub = lb + size */ \ DT_FLAG_BASIC /* flags */ \ - ); \ - const MPI_Datatype name = &_XBT_CONCAT(mpi_, name); + ); #define CREATE_MPI_DATATYPE_NULL(name, id) \ - static simgrid::smpi::Datatype _XBT_CONCAT(mpi_, name)((char*)_XBT_STRINGIFY(name), (id), 0, /* size */ \ + simgrid::smpi::Datatype _XBT_CONCAT(smpi_MPI_, name)((char*)"MPI_"#name, (id), 0, /* size */ \ 0, /* lb */ \ 0, /* ub = lb + size */ \ DT_FLAG_BASIC /* flags */ \ - ); \ - const MPI_Datatype name = &_XBT_CONCAT(mpi_, name); + ); // Predefined data types -CREATE_MPI_DATATYPE_NULL(MPI_DATATYPE_NULL, -1) -CREATE_MPI_DATATYPE(MPI_DOUBLE, 0, double) -CREATE_MPI_DATATYPE(MPI_INT, 1, int) -CREATE_MPI_DATATYPE(MPI_CHAR, 2, char) -CREATE_MPI_DATATYPE(MPI_SHORT, 3, short) -CREATE_MPI_DATATYPE(MPI_LONG, 4, long) -CREATE_MPI_DATATYPE(MPI_FLOAT, 5, float) -CREATE_MPI_DATATYPE(MPI_BYTE, 6, int8_t) -CREATE_MPI_DATATYPE(MPI_LONG_LONG, 7, long long) -CREATE_MPI_DATATYPE(MPI_SIGNED_CHAR, 8, signed char) -CREATE_MPI_DATATYPE(MPI_UNSIGNED_CHAR, 9, unsigned char) -CREATE_MPI_DATATYPE(MPI_UNSIGNED_SHORT, 10, unsigned short) -CREATE_MPI_DATATYPE(MPI_UNSIGNED, 11, unsigned int) -CREATE_MPI_DATATYPE(MPI_UNSIGNED_LONG, 12, unsigned long) -CREATE_MPI_DATATYPE(MPI_UNSIGNED_LONG_LONG, 13, unsigned long long) -CREATE_MPI_DATATYPE(MPI_LONG_DOUBLE, 14, long double) -CREATE_MPI_DATATYPE(MPI_WCHAR, 15, wchar_t) -CREATE_MPI_DATATYPE(MPI_C_BOOL, 16, bool) -CREATE_MPI_DATATYPE(MPI_INT8_T, 17, int8_t) -CREATE_MPI_DATATYPE(MPI_INT16_T, 18, int16_t) -CREATE_MPI_DATATYPE(MPI_INT32_T, 19, int32_t) -CREATE_MPI_DATATYPE(MPI_INT64_T, 20, int64_t) -CREATE_MPI_DATATYPE(MPI_UINT8_T, 21, uint8_t) -CREATE_MPI_DATATYPE(MPI_UINT16_T, 22, uint16_t) -CREATE_MPI_DATATYPE(MPI_UINT32_T, 23, uint32_t) -CREATE_MPI_DATATYPE(MPI_UINT64_T, 24, uint64_t) -CREATE_MPI_DATATYPE(MPI_C_FLOAT_COMPLEX, 25, float _Complex) -CREATE_MPI_DATATYPE(MPI_C_DOUBLE_COMPLEX, 26, double _Complex) -CREATE_MPI_DATATYPE(MPI_C_LONG_DOUBLE_COMPLEX, 27, long double _Complex) -CREATE_MPI_DATATYPE(MPI_AINT, 28, MPI_Aint) -CREATE_MPI_DATATYPE(MPI_OFFSET, 29, MPI_Offset) - -CREATE_MPI_DATATYPE(MPI_FLOAT_INT, 30, float_int) -CREATE_MPI_DATATYPE(MPI_LONG_INT, 31, long_int) -CREATE_MPI_DATATYPE(MPI_DOUBLE_INT, 32, double_int) -CREATE_MPI_DATATYPE(MPI_SHORT_INT, 33, short_int) -CREATE_MPI_DATATYPE(MPI_2INT, 34, int_int) -CREATE_MPI_DATATYPE(MPI_2FLOAT, 35, float_float) -CREATE_MPI_DATATYPE(MPI_2DOUBLE, 36, double_double) -CREATE_MPI_DATATYPE(MPI_2LONG, 37, long_long) - -CREATE_MPI_DATATYPE(MPI_REAL, 38, float) -CREATE_MPI_DATATYPE(MPI_REAL4, 39, float) -CREATE_MPI_DATATYPE(MPI_REAL8, 40, double) -CREATE_MPI_DATATYPE(MPI_REAL16, 41, long double) -CREATE_MPI_DATATYPE(MPI_COMPLEX8, 42, float_float) -CREATE_MPI_DATATYPE(MPI_COMPLEX16, 43, double_double) -CREATE_MPI_DATATYPE(MPI_COMPLEX32, 44, double_double) -CREATE_MPI_DATATYPE(MPI_INTEGER1, 45, int) -CREATE_MPI_DATATYPE(MPI_INTEGER2, 46, int16_t) -CREATE_MPI_DATATYPE(MPI_INTEGER4, 47, int32_t) -CREATE_MPI_DATATYPE(MPI_INTEGER8, 48, int64_t) -CREATE_MPI_DATATYPE(MPI_INTEGER16, 49, integer128_t) - -CREATE_MPI_DATATYPE(MPI_LONG_DOUBLE_INT, 50, long_double_int) - -CREATE_MPI_DATATYPE_NULL(MPI_UB, 51) -CREATE_MPI_DATATYPE_NULL(MPI_LB, 52) -CREATE_MPI_DATATYPE(MPI_PACKED, 53, char) +CREATE_MPI_DATATYPE_NULL(DATATYPE_NULL, -1) +CREATE_MPI_DATATYPE(DOUBLE, 0, double) +CREATE_MPI_DATATYPE(INT, 1, int) +CREATE_MPI_DATATYPE(CHAR, 2, char) +CREATE_MPI_DATATYPE(SHORT, 3, short) +CREATE_MPI_DATATYPE(LONG, 4, long) +CREATE_MPI_DATATYPE(FLOAT, 5, float) +CREATE_MPI_DATATYPE(BYTE, 6, int8_t) +CREATE_MPI_DATATYPE(LONG_LONG, 7, long long) +CREATE_MPI_DATATYPE(SIGNED_CHAR, 8, signed char) +CREATE_MPI_DATATYPE(UNSIGNED_CHAR, 9, unsigned char) +CREATE_MPI_DATATYPE(UNSIGNED_SHORT, 10, unsigned short) +CREATE_MPI_DATATYPE(UNSIGNED, 11, unsigned int) +CREATE_MPI_DATATYPE(UNSIGNED_LONG, 12, unsigned long) +CREATE_MPI_DATATYPE(UNSIGNED_LONG_LONG, 13, unsigned long long) +CREATE_MPI_DATATYPE(LONG_DOUBLE, 14, long double) +CREATE_MPI_DATATYPE(WCHAR, 15, wchar_t) +CREATE_MPI_DATATYPE(C_BOOL, 16, bool) +CREATE_MPI_DATATYPE(INT8_T, 17, int8_t) +CREATE_MPI_DATATYPE(INT16_T, 18, int16_t) +CREATE_MPI_DATATYPE(INT32_T, 19, int32_t) +CREATE_MPI_DATATYPE(INT64_T, 20, int64_t) +CREATE_MPI_DATATYPE(UINT8_T, 21, uint8_t) +CREATE_MPI_DATATYPE(UINT16_T, 22, uint16_t) +CREATE_MPI_DATATYPE(UINT32_T, 23, uint32_t) +CREATE_MPI_DATATYPE(UINT64_T, 24, uint64_t) +CREATE_MPI_DATATYPE(C_FLOAT_COMPLEX, 25, float _Complex) +CREATE_MPI_DATATYPE(C_DOUBLE_COMPLEX, 26, double _Complex) +CREATE_MPI_DATATYPE(C_LONG_DOUBLE_COMPLEX, 27, long double _Complex) +CREATE_MPI_DATATYPE(AINT, 28, MPI_Aint) +CREATE_MPI_DATATYPE(OFFSET, 29, MPI_Offset) + +CREATE_MPI_DATATYPE(FLOAT_INT, 30, float_int) +CREATE_MPI_DATATYPE(LONG_INT, 31, long_int) +CREATE_MPI_DATATYPE(DOUBLE_INT, 32, double_int) +CREATE_MPI_DATATYPE(SHORT_INT, 33, short_int) +CREATE_MPI_DATATYPE(2INT, 34, int_int) +CREATE_MPI_DATATYPE(2FLOAT, 35, float_float) +CREATE_MPI_DATATYPE(2DOUBLE, 36, double_double) +CREATE_MPI_DATATYPE(2LONG, 37, long_long) + +CREATE_MPI_DATATYPE(REAL, 38, float) +CREATE_MPI_DATATYPE(REAL4, 39, float) +CREATE_MPI_DATATYPE(REAL8, 40, double) +CREATE_MPI_DATATYPE(REAL16, 41, long double) +CREATE_MPI_DATATYPE(COMPLEX8, 42, float_float) +CREATE_MPI_DATATYPE(COMPLEX16, 43, double_double) +CREATE_MPI_DATATYPE(COMPLEX32, 44, double_double) +CREATE_MPI_DATATYPE(INTEGER1, 45, int) +CREATE_MPI_DATATYPE(INTEGER2, 46, int16_t) +CREATE_MPI_DATATYPE(INTEGER4, 47, int32_t) +CREATE_MPI_DATATYPE(INTEGER8, 48, int64_t) +CREATE_MPI_DATATYPE(INTEGER16, 49, integer128_t) + +CREATE_MPI_DATATYPE(LONG_DOUBLE_INT, 50, long_double_int) + +CREATE_MPI_DATATYPE_NULL(UB, 51) +CREATE_MPI_DATATYPE_NULL(LB, 52) +CREATE_MPI_DATATYPE(PACKED, 53, char) // Internal use only -CREATE_MPI_DATATYPE(MPI_PTR, 54, void*) -CREATE_MPI_DATATYPE(MPI_COUNT, 55, long long) +CREATE_MPI_DATATYPE(PTR, 54, void*) +CREATE_MPI_DATATYPE(COUNT, 55, long long) +MPI_Datatype MPI_PTR = &smpi_MPI_PTR; + namespace simgrid{ namespace smpi{