Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Generate error strings at the same time enum is generated.
[simgrid.git] / include / smpi / smpi.h
index 2bad6bd..f64d602 100644 (file)
@@ -8,10 +8,6 @@
 
 #include <unistd.h>
 #include <sys/time.h>
-#if _POSIX_TIMERS
-#include <time.h>
-#endif
-
 #include <simgrid/forward.h>
 #include <smpi/forward.hpp>
 #include <stddef.h>
@@ -51,80 +47,92 @@ SG_BEGIN_DECL()
 #define MPI_IN_PLACE (void *)-222
 
 // errorcodes
-#define MPI_SUCCESS                    0
-#define MPI_ERR_COMM                   1
-#define MPI_ERR_ARG                    2
-#define MPI_ERR_TYPE                   3
-#define MPI_ERR_REQUEST                4
-#define MPI_ERR_INTERN                 5
-#define MPI_ERR_COUNT                  6
-#define MPI_ERR_RANK                   7
-#define MPI_ERR_TAG                    8
-#define MPI_ERR_TRUNCATE               9
-#define MPI_ERR_GROUP                 10
-#define MPI_ERR_OP                    11
-#define MPI_ERR_OTHER                 12
-#define MPI_ERR_IN_STATUS             13
-#define MPI_ERR_PENDING               14
-#define MPI_ERR_BUFFER                15
-#define MPI_ERR_NAME                  16
-#define MPI_ERR_DIMS                  17
-#define MPI_ERR_TOPOLOGY              18
-#define MPI_ERR_NO_MEM                19
-#define MPI_ERR_WIN                   20
-#define MPI_ERR_INFO_VALUE            21
-#define MPI_ERR_INFO_KEY              22
-#define MPI_ERR_INFO_NOKEY            23
-#define MPI_ERR_ROOT                  24
-#define MPI_ERR_UNKNOWN               25
-#define MPI_ERR_KEYVAL                26
-#define MPI_ERR_BASE                  27
-#define MPI_ERR_SPAWN                 28
-#define MPI_ERR_PORT                  29
-#define MPI_ERR_SERVICE               30
-#define MPI_ERR_SIZE                  31
-#define MPI_ERR_DISP                  32
-#define MPI_ERR_INFO                  33
-#define MPI_ERR_LOCKTYPE              34
-#define MPI_ERR_ASSERT                35
-#define MPI_RMA_CONFLICT              36
-#define MPI_RMA_SYNC                  37
-#define MPI_ERR_FILE                  38
-#define MPI_ERR_NOT_SAME              39
-#define MPI_ERR_AMODE                 40
-#define MPI_ERR_UNSUPPORTED_DATAREP   41
-#define MPI_ERR_UNSUPPORTED_OPERATION 42
-#define MPI_ERR_NO_SUCH_FILE          43
-#define MPI_ERR_FILE_EXISTS           44
-#define MPI_ERR_BAD_FILE              45
-#define MPI_ERR_ACCESS                46
-#define MPI_ERR_NO_SPACE              47
-#define MPI_ERR_QUOTA                 48
-#define MPI_ERR_READ_ONLY             49
-#define MPI_ERR_FILE_IN_USE           50
-#define MPI_ERR_DUP_DATAREP           51
-#define MPI_ERR_CONVERSION            52
-#define MPI_ERR_IO                    53
-#define MPI_ERR_RMA_ATTACH            54
-#define MPI_ERR_RMA_CONFLICT          55
-#define MPI_ERR_RMA_RANGE             56
-#define MPI_ERR_RMA_SHARED            57
-#define MPI_ERR_RMA_SYNC              58
-#define MPI_ERR_RMA_FLAVOR            59
-#define MPI_T_ERR_CANNOT_INIT         60
-#define MPI_T_ERR_NOT_INITIALIZED     61
-#define MPI_T_ERR_MEMORY              62
-#define MPI_T_ERR_INVALID_INDEX       63
-#define MPI_T_ERR_INVALID_ITEM        64
-#define MPI_T_ERR_INVALID_SESSION     65
-#define MPI_T_ERR_INVALID_HANDLE      66
-#define MPI_T_ERR_OUT_OF_HANDLES      67
-#define MPI_T_ERR_OUT_OF_SESSIONS     68
-#define MPI_T_ERR_CVAR_SET_NOT_NOW    69
-#define MPI_T_ERR_CVAR_SET_NEVER      70
-#define MPI_T_ERR_PVAR_NO_WRITE       71
-#define MPI_T_ERR_PVAR_NO_STARTSTOP   72
-#define MPI_T_ERR_PVAR_NO_ATOMIC      73
+#define FOREACH_ERROR(ERROR)                    \
+          ERROR(MPI_SUCCESS)                    \
+          ERROR(MPI_ERR_COMM)                   \
+          ERROR(MPI_ERR_ARG)                    \
+          ERROR(MPI_ERR_TYPE)                   \
+          ERROR(MPI_ERR_REQUEST)                \
+          ERROR(MPI_ERR_INTERN)                 \
+          ERROR(MPI_ERR_COUNT)                  \
+          ERROR(MPI_ERR_RANK)                   \
+          ERROR(MPI_ERR_TAG)                    \
+          ERROR(MPI_ERR_TRUNCATE)               \
+          ERROR(MPI_ERR_GROUP)                  \
+          ERROR(MPI_ERR_OP)                     \
+          ERROR(MPI_ERR_OTHER)                  \
+          ERROR(MPI_ERR_IN_STATUS)              \
+          ERROR(MPI_ERR_PENDING)                \
+          ERROR(MPI_ERR_BUFFER)                 \
+          ERROR(MPI_ERR_NAME)                   \
+          ERROR(MPI_ERR_DIMS)                   \
+          ERROR(MPI_ERR_TOPOLOGY)               \
+          ERROR(MPI_ERR_NO_MEM)                 \
+          ERROR(MPI_ERR_WIN)                    \
+          ERROR(MPI_ERR_INFO_VALUE)             \
+          ERROR(MPI_ERR_INFO_KEY)               \
+          ERROR(MPI_ERR_INFO_NOKEY)             \
+          ERROR(MPI_ERR_ROOT)                   \
+          ERROR(MPI_ERR_UNKNOWN)                \
+          ERROR(MPI_ERR_KEYVAL)                 \
+          ERROR(MPI_ERR_BASE)                   \
+          ERROR(MPI_ERR_SPAWN)                  \
+          ERROR(MPI_ERR_PORT)                   \
+          ERROR(MPI_ERR_SERVICE)                \
+          ERROR(MPI_ERR_SIZE)                   \
+          ERROR(MPI_ERR_DISP)                   \
+          ERROR(MPI_ERR_INFO)                   \
+          ERROR(MPI_ERR_LOCKTYPE)               \
+          ERROR(MPI_ERR_ASSERT)                 \
+          ERROR(MPI_RMA_CONFLICT)               \
+          ERROR(MPI_RMA_SYNC)                   \
+          ERROR(MPI_ERR_FILE)                   \
+          ERROR(MPI_ERR_NOT_SAME)               \
+          ERROR(MPI_ERR_AMODE)                  \
+          ERROR(MPI_ERR_UNSUPPORTED_DATAREP)    \
+          ERROR(MPI_ERR_UNSUPPORTED_OPERATION)  \
+          ERROR(MPI_ERR_NO_SUCH_FILE)           \
+          ERROR(MPI_ERR_FILE_EXISTS)            \
+          ERROR(MPI_ERR_BAD_FILE)               \
+          ERROR(MPI_ERR_ACCESS)                 \
+          ERROR(MPI_ERR_NO_SPACE)               \
+          ERROR(MPI_ERR_QUOTA)                  \
+          ERROR(MPI_ERR_READ_ONLY)              \
+          ERROR(MPI_ERR_FILE_IN_USE)            \
+          ERROR(MPI_ERR_DUP_DATAREP)            \
+          ERROR(MPI_ERR_CONVERSION)             \
+          ERROR(MPI_ERR_IO)                     \
+          ERROR(MPI_ERR_RMA_ATTACH)             \
+          ERROR(MPI_ERR_RMA_CONFLICT)           \
+          ERROR(MPI_ERR_RMA_RANGE)              \
+          ERROR(MPI_ERR_RMA_SHARED)             \
+          ERROR(MPI_ERR_RMA_SYNC)               \
+          ERROR(MPI_ERR_RMA_FLAVOR)             \
+          ERROR(MPI_T_ERR_CANNOT_INIT)          \
+          ERROR(MPI_T_ERR_NOT_INITIALIZED)      \
+          ERROR(MPI_T_ERR_MEMORY)               \
+          ERROR(MPI_T_ERR_INVALID_INDEX)        \
+          ERROR(MPI_T_ERR_INVALID_ITEM)         \
+          ERROR(MPI_T_ERR_INVALID_SESSION)      \
+          ERROR(MPI_T_ERR_INVALID_HANDLE)       \
+          ERROR(MPI_T_ERR_OUT_OF_HANDLES)       \
+          ERROR(MPI_T_ERR_OUT_OF_SESSIONS)      \
+          ERROR(MPI_T_ERR_CVAR_SET_NOT_NOW)     \
+          ERROR(MPI_T_ERR_CVAR_SET_NEVER)       \
+          ERROR(MPI_T_ERR_PVAR_NO_WRITE)        \
+          ERROR(MPI_T_ERR_PVAR_NO_STARTSTOP)    \
+          ERROR(MPI_T_ERR_PVAR_NO_ATOMIC)
+
+#define GENERATE_ENUM(ENUM) ENUM,
+#define GENERATE_STRING(STRING) #STRING,
+
+enum ERROR_ENUM {
+    FOREACH_ERROR(GENERATE_ENUM)
+};
+
+static const char *smpi_error_string[] = {
+    FOREACH_ERROR(GENERATE_STRING)
+};
 
 #define MPI_ERRCODES_IGNORE (int *)0
 #define MPI_IDENT     0
