X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/476b43e09340073b34d40afb0b9cacb8693aa767..439ff233e2bd6371039af0bd43b5016626f63a9c:/include/smpi/smpi.h diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 07dd2b08fc..aa601ecddf 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) \ @@ -59,6 +57,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 +67,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 +92,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 +142,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; @@ -397,7 +406,12 @@ typedef int MPI_Copy_function(MPI_Comm oldcomm, int keyval, void* extra_state, v 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)); @@ -454,14 +468,13 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Pcontrol, (const int level )); //FIXME: End of all the not yet implemented stuff // smpi functions -XBT_IMPORT_NO_EXPORT(int) smpi_simulated_main(int argc, char **argv); XBT_PUBLIC(MPI_Comm) smpi_process_comm_self(void); /* 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, @@ -495,7 +508,10 @@ XBT_PUBLIC(void*) smpi_shared_set_call(const char* func, const char* input, void : smpi_shared_set_call(#func, input, func(__VA_ARGS__))) /* Fortran specific stuff */ -XBT_PUBLIC(int) MAIN__(void); +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);