Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
support MPI_CXX types.
authorAugustin Degomme <adegomme@users.noreply.github.com>
Fri, 26 Mar 2021 00:57:18 +0000 (01:57 +0100)
committerAugustin Degomme <adegomme@users.noreply.github.com>
Fri, 26 Mar 2021 00:58:47 +0000 (01:58 +0100)
As SMPI is in C++, that's basically free ..

ChangeLog
include/smpi/smpi.h
src/smpi/mpi/smpi_datatype.cpp

index 35e708f..e39ed89 100644 (file)
--- 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
index f3cdf0e..4544882 100644 (file)
@@ -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
index fbadce3..860257b 100644 (file)
@@ -15,6 +15,7 @@
 #include <array>
 #include <functional>
 #include <string>
+#include <complex>
 
 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<float>)
+CREATE_MPI_DATATYPE(CXX_DOUBLE_COMPLEX, 53, std::complex<double>)
+CREATE_MPI_DATATYPE(CXX_LONG_DOUBLE_COMPLEX, 54, std::complex<long double>)
+
+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;