From a9464c46c94fc3f90df7707c8e9b20d32b2d1911 Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Fri, 26 Mar 2021 01:57:18 +0100 Subject: [PATCH] support MPI_CXX types. As SMPI is in C++, that's basically free .. --- ChangeLog | 2 ++ include/smpi/smpi.h | 20 ++++++++++++++++---- src/smpi/mpi/smpi_datatype.cpp | 17 +++++++++++------ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 35e708f393..e39ed89dc4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -59,6 +59,8 @@ SMPI: to use for smpi/auto-shared-malloc-thresh option. - New implemented MPI calls: MPI_File_set_size, MPI_Aint_add, MPI_Aint_diff, MPI_Type_get_extent_x, MPI_Type_get_true_extent_x, MPI_Status_set_elements_x + - Support for MPI C++ datatypes (MPI_CXX_BOOL, MPI_CXX_FLOAT_COMPLEX, + MPI_CXX_DOUBLE_COMPLEX, MPI_CXX_LONG_DOUBLE_COMPLEX) - Misc fixes: - better handling of MPI_PROC_NULL - MPI_Group_incl was broken in some cases diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index f3cdf0ee90..4544882043 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -165,10 +165,6 @@ enum ERROR_ENUM { #define MPI_NULL_DELETE_FN NULL #define MPI_ERR_LASTCODE 74 -#define MPI_CXX_BOOL MPI_DATATYPE_NULL -#define MPI_CXX_FLOAT_COMPLEX MPI_DATATYPE_NULL -#define MPI_CXX_DOUBLE_COMPLEX MPI_DATATYPE_NULL -#define MPI_CXX_LONG_DOUBLE_COMPLEX MPI_DATATYPE_NULL #define MPI_REAL2 MPI_DATATYPE_NULL #define MPI_COMPLEX4 MPI_DATATYPE_NULL @@ -308,6 +304,10 @@ extern SMPI_Datatype smpi_MPI_INTEGER4; extern SMPI_Datatype smpi_MPI_INTEGER8; extern SMPI_Datatype smpi_MPI_INTEGER16; extern SMPI_Datatype smpi_MPI_COUNT; +extern SMPI_Datatype smpi_MPI_CXX_BOOL; +extern SMPI_Datatype smpi_MPI_MPI_CXX_FLOAT_COMPLEX; +extern SMPI_Datatype smpi_MPI_MPI_CXX_DOULE_COMPLEX; +extern SMPI_Datatype smpi_MPI_MPI_CXX_LONG_DOUBLE_COMPLEX; #define MPI_DATATYPE_NULL SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_DATATYPE_NULL) #define MPI_CHAR SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_CHAR) @@ -369,6 +369,18 @@ extern SMPI_Datatype smpi_MPI_COUNT; #define MPI_INTEGER16 SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_INTEGER16) #define MPI_COUNT SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_COUNT) +#if defined(c_plusplus) || defined(__cplusplus) +#define MPI_CXX_BOOL SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_CXX_BOOL) +#define MPI_CXX_FLOAT_COMPLEX SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_CXX_FLOAT_COMPLEX) +#define MPI_CXX_DOUBLE_COMPLEX SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_CXX_DOUBLE_COMPLEX) +#define MPI_CXX_LONG_DOUBLE_COMPLEX SMPI_PREDEFINED_POINTER(MPI_Datatype, smpi_MPI_CXX_LONG_DOUBLE_COMPLEX) +#else +#define MPI_CXX_BOOL MPI_DATATYPE_NULL +#define MPI_CXX_FLOAT_COMPLEX MPI_DATATYPE_NULL +#define MPI_CXX_DOUBLE_COMPLEX MPI_DATATYPE_NULL +#define MPI_CXX_LONG_DOUBLE_COMPLEX MPI_DATATYPE_NULL +#endif + //defines for fortran compatibility #if defined(__alpha__) || defined(__sparc64__) || defined(__x86_64__) || defined(__ia64__) || defined(__aarch64__) #define MPI_INTEGER MPI_INT diff --git a/src/smpi/mpi/smpi_datatype.cpp b/src/smpi/mpi/smpi_datatype.cpp index fbadce31c2..860257bf7e 100644 --- a/src/smpi/mpi/smpi_datatype.cpp +++ b/src/smpi/mpi/smpi_datatype.cpp @@ -15,6 +15,7 @@ #include #include #include +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_datatype, smpi, "Logging specific to SMPI (datatype)"); @@ -90,13 +91,17 @@ 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) +CREATE_MPI_DATATYPE(CXX_BOOL, 51, bool) +CREATE_MPI_DATATYPE(CXX_FLOAT_COMPLEX, 52, std::complex) +CREATE_MPI_DATATYPE(CXX_DOUBLE_COMPLEX, 53, std::complex) +CREATE_MPI_DATATYPE(CXX_LONG_DOUBLE_COMPLEX, 54, std::complex) + +CREATE_MPI_DATATYPE_NULL(UB, 55) +CREATE_MPI_DATATYPE_NULL(LB, 56) +CREATE_MPI_DATATYPE(PACKED, 57, char) // Internal use only -CREATE_MPI_DATATYPE(PTR, 54, void*) -CREATE_MPI_DATATYPE(COUNT, 55, long long) +CREATE_MPI_DATATYPE(PTR, 58, void*) +CREATE_MPI_DATATYPE(COUNT, 59, long long) MPI_Datatype MPI_PTR = &smpi_MPI_PTR; -- 2.20.1