@@ -202,6 +210,8 @@ SG_BEGIN_DECL()
 #define MPI_WIN_BASE -1
 #define MPI_WIN_SIZE -2
 #define MPI_WIN_DISP_UNIT -3
+#define MPI_WIN_CREATE_FLAVOR -4
+#define MPI_WIN_MODEL -5
 
 typedef ptrdiff_t MPI_Aint;
 typedef long long MPI_Offset;
@@ -217,6 +227,7 @@ typedef struct {
   int MPI_TAG;
   int MPI_ERROR;
   int count;
+  int cancelled;
 } MPI_Status;
 
 typedef SMPI_Win* MPI_Win;
@@ -225,7 +236,7 @@ typedef SMPI_Info* MPI_Info;
 #define MPI_STATUS_IGNORE ((MPI_Status*)NULL)
 #define MPI_STATUSES_IGNORE ((MPI_Status*)NULL)
 
-#define MPI_DATATYPE_NULL ((const MPI_Datatype)NULL)
+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;
@@ -312,6 +323,11 @@ XBT_PUBLIC_DATA const MPI_Datatype MPI_INTEGER16;
 #define MPI_DOUBLE_PRECISION MPI_DOUBLE
 #define MPI_2DOUBLE_PRECISION MPI_2DOUBLE
 
