X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/963b8d1182796bce58318c92742863a8d3f32b37..de0856b198be8de817d9c0d496f5bdc0f426084a:/include/smpi/smpi.h diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 6a4bd096ff..035c074bdd 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -12,8 +12,6 @@ #include #include -#define sleep(x) smpi_sleep(x) -#define gettimeofday(x, y) smpi_gettimeofday(x, y) #ifdef _WIN32 #define MPI_CALL(type,name,args) \ @@ -40,11 +38,12 @@ SG_BEGIN_DECL() #define MPI_MAX_OBJECT_NAME 100 #define MPI_MAX_PORT_NAME 100 #define SMPI_RAND_SEED 5 -#define MPI_ANY_SOURCE -1 +#define MPI_ANY_SOURCE -555 #define MPI_BOTTOM (void *)0 -#define MPI_PROC_NULL -2 -#define MPI_ANY_TAG -1 -#define MPI_UNDEFINED -3 +#define MPI_PROC_NULL -666 +#define MPI_ANY_TAG -444 +#define MPI_UNDEFINED -333 +#define MPI_IN_PLACE (void *)-222 // errorcodes #define MPI_SUCCESS 0 #define MPI_ERR_COMM 1 @@ -59,6 +58,8 @@ SG_BEGIN_DECL() #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_IDENT 0 #define MPI_SIMILAR 1 #define MPI_UNEQUAL 2 @@ -67,6 +68,13 @@ SG_BEGIN_DECL() #define MPI_TAG_UB 1000000 #define MPI_HOST 0 #define MPI_IO 0 +#define MPI_BSEND_OVERHEAD 0 + +typedef enum MPIR_Topo_type { + MPI_GRAPH=1, + MPI_CART=2, + MPI_DIST_GRAPH=3 +} MPIR_Topo_type; typedef ptrdiff_t MPI_Aint; typedef long long MPI_Offset; @@ -85,47 +93,49 @@ typedef struct { #define MPI_STATUSES_IGNORE NULL #define MPI_DATATYPE_NULL NULL -XBT_PUBLIC( MPI_Datatype ) MPI_CHAR; -XBT_PUBLIC( MPI_Datatype ) MPI_SHORT; -XBT_PUBLIC( MPI_Datatype ) MPI_INT; -XBT_PUBLIC( MPI_Datatype ) MPI_LONG; -XBT_PUBLIC( MPI_Datatype ) MPI_LONG_LONG; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_CHAR; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_SHORT; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LONG; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LONG_LONG; #define MPI_LONG_LONG_INT MPI_LONG_LONG -XBT_PUBLIC( MPI_Datatype ) MPI_SIGNED_CHAR; -XBT_PUBLIC( MPI_Datatype ) MPI_UNSIGNED_CHAR; -XBT_PUBLIC( MPI_Datatype ) MPI_UNSIGNED_SHORT; -XBT_PUBLIC( MPI_Datatype ) MPI_UNSIGNED; -XBT_PUBLIC( MPI_Datatype ) MPI_UNSIGNED_LONG; -XBT_PUBLIC( MPI_Datatype ) MPI_UNSIGNED_LONG_LONG; -XBT_PUBLIC( MPI_Datatype ) MPI_FLOAT; -XBT_PUBLIC( MPI_Datatype ) MPI_DOUBLE; -XBT_PUBLIC( MPI_Datatype ) MPI_LONG_DOUBLE; -XBT_PUBLIC( MPI_Datatype ) MPI_WCHAR; -XBT_PUBLIC( MPI_Datatype ) MPI_C_BOOL; -XBT_PUBLIC( MPI_Datatype ) MPI_INT8_T; -XBT_PUBLIC( MPI_Datatype ) MPI_INT16_T; -XBT_PUBLIC( MPI_Datatype ) MPI_INT32_T; -XBT_PUBLIC( MPI_Datatype ) MPI_INT64_T; -XBT_PUBLIC( MPI_Datatype ) MPI_UINT8_T; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_SIGNED_CHAR; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_CHAR; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_SHORT; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_LONG; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UNSIGNED_LONG_LONG; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_FLOAT; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_DOUBLE; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LONG_DOUBLE; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_WCHAR; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_BOOL; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT8_T; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT16_T; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT32_T; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_INT64_T; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT8_T; #define MPI_BYTE MPI_UINT8_T -XBT_PUBLIC( MPI_Datatype ) MPI_UINT16_T; -XBT_PUBLIC( MPI_Datatype ) MPI_UINT32_T; -XBT_PUBLIC( MPI_Datatype ) MPI_UINT64_T; -XBT_PUBLIC( MPI_Datatype ) MPI_C_FLOAT_COMPLEX; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT16_T; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT32_T; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UINT64_T; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_FLOAT_COMPLEX; #define MPI_C_COMPLEX MPI_C_FLOAT_COMPLEX -XBT_PUBLIC( MPI_Datatype ) MPI_C_DOUBLE_COMPLEX; -XBT_PUBLIC( MPI_Datatype ) MPI_C_LONG_DOUBLE_COMPLEX; -XBT_PUBLIC( MPI_Datatype ) MPI_AINT; -XBT_PUBLIC( MPI_Datatype ) MPI_OFFSET; -XBT_PUBLIC( MPI_Datatype ) MPI_LB; -XBT_PUBLIC( MPI_Datatype ) MPI_UB; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_DOUBLE_COMPLEX; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_C_LONG_DOUBLE_COMPLEX; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_AINT; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_OFFSET; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_LB; +XBT_PUBLIC_DATA( MPI_Datatype ) MPI_UB; //The following are datatypes for the MPI functions MPI_MAXLOC and MPI_MINLOC. -XBT_PUBLIC( MPI_Datatype ) MPI_FLOAT_INT; -XBT_PUBLIC( MPI_Datatype ) MPI_LONG_INT; -XBT_PUBLIC( MPI_Datatype ) MPI_DOUBLE_INT; -XBT_PUBLIC( MPI_Datatype ) MPI_SHORT_INT; -XBT_PUBLIC( MPI_Datatype ) MPI_2INT; -XBT_PUBLIC( MPI_Datatype ) MPI_LONG_DOUBLE_INT; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_FLOAT_INT; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_LONG_INT; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_DOUBLE_INT; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_SHORT_INT; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_2INT; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_LONG_DOUBLE_INT; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_2FLOAT; +XBT_PUBLIC_DATA(MPI_Datatype) MPI_2DOUBLE; typedef void MPI_User_function(void *invec, void *inoutvec, int *len, MPI_Datatype * datatype); @@ -133,31 +143,31 @@ struct s_smpi_mpi_op; typedef struct s_smpi_mpi_op *MPI_Op; #define MPI_OP_NULL NULL -XBT_PUBLIC( MPI_Op ) MPI_MAX; -XBT_PUBLIC( MPI_Op ) MPI_MIN; -XBT_PUBLIC( MPI_Op ) MPI_MAXLOC; -XBT_PUBLIC( MPI_Op ) MPI_MINLOC; -XBT_PUBLIC( MPI_Op ) MPI_SUM; -XBT_PUBLIC( MPI_Op ) MPI_PROD; -XBT_PUBLIC( MPI_Op ) MPI_LAND; -XBT_PUBLIC( MPI_Op ) MPI_LOR; -XBT_PUBLIC( MPI_Op ) MPI_LXOR; -XBT_PUBLIC( MPI_Op ) MPI_BAND; -XBT_PUBLIC( MPI_Op ) MPI_BOR; -XBT_PUBLIC( 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; struct s_smpi_mpi_group; typedef struct s_smpi_mpi_group *MPI_Group; #define MPI_GROUP_NULL NULL -XBT_PUBLIC( MPI_Group ) MPI_GROUP_EMPTY; +XBT_PUBLIC_DATA( MPI_Group ) MPI_GROUP_EMPTY; struct s_smpi_mpi_communicator; typedef struct s_smpi_mpi_communicator *MPI_Comm; #define MPI_COMM_NULL NULL -XBT_PUBLIC( MPI_Comm ) MPI_COMM_WORLD; +XBT_PUBLIC_DATA( MPI_Comm ) MPI_COMM_WORLD; #define MPI_COMM_SELF smpi_process_comm_self() struct s_smpi_mpi_request; @@ -392,12 +402,19 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Probe, //FIXME: these are not yet implemented typedef void MPI_Handler_function(MPI_Comm*, int*, ...); +typedef int MPI_Win; +typedef int MPI_Info; typedef void* MPI_Errhandler; typedef int MPI_Copy_function(MPI_Comm oldcomm, int keyval, void* extra_state, void* attribute_val_in, void* attribute_val_out, int* flag); typedef int MPI_Delete_function(MPI_Comm comm, int keyval, void* attribute_val, void* extra_state); -XBT_PUBLIC(MPI_Datatype) MPI_PACKED; +XBT_PUBLIC_DATA(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(int), MPI_Pack_size, (int incount, MPI_Datatype datatype, MPI_Comm comm, int* size)); MPI_CALL(XBT_PUBLIC(int), MPI_Cart_coords, (MPI_Comm comm, int rank, int maxdims, int* coords)); MPI_CALL(XBT_PUBLIC(int), MPI_Cart_create, (MPI_Comm comm_old, int ndims, int* dims, int* periods, int reorder, MPI_Comm* comm_cart)); @@ -450,6 +467,14 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Get_elements, (MPI_Status* status, MPI_Datatype da MPI_CALL(XBT_PUBLIC(int), MPI_Dims_create, (int nnodes, int ndims, int* dims)); MPI_CALL(XBT_PUBLIC(int), MPI_Initialized, (int* flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Pcontrol, (const int level )); +MPI_CALL(XBT_PUBLIC(int), MPI_Win_fence,( int assert, MPI_Win win)); +MPI_CALL(XBT_PUBLIC(int), MPI_Win_free,( MPI_Win* win)); +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_Info_create,( MPI_Info *info)); +MPI_CALL(XBT_PUBLIC(int), MPI_Info_set,( MPI_Info *info, char *key, char *value)); +MPI_CALL(XBT_PUBLIC(int), MPI_Info_free,( MPI_Info *info)); +MPI_CALL(XBT_PUBLIC(int), MPI_Get,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, + MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win)); //FIXME: End of all the not yet implemented stuff @@ -460,7 +485,7 @@ XBT_PUBLIC(void) smpi_exit(int); */ XBT_PUBLIC(unsigned int) smpi_sleep(unsigned int secs); -XBT_PUBLIC(int) smpi_gettimeofday(struct timeval *tv, struct timezone *tz); +XBT_PUBLIC(int) smpi_gettimeofday(struct timeval *tv); XBT_PUBLIC(unsigned long long) smpi_rastro_resolution (void); XBT_PUBLIC(unsigned long long) smpi_rastro_timestamp (void); XBT_PUBLIC(void) smpi_sample_1(int global, const char *file, int line, @@ -491,10 +516,13 @@ XBT_PUBLIC(void*) smpi_shared_get_call(const char* func, const char* input); XBT_PUBLIC(void*) smpi_shared_set_call(const char* func, const char* input, void* data); #define SMPI_SHARED_CALL(func, input, ...) \ (smpi_shared_known_call(#func, input) ? smpi_shared_get_call(#func, input) \ - : smpi_shared_set_call(#func, input, func(__VA_ARGS__))) + : smpi_shared_set_call(#func, input, (func(__VA_ARGS__)))) /* Fortran specific stuff */ -XBT_PUBLIC(int) MAIN__(int (*realmain) (int argc, char *argv[]),int *argc, char *argv[]); +XBT_PUBLIC(int) __attribute__((weak)) smpi_simulated_main_(int argc, char** argv); +XBT_PUBLIC(int) __attribute__((weak)) MAIN__(void); +XBT_PUBLIC(int) smpi_main(int (*realmain) (int argc, char *argv[]),int argc, char *argv[]); +XBT_PUBLIC(void) __attribute__((weak)) user_main_(void); XBT_PUBLIC(int) smpi_process_index(void);