#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>
#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)
+};
#define MPI_ERRCODES_IGNORE (int *)0
#define MPI_IDENT 0
#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;
int MPI_TAG;
int MPI_ERROR;
int count;
+ int cancelled;
} MPI_Status;
typedef SMPI_Win* MPI_Win;
#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_CHAR;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_SHORT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LONG;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LONG_LONG;
+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;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_LONG;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_LONG_LONG;
#define MPI_LONG_LONG_INT MPI_LONG_LONG
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_SIGNED_CHAR;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UNSIGNED_CHAR;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UNSIGNED_SHORT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UNSIGNED;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UNSIGNED_LONG;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UNSIGNED_LONG_LONG;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_FLOAT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_DOUBLE;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LONG_DOUBLE;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_WCHAR;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_C_BOOL;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INT8_T;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INT16_T;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INT32_T;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INT64_T;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UINT8_T;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_BYTE;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UINT16_T;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UINT32_T;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UINT64_T;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_C_FLOAT_COMPLEX;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_SIGNED_CHAR;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_UNSIGNED_CHAR;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_UNSIGNED_SHORT;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_UNSIGNED;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_UNSIGNED_LONG;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_UNSIGNED_LONG_LONG;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_FLOAT;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_DOUBLE;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_LONG_DOUBLE;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_WCHAR;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_C_BOOL;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_INT8_T;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_INT16_T;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_INT32_T;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_INT64_T;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_UINT8_T;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_BYTE;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_UINT16_T;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_UINT32_T;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_UINT64_T;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_C_FLOAT_COMPLEX;
#define MPI_C_COMPLEX MPI_C_FLOAT_COMPLEX
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_C_DOUBLE_COMPLEX;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_C_LONG_DOUBLE_COMPLEX;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_AINT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_OFFSET;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LB;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_UB;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_C_DOUBLE_COMPLEX;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_C_LONG_DOUBLE_COMPLEX;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_AINT;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_OFFSET;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_LB;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_UB;
//The following are datatypes for the MPI functions MPI_MAXLOC and MPI_MINLOC.
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_FLOAT_INT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LONG_INT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_DOUBLE_INT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_SHORT_INT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_2INT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_LONG_DOUBLE_INT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_2FLOAT;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_2DOUBLE;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_2LONG;//only for compatibility with Fortran
-
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_REAL;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_REAL4;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_REAL8;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_REAL16;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_COMPLEX8;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_COMPLEX16;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_COMPLEX32;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INTEGER1;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INTEGER2;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INTEGER4;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INTEGER8;
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_INTEGER16;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_FLOAT_INT;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_LONG_INT;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_DOUBLE_INT;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_SHORT_INT;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_2INT;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_LONG_DOUBLE_INT;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_2FLOAT;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_2DOUBLE;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_2LONG; // only for compatibility with Fortran
+
+XBT_PUBLIC_DATA const MPI_Datatype MPI_REAL;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_REAL4;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_REAL8;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_REAL16;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_COMPLEX8;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_COMPLEX16;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_COMPLEX32;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_INTEGER1;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_INTEGER2;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_INTEGER4;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_INTEGER8;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_INTEGER16;
//for now we only send int values at max
#define MPI_Count int
#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;
#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;
+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;
//For accumulate
-XBT_PUBLIC_DATA( MPI_Op ) MPI_REPLACE;
-XBT_PUBLIC_DATA( MPI_Op ) MPI_NO_OP;
+XBT_PUBLIC_DATA MPI_Op MPI_REPLACE;
+XBT_PUBLIC_DATA MPI_Op MPI_NO_OP;
typedef SMPI_Group* MPI_Group;
#define MPI_GROUP_NULL ((MPI_Group)NULL)
-XBT_PUBLIC_DATA( MPI_Group ) MPI_GROUP_EMPTY;
+XBT_PUBLIC_DATA MPI_Group MPI_GROUP_EMPTY;
typedef SMPI_Comm* MPI_Comm;
#define MPI_COMM_NULL ((MPI_Comm)NULL)
-XBT_PUBLIC_DATA( MPI_Comm ) MPI_COMM_WORLD;
+XBT_PUBLIC_DATA MPI_Comm MPI_COMM_WORLD;
#define MPI_COMM_SELF smpi_process_comm_self()
typedef SMPI_Request* MPI_Request;
(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));
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));
typedef MPI_File_errhandler_function MPI_File_errhandler_fn;
typedef MPI_Win_errhandler_function MPI_Win_errhandler_fn;
#define MPI_INFO_ENV 1
-XBT_PUBLIC_DATA( const MPI_Datatype ) MPI_PACKED;
-XBT_PUBLIC_DATA(MPI_Errhandler*) MPI_ERRORS_RETURN;
-XBT_PUBLIC_DATA(MPI_Errhandler*) MPI_ERRORS_ARE_FATAL;
-XBT_PUBLIC_DATA(MPI_Errhandler*) MPI_ERRHANDLER_NULL;
+XBT_PUBLIC_DATA const MPI_Datatype MPI_PACKED;
+XBT_PUBLIC_DATA MPI_Errhandler* MPI_ERRORS_RETURN;
+XBT_PUBLIC_DATA MPI_Errhandler* MPI_ERRORS_ARE_FATAL;
+XBT_PUBLIC_DATA MPI_Errhandler* MPI_ERRHANDLER_NULL;
MPI_CALL(XBT_PUBLIC MPI_Errhandler, MPI_Errhandler_f2c, (MPI_Fint errhandler));
MPI_CALL(XBT_PUBLIC MPI_Fint, MPI_Errhandler_c2f, (MPI_Errhandler errhandler));
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);
/**
* Need a public setter for SMPI copy_callback function, so users can define
- * their own while still using default SIMIX_copy_callback for MSG copies.
+ * their own while still using default SIMIX_copy_callback for S4U copies.
*/
XBT_PUBLIC void smpi_comm_set_copy_data_callback(void (*callback)(smx_activity_t, void*, size_t));
/* Fortran specific stuff */
XBT_PUBLIC int smpi_main(const char* program, int argc, char* argv[]);
-XBT_ATTRIB_DEPRECATED_v322("Use Actor::self()->getPid(): v3.22 will turn this warning into an error.") XBT_PUBLIC
+XBT_ATTRIB_DEPRECATED_v322("Use s4u::this_actor::getPid(): v3.22 will turn this warning into an error.") XBT_PUBLIC
int smpi_process_index();
XBT_PUBLIC void smpi_process_init(int* argc, char*** argv);
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