+#define MPI_WIN_FLAVOR_CREATE 0
+#define MPI_WIN_FLAVOR_ALLOCATE 1
+#define MPI_WIN_FLAVOR_DYNAMIC 2
+#define MPI_WIN_FLAVOR_SHARED 3
+
 typedef void MPI_User_function(void *invec, void *inoutvec, int *len, MPI_Datatype * datatype);
 typedef SMPI_Op *MPI_Op;
 
@@ -593,6 +609,8 @@ MPI_CALL(XBT_PUBLIC int, MPI_Win_create,
          (void* base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win* win));
 MPI_CALL(XBT_PUBLIC int, MPI_Win_allocate,
          (MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void* base, MPI_Win* win));
+MPI_CALL(XBT_PUBLIC int, MPI_Win_allocate_shared,
+         (MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void* base, MPI_Win* win));
 MPI_CALL(XBT_PUBLIC int, MPI_Win_create_dynamic, (MPI_Info info, MPI_Comm comm, MPI_Win* win));
 MPI_CALL(XBT_PUBLIC int, MPI_Win_attach, (MPI_Win win, void* base, MPI_Aint size));
 MPI_CALL(XBT_PUBLIC int, MPI_Win_detach, (MPI_Win win, void* base));
@@ -621,6 +639,8 @@ MPI_CALL(XBT_PUBLIC int, MPI_Win_flush, (int rank, MPI_Win win));
 MPI_CALL(XBT_PUBLIC int, MPI_Win_flush_local, (int rank, MPI_Win win));
 MPI_CALL(XBT_PUBLIC int, MPI_Win_flush_all, (MPI_Win win));
 MPI_CALL(XBT_PUBLIC int, MPI_Win_flush_local_all, (MPI_Win win));
+MPI_CALL(XBT_PUBLIC int, MPI_Win_shared_query, (MPI_Win win, int rank, MPI_Aint* size, int* disp_unit, void* baseptr));
+MPI_CALL(XBT_PUBLIC int, MPI_Win_sync, (MPI_Win win));
 MPI_CALL(XBT_PUBLIC MPI_Win, MPI_Win_f2c, (MPI_Fint win));
 MPI_CALL(XBT_PUBLIC MPI_Fint, MPI_Win_c2f, (MPI_Win win));
 
