Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
generalize previous change to other MPI predefined globals.
authorAugustin Degomme <adegomme@users.noreply.github.com>
Mon, 8 Mar 2021 08:10:07 +0000 (09:10 +0100)
committerAugustin Degomme <adegomme@users.noreply.github.com>
Mon, 8 Mar 2021 08:10:07 +0000 (09:10 +0100)
Except MPI_COMM_WORLD because of its specificities (has to be a variable)

include/smpi/smpi.h
src/smpi/mpi/smpi_errhandler.cpp
src/smpi/mpi/smpi_group.cpp
src/smpi/mpi/smpi_op.cpp

index da78005..d9dfe7d 100644 (file)
@@ -402,27 +402,45 @@ typedef void MPI_User_function(void *invec, void *inoutvec, int *len, MPI_Dataty
 typedef SMPI_Op *MPI_Op;
 
 #define MPI_OP_NULL ((MPI_Op)NULL)
-XBT_PUBLIC_DATA MPI_Op MPI_MAX;
-XBT_PUBLIC_DATA MPI_Op MPI_MIN;
-XBT_PUBLIC_DATA MPI_Op MPI_MAXLOC;
-XBT_PUBLIC_DATA MPI_Op MPI_MINLOC;
-XBT_PUBLIC_DATA MPI_Op MPI_SUM;
-XBT_PUBLIC_DATA MPI_Op MPI_PROD;
-XBT_PUBLIC_DATA MPI_Op MPI_LAND;
-XBT_PUBLIC_DATA MPI_Op MPI_LOR;
-XBT_PUBLIC_DATA MPI_Op MPI_LXOR;
-XBT_PUBLIC_DATA MPI_Op MPI_BAND;
-XBT_PUBLIC_DATA MPI_Op MPI_BOR;
-XBT_PUBLIC_DATA MPI_Op MPI_BXOR;
+extern SMPI_Op smpi_MPI_MAX;
+extern SMPI_Op smpi_MPI_MIN;
+extern SMPI_Op smpi_MPI_MAXLOC;
+extern SMPI_Op smpi_MPI_MINLOC;
+extern SMPI_Op smpi_MPI_SUM;
+extern SMPI_Op smpi_MPI_PROD;
+extern SMPI_Op smpi_MPI_LAND;
+extern SMPI_Op smpi_MPI_LOR;
+extern SMPI_Op smpi_MPI_LXOR;
+extern SMPI_Op smpi_MPI_BAND;
+extern SMPI_Op smpi_MPI_BOR;
+extern SMPI_Op smpi_MPI_BXOR;
+extern SMPI_Op smpi_MPI_REPLACE;
+extern SMPI_Op smpi_MPI_NO_OP;
+
+#define MPI_MAX SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_MAX)
+#define MPI_MIN SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_MIN)
+#define MPI_MAXLOC SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_MAXLOC)
+#define MPI_MINLOC SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_MINLOC)
+#define MPI_SUM SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_SUM)
+#define MPI_PROD SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_PROD)
+#define MPI_LAND SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_LAND)
+#define MPI_LOR SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_LOR)
+#define MPI_LXOR SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_LXOR)
+#define MPI_BAND SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_BAND)
+#define MPI_BOR SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_BOR)
+#define MPI_BXOR SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_BXOR)
+
 //For accumulate
-XBT_PUBLIC_DATA MPI_Op MPI_REPLACE;
-XBT_PUBLIC_DATA MPI_Op MPI_NO_OP;
+#define MPI_REPLACE SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_REPLACE)
+#define MPI_NO_OP SMPI_PREDEFINED_POINTER(MPI_Op, smpi_MPI_NO_OP)
+
 
 typedef SMPI_Group* MPI_Group;
 
-#define MPI_GROUP_NULL ((MPI_Group)NULL)
+extern SMPI_Group smpi_MPI_GROUP_EMPTY;
+#define MPI_GROUP_EMPTY SMPI_PREDEFINED_POINTER(MPI_Group, smpi_MPI_GROUP_EMPTY)
 
-XBT_PUBLIC_DATA MPI_Group MPI_GROUP_EMPTY;
+#define MPI_GROUP_NULL ((MPI_Group)NULL)
 
 typedef SMPI_Comm* MPI_Comm;
 
@@ -438,8 +456,10 @@ typedef SMPI_Request* MPI_Request;
 
 typedef SMPI_Errhandler* MPI_Errhandler;
 #define MPI_ERRHANDLER_NULL ((MPI_Errhandler)NULL)
-XBT_PUBLIC_DATA MPI_Errhandler MPI_ERRORS_RETURN;
-XBT_PUBLIC_DATA MPI_Errhandler MPI_ERRORS_ARE_FATAL;
+extern SMPI_Errhandler smpi_MPI_ERRORS_RETURN;
+#define MPI_ERRORS_RETURN SMPI_PREDEFINED_POINTER(MPI_Errhandler, smpi_MPI_ERRORS_RETURN)
+extern SMPI_Errhandler smpi_MPI_ERRORS_ARE_FATAL;
+#define MPI_ERRORS_ARE_FATAL SMPI_PREDEFINED_POINTER(MPI_Errhandler, smpi_MPI_ERRORS_ARE_FATAL)
 
 typedef enum SMPI_Combiner_enum{
   MPI_COMBINER_NAMED,
index 9e237d4..c62d844 100644 (file)
@@ -8,10 +8,8 @@
 
 #include <cstdio>
 
-simgrid::smpi::Errhandler mpi_MPI_ERRORS_RETURN;
-MPI_Errhandler MPI_ERRORS_RETURN=&mpi_MPI_ERRORS_RETURN;
-simgrid::smpi::Errhandler mpi_MPI_ERRORS_ARE_FATAL;
-MPI_Errhandler MPI_ERRORS_ARE_FATAL=&mpi_MPI_ERRORS_ARE_FATAL;
+simgrid::smpi::Errhandler smpi_MPI_ERRORS_RETURN;
+simgrid::smpi::Errhandler smpi_MPI_ERRORS_ARE_FATAL;
 
 namespace simgrid{
 namespace smpi{
index b3916ed..e01112f 100644 (file)
@@ -8,8 +8,7 @@
 #include "smpi_comm.hpp"
 #include <string>
 
-simgrid::smpi::Group mpi_MPI_GROUP_EMPTY;
-MPI_Group MPI_GROUP_EMPTY=&mpi_MPI_GROUP_EMPTY;
+simgrid::smpi::Group smpi_MPI_GROUP_EMPTY;
 extern XBT_PRIVATE MPI_Comm MPI_COMM_UNINITIALIZED;
 
 namespace simgrid{
index b67f40f..cda3387 100644 (file)
@@ -217,23 +217,22 @@ static void no_func(void*, void*, int*, MPI_Datatype*)
 }
 
 #define CREATE_MPI_OP(name, func)                                                                                      \
-  static SMPI_Op _XBT_CONCAT(mpi_, name)(&(func) /* func */, true, true);                                              \
-  MPI_Op name = &_XBT_CONCAT(mpi_, name);
-
-CREATE_MPI_OP(MPI_MAX, max_func)
-CREATE_MPI_OP(MPI_MIN, min_func)
-CREATE_MPI_OP(MPI_SUM, sum_func)
-CREATE_MPI_OP(MPI_PROD, prod_func)
-CREATE_MPI_OP(MPI_LAND, land_func)
-CREATE_MPI_OP(MPI_LOR, lor_func)
-CREATE_MPI_OP(MPI_LXOR, lxor_func)
-CREATE_MPI_OP(MPI_BAND, band_func)
-CREATE_MPI_OP(MPI_BOR, bor_func)
-CREATE_MPI_OP(MPI_BXOR, bxor_func)
-CREATE_MPI_OP(MPI_MAXLOC, maxloc_func)
-CREATE_MPI_OP(MPI_MINLOC, minloc_func)
-CREATE_MPI_OP(MPI_REPLACE, replace_func)
-CREATE_MPI_OP(MPI_NO_OP, no_func)
+  SMPI_Op _XBT_CONCAT(smpi_MPI_, name)(&(func) /* func */, true, true);                                              \
+
+CREATE_MPI_OP(MAX, max_func)
+CREATE_MPI_OP(MIN, min_func)
+CREATE_MPI_OP(SUM, sum_func)
+CREATE_MPI_OP(PROD, prod_func)
+CREATE_MPI_OP(LAND, land_func)
+CREATE_MPI_OP(LOR, lor_func)
+CREATE_MPI_OP(LXOR, lxor_func)
+CREATE_MPI_OP(BAND, band_func)
+CREATE_MPI_OP(BOR, bor_func)
+CREATE_MPI_OP(BXOR, bxor_func)
+CREATE_MPI_OP(MAXLOC, maxloc_func)
+CREATE_MPI_OP(MINLOC, minloc_func)
+CREATE_MPI_OP(REPLACE, replace_func)
+CREATE_MPI_OP(NO_OP, no_func)
 
 namespace simgrid{
 namespace smpi{