As SMPI is in C++, that's basically free ..
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
#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
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)
#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
#include <array>
#include <functional>
#include <string>
+#include <complex>
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_datatype, smpi, "Logging specific to SMPI (datatype)");
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;