@@ -911,21 +931,16 @@ XBT_PUBLIC void smpi_execute_flops(double flops);
 XBT_PUBLIC void smpi_execute(double duration);
 XBT_PUBLIC void smpi_execute_benched(double duration);
 
-XBT_PUBLIC double smpi_get_host_power_peak_at(int pstate_index);
-XBT_PUBLIC double smpi_get_host_current_power_peak();
-XBT_PUBLIC int smpi_get_host_nb_pstates();
-XBT_PUBLIC void smpi_set_host_pstate(int pstate_index);
-XBT_PUBLIC int smpi_get_host_pstate();
+// PLEASE NOTE: If you remove these functions, the entire smpi_dvfs.cpp file can be removed as well!!
+XBT_ATTRIB_DEPRECATED_v324("Please use sg_host_get_pstate_speed(sg_host_self(), pstate_index) instead") XBT_PUBLIC double smpi_get_host_power_peak_at(int pstate_index);
+XBT_ATTRIB_DEPRECATED_v324("Please use sg_host_speed(sg_host_self()) instead") XBT_PUBLIC double smpi_get_host_current_power_peak();
+XBT_ATTRIB_DEPRECATED_v324("Please use sg_host_get_nb_pstates(sg_host_self()) instead") XBT_PUBLIC int smpi_get_host_nb_pstates();
+XBT_ATTRIB_DEPRECATED_v324("Please use sg_host_set_pstate(sg_host_self(), pstate_index) instead") XBT_PUBLIC void smpi_set_host_pstate(int pstate_index);
+XBT_ATTRIB_DEPRECATED_v324("Please use sg_host_get_pstate(sg_host_self()) instead") XBT_PUBLIC int smpi_get_host_pstate();
+
+XBT_ATTRIB_DEPRECATED_v324("Please use sg_host_get_consumed_energy(sg_host_self()) instead") XBT_PUBLIC double smpi_get_host_consumed_energy();
 
-XBT_PUBLIC double smpi_get_host_consumed_energy();
 
-XBT_PUBLIC int smpi_usleep(useconds_t usecs);
-#if _POSIX_TIMERS > 0
-XBT_PUBLIC int smpi_nanosleep(const struct timespec* tp, struct timespec* t);
-XBT_PUBLIC int smpi_clock_gettime(clockid_t clk_id, struct timespec* tp);
-#endif
-XBT_PUBLIC unsigned int smpi_sleep(unsigned int secs);
-XBT_PUBLIC int smpi_gettimeofday(struct timeval* tv, void* tz);
 XBT_PUBLIC unsigned long long smpi_rastro_resolution();
 XBT_PUBLIC unsigned long long smpi_rastro_timestamp();
 XBT_PUBLIC void smpi_sample_1(int global, const char* file, int line, int iters, double threshold);
@@ -994,10 +1009,6 @@ XBT_PUBLIC void SMPI_finalize();
 XBT_PUBLIC void smpi_register_static(void* arg, void_f_pvoid_t free_fn);
 XBT_PUBLIC void smpi_free_static();
 
-
-struct option;
-XBT_PUBLIC int smpi_getopt_long (int argc,  char *const *argv,  const char *options,  const struct option *long_options, int *opt_index);
-XBT_PUBLIC int smpi_getopt (int argc,  char *const *argv,  const char *options);
 #define SMPI_VARINIT_GLOBAL(name,type)                          \
 type *name = NULL;                                              \
 static void __attribute__((constructor)) __preinit_##name(void) { \
@@ -1064,12 +1075,11 @@ SG_END_DECL()
 
 XBT_PUBLIC int smpi_is_shared(void* ptr, std::vector<std::pair<size_t, size_t>>& private_blocks, size_t* offset);
 
-std::vector<std::pair<size_t, size_t>> shift_and_frame_private_blocks(const std::vector<std::pair<size_t, size_t>> vec,
+std::vector<std::pair<size_t, size_t>> shift_and_frame_private_blocks(const std::vector<std::pair<size_t, size_t>>& vec,
                                                                       size_t offset, size_t buff_size);
-std::vector<std::pair<size_t, size_t>> merge_private_blocks(std::vector<std::pair<size_t, size_t>> src,
-                                                            std::vector<std::pair<size_t, size_t>> dst);
-                                                            
-                                                            
+std::vector<std::pair<size_t, size_t>> merge_private_blocks(const std::vector<std::pair<size_t, size_t>>& src,
+                                                            const std::vector<std::pair<size_t, size_t>>& dst);
+
 #endif
 
 #endif