X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6b7630e0fc3f68bc100c7a96a419caafa46881b2..eb76c483c5c3928c2de57f9acbc7fc9f3ca58de2:/include/smpi/smpi.h diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 1488ab4ee0..9cf53e9c38 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team. +/* Copyright (c) 2007-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -12,12 +12,16 @@ #include #include -#define sleep(x) smpi_sleep(x) -#define gettimeofday(x, y) smpi_gettimeofday(x, y) +#ifdef _WIN32 +#define MPI_CALL(type,name,args) \ + type name args; \ + type P##name args +#else #define MPI_CALL(type,name,args) \ type name args __attribute__((weak)); \ type P##name args +#endif SG_BEGIN_DECL() #define MPI_THREAD_SINGLE 0 @@ -33,11 +37,17 @@ SG_BEGIN_DECL() #define MPI_MAX_INFO_VAL 100 #define MPI_MAX_OBJECT_NAME 100 #define MPI_MAX_PORT_NAME 100 +#define MPI_MAX_LIBRARY_VERSION_STRING 100 #define SMPI_RAND_SEED 5 -#define MPI_ANY_SOURCE -1 -#define MPI_PROC_NULL -2 -#define MPI_ANY_TAG -1 -#define MPI_UNDEFINED -1 +#define MPI_ANY_SOURCE -555 +#define MPI_BOTTOM (void *)-111 +#define MPI_FORTRAN_BOTTOM -111 +#define MPI_PROC_NULL -666 +#define MPI_ANY_TAG -444 +#define MPI_UNDEFINED -333 +#define MPI_IN_PLACE (void *)-222 +#define MPI_FORTRAN_IN_PLACE -222 + // errorcodes #define MPI_SUCCESS 0 #define MPI_ERR_COMM 1 @@ -49,14 +59,99 @@ SG_BEGIN_DECL() #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_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_ERRCODES_IGNORE (int *)0 #define MPI_IDENT 0 #define MPI_SIMILAR 1 #define MPI_UNEQUAL 2 #define MPI_CONGRUENT 3 #define MPI_WTIME_IS_GLOBAL 1 +#define MPI_TAG_UB 1000000 +#define MPI_HOST 0 +#define MPI_IO 0 +#define MPI_BSEND_OVERHEAD 0 + +#define MPI_KEYVAL_INVALID 0 +#define MPI_NULL_COPY_FN NULL +#define MPI_NULL_DELETE_FN NULL +#define MPI_APPNUM 0 +#define MPI_LASTUSEDCODE MPI_SUCCESS +#define MPI_ERR_LASTCODE MPI_SUCCESS + +#define MPI_CXX_BOOL MPI_DATATYPE_NULL +#define MPI_CXX_FLOAT_COMPLEX MPI_DATATYPE_NULL +#define MPI_CXX_DOUBLE_COMPLEX MPI_DATATYPE_NULL +#define MPI_CXX_LONG_DOUBLE_COMPLEX MPI_DATATYPE_NULL + +#define MPI_REAL4 MPI_DATATYPE_NULL +#define MPI_REAL8 MPI_DATATYPE_NULL +#define MPI_REAL16 MPI_DATATYPE_NULL +#define MPI_COMPLEX8 MPI_DATATYPE_NULL +#define MPI_COMPLEX16 MPI_DATATYPE_NULL +#define MPI_COMPLEX32 MPI_DATATYPE_NULL +#define MPI_INTEGER1 MPI_DATATYPE_NULL +#define MPI_INTEGER2 MPI_DATATYPE_NULL +#define MPI_INTEGER4 MPI_DATATYPE_NULL +#define MPI_INTEGER8 MPI_DATATYPE_NULL +#define MPI_COMPLEX MPI_DATATYPE_NULL +#define MPI_DOUBLE_COMPLEX MPI_DATATYPE_NULL + +#define MPI_DISTRIBUTE_BLOCK 0 +#define MPI_DISTRIBUTE_NONE 1 +#define MPI_DISTRIBUTE_CYCLIC 2 +#define MPI_DISTRIBUTE_DFLT_DARG 0 +#define MPI_ORDER_C 1 +#define MPI_ORDER_FORTRAN 0 + +#define MPI_TYPECLASS_REAL 0 +#define MPI_TYPECLASS_INTEGER 1 +#define MPI_TYPECLASS_COMPLEX 2 +#define MPI_ROOT 0 +#define MPI_INFO_NULL -1 +#define MPI_COMM_TYPE_SHARED 1 + +#define MPI_VERSION 1 +#define MPI_SUBVERSION 1 +#define MPI_UNWEIGHTED (int *)0 +#define MPI_ARGV_NULL (char **)0 +#define MPI_ARGVS_NULL (char ***)0 +#define MPI_LOCK_EXCLUSIVE 1 +#define MPI_LOCK_SHARED 2 + +typedef enum MPIR_Combiner_enum{ + MPI_COMBINER_NAMED, + MPI_COMBINER_DUP, + MPI_COMBINER_CONTIGUOUS, + MPI_COMBINER_VECTOR, + MPI_COMBINER_HVECTOR_INTEGER, + MPI_COMBINER_HVECTOR, + MPI_COMBINER_INDEXED, + MPI_COMBINER_HINDEXED_INTEGER, + MPI_COMBINER_HINDEXED, + MPI_COMBINER_INDEXED_BLOCK, + MPI_COMBINER_STRUCT_INTEGER, + MPI_COMBINER_STRUCT, + MPI_COMBINER_SUBARRAY, + MPI_COMBINER_DARRAY, + MPI_COMBINER_F90_REAL, + MPI_COMBINER_F90_COMPLEX, + MPI_COMBINER_F90_INTEGER, + MPI_COMBINER_RESIZED, + MPI_COMBINER_HINDEXED_BLOCK +}MPIR_Combiner_enum; + +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; @@ -70,91 +165,102 @@ typedef struct { int count; } MPI_Status; -#define MPI_STATUS_IGNORE NULL -#define MPI_STATUSES_IGNORE NULL - -#define MPI_DATATYPE_NULL NULL -extern MPI_Datatype MPI_CHAR; -extern MPI_Datatype MPI_SHORT; -extern MPI_Datatype MPI_INT; -extern MPI_Datatype MPI_LONG; -extern MPI_Datatype MPI_LONG_LONG; +#define MPI_STATUS_IGNORE ((MPI_Status*)NULL) +#define MPI_STATUSES_IGNORE ((MPI_Status*)NULL) +#define MPI_FORTRAN_STATUS_IGNORE -1 +#define MPI_FORTRAN_STATUSES_IGNORE -1 + +#define MPI_DATATYPE_NULL ((MPI_Datatype)NULL) +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 -extern MPI_Datatype MPI_SIGNED_CHAR; -extern MPI_Datatype MPI_UNSIGNED_CHAR; -extern MPI_Datatype MPI_UNSIGNED_SHORT; -extern MPI_Datatype MPI_UNSIGNED; -extern MPI_Datatype MPI_UNSIGNED_LONG; -extern MPI_Datatype MPI_UNSIGNED_LONG_LONG; -extern MPI_Datatype MPI_FLOAT; -extern MPI_Datatype MPI_DOUBLE; -extern MPI_Datatype MPI_LONG_DOUBLE; -extern MPI_Datatype MPI_WCHAR; -extern MPI_Datatype MPI_C_BOOL; -extern MPI_Datatype MPI_INT8_T; -extern MPI_Datatype MPI_INT16_T; -extern MPI_Datatype MPI_INT32_T; -extern MPI_Datatype MPI_INT64_T; -extern 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 -extern MPI_Datatype MPI_UINT16_T; -extern MPI_Datatype MPI_UINT32_T; -extern MPI_Datatype MPI_UINT64_T; -extern 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 -extern MPI_Datatype MPI_C_DOUBLE_COMPLEX; -extern MPI_Datatype MPI_C_LONG_DOUBLE_COMPLEX; -extern MPI_Datatype MPI_AINT; -extern MPI_Datatype MPI_OFFSET; - +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. -extern MPI_Datatype MPI_FLOAT_INT; -extern MPI_Datatype MPI_LONG_INT; -extern MPI_Datatype MPI_DOUBLE_INT; -extern MPI_Datatype MPI_SHORT_INT; -extern MPI_Datatype MPI_2INT; -extern 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; +//for now we only send int values at max +#define MPI_Count int +#define MPI_COUNT MPI_INT typedef void MPI_User_function(void *invec, void *inoutvec, int *len, MPI_Datatype * datatype); struct s_smpi_mpi_op; typedef struct s_smpi_mpi_op *MPI_Op; -#define MPI_OP_NULL NULL -extern MPI_Op MPI_MAX; -extern MPI_Op MPI_MIN; -extern MPI_Op MPI_MAXLOC; -extern MPI_Op MPI_MINLOC; -extern MPI_Op MPI_SUM; -extern MPI_Op MPI_PROD; -extern MPI_Op MPI_LAND; -extern MPI_Op MPI_LOR; -extern MPI_Op MPI_LXOR; -extern MPI_Op MPI_BAND; -extern MPI_Op MPI_BOR; -extern MPI_Op MPI_BXOR; +#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; struct s_smpi_mpi_group; typedef struct s_smpi_mpi_group *MPI_Group; -#define MPI_GROUP_NULL NULL +#define MPI_GROUP_NULL ((MPI_Group)NULL) -extern 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 -extern MPI_Comm MPI_COMM_WORLD; +#define MPI_COMM_NULL ((MPI_Comm)NULL) +XBT_PUBLIC_DATA( MPI_Comm ) MPI_COMM_WORLD; +XBT_PUBLIC_DATA( int ) MPI_UNIVERSE_SIZE; #define MPI_COMM_SELF smpi_process_comm_self() struct s_smpi_mpi_request; typedef struct s_smpi_mpi_request *MPI_Request; -#define MPI_REQUEST_NULL NULL +#define MPI_REQUEST_NULL ((MPI_Request)NULL) +#define MPI_FORTRAN_REQUEST_NULL -1 MPI_CALL(XBT_PUBLIC(int), MPI_Init, (int *argc, char ***argv)); MPI_CALL(XBT_PUBLIC(int), MPI_Finalize, (void)); +MPI_CALL(XBT_PUBLIC(int), MPI_Finalized, (int* flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Init_thread, (int *argc, char ***argv, int required, int *provided)); @@ -162,18 +268,60 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Query_thread, (int *provided)); MPI_CALL(XBT_PUBLIC(int), MPI_Is_thread_main, (int *flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Abort, (MPI_Comm comm, int errorcode)); MPI_CALL(XBT_PUBLIC(double), MPI_Wtime, (void)); - +MPI_CALL(XBT_PUBLIC(double), MPI_Wtick,(void)); MPI_CALL(XBT_PUBLIC(int), MPI_Address, (void *location, MPI_Aint * address)); - +MPI_CALL(XBT_PUBLIC(int), MPI_Get_address, (void *location, MPI_Aint * address)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_free, (MPI_Datatype * datatype)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_size, (MPI_Datatype datatype, int *size)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_extent, (MPI_Datatype datatype, MPI_Aint * lb, MPI_Aint * extent)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_true_extent, + (MPI_Datatype datatype, MPI_Aint * lb, + MPI_Aint * extent)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_extent, (MPI_Datatype datatype, MPI_Aint * extent)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_lb, (MPI_Datatype datatype, MPI_Aint * disp)); MPI_CALL(XBT_PUBLIC(int), MPI_Type_ub, (MPI_Datatype datatype, MPI_Aint * disp)); - +MPI_CALL(XBT_PUBLIC(int), MPI_Type_commit, (MPI_Datatype* datatype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_hindexed, + (int count, int* blocklens, MPI_Aint* indices, + MPI_Datatype old_type, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_hindexed, + (int count, int* blocklens, MPI_Aint* indices, + MPI_Datatype old_type, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_hindexed_block, + (int count, int blocklength, MPI_Aint* indices, + MPI_Datatype old_type, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_hvector, + (int count, int blocklen, MPI_Aint stride, + MPI_Datatype old_type, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_hvector, + (int count, int blocklen, MPI_Aint stride, + MPI_Datatype old_type, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_indexed, + (int count, int* blocklens, int* indices, + MPI_Datatype old_type, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_indexed, + (int count, int* blocklens, int* indices, + MPI_Datatype old_type, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_indexed_block, + (int count, int blocklength, int* indices, + MPI_Datatype old_type, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_struct, + (int count, int* blocklens, MPI_Aint* indices, + MPI_Datatype* old_types, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_struct, + (int count, int* blocklens, MPI_Aint* indices, + MPI_Datatype* old_types, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_vector, + (int count, int blocklen, int stride, + MPI_Datatype old_type, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_contiguous, + (int count, MPI_Datatype old_type, + MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Testall, + (int count, MPI_Request* requests, int* flag, + MPI_Status* statuses)); MPI_CALL(XBT_PUBLIC(int), MPI_Op_create, (MPI_User_function * function, int commute, MPI_Op * op)); @@ -222,7 +370,7 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Get_count, MPI_CALL(XBT_PUBLIC(int), MPI_Comm_group, (MPI_Comm comm, MPI_Group * group)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_compare, (MPI_Comm comm1, MPI_Comm comm2, int *result)); -MPI_CALL(XBT_PUBLIC(int), MPI_Comm_dup, (MPI_Comm comm, MPI_Comm * newcomm)); + MPI_CALL(XBT_PUBLIC(int), MPI_Comm_create, (MPI_Comm comm, MPI_Group group, MPI_Comm * newcomm)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_free, (MPI_Comm * comm)); @@ -283,7 +431,10 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Waitsome, (int incount, MPI_Request requests[], int *outcount, int *indices, MPI_Status status[])); - +MPI_CALL(XBT_PUBLIC(int), MPI_Testsome, + (int incount, MPI_Request requests[], + int *outcount, int *indices, + MPI_Status status[])); MPI_CALL(XBT_PUBLIC(int), MPI_Bcast, (void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm)); @@ -334,6 +485,10 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Reduce_scatter, (void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)); +MPI_CALL(XBT_PUBLIC(int), MPI_Reduce_scatter_block, + (void *sendbuf, void *recvbuf, + int recvcount, MPI_Datatype datatype, + MPI_Op op, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Alltoall, (void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, @@ -345,13 +500,54 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Alltoallv, void *recvbuf, int *recvcounts, int *recvdisps, MPI_Datatype recvtype, MPI_Comm comm)); +MPI_CALL(XBT_PUBLIC(int), MPI_Iprobe, + (int source, int tag, MPI_Comm comm, + int* flag, MPI_Status* status)); +MPI_CALL(XBT_PUBLIC(int), MPI_Probe, + (int source, int tag, MPI_Comm comm, + MPI_Status* status)); +MPI_CALL(XBT_PUBLIC(int), MPI_Get_version, + (int *version,int *subversion)); +MPI_CALL(XBT_PUBLIC(int), MPI_Get_library_version, + (char *version,int *len)); +MPI_CALL(XBT_PUBLIC(int), MPI_Reduce_local,(void *inbuf, void *inoutbuf, int count, + MPI_Datatype datatype, MPI_Op op)); //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); +typedef int MPI_Comm_copy_attr_function(MPI_Comm oldcomm, int keyval, void* extra_state, void* attribute_val_in, + void* attribute_val_out, int* flag); +typedef int MPI_Comm_delete_attr_function(MPI_Comm comm, int keyval, void* attribute_val, void* extra_state); +typedef int MPI_Type_copy_attr_function(MPI_Datatype type, int keyval, void* extra_state, void* attribute_val_in, + void* attribute_val_out, int* flag); +typedef int MPI_Type_delete_attr_function(MPI_Datatype type, int keyval, void* attribute_val, void* extra_state); +typedef void MPI_Comm_errhandler_function(MPI_Comm *, int *, ...); +typedef int MPI_Grequest_query_function(void *extra_state, MPI_Status *status); +typedef int MPI_Grequest_free_function(void *extra_state); +typedef int MPI_Grequest_cancel_function(void *extra_state, int complete); +#define MPI_DUP_FN MPI_Comm_dup +#define MPI_COMM_NULL_COPY_FN ((MPI_Comm_copy_attr_function*)0) +#define MPI_COMM_NULL_DELETE_FN ((MPI_Comm_delete_attr_function*)0) +#define MPI_COMM_DUP_FN ((MPI_Comm_copy_attr_function *)MPI_DUP_FN) +#define MPI_TYPE_NULL_COPY_FN ((MPI_Type_copy_attr_function*)0) +#define MPI_TYPE_NULL_DELETE_FN ((MPI_Type_delete_attr_function*)0) +#define MPI_TYPE_DUP_FN ((MPI_Type_copy_attr_function*)MPI_DUP_FN) + +typedef MPI_Comm_errhandler_function MPI_Comm_errhandler_fn; +#define MPI_INFO_ENV 1 +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)); @@ -375,19 +571,31 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Errhandler_free, (MPI_Errhandler* errhandler)); MPI_CALL(XBT_PUBLIC(int), MPI_Errhandler_get, (MPI_Comm comm, MPI_Errhandler* errhandler)); MPI_CALL(XBT_PUBLIC(int), MPI_Error_string, (int errorcode, char* string, int* resultlen)); MPI_CALL(XBT_PUBLIC(int), MPI_Errhandler_set, (MPI_Comm comm, MPI_Errhandler errhandler)); -MPI_CALL(XBT_PUBLIC(int), MPI_Type_contiguous, (int count, MPI_Datatype old_type, MPI_Datatype* newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_set_errhandler, (MPI_Comm comm, MPI_Errhandler errhandler)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_get_errhandler, (MPI_Comm comm, MPI_Errhandler *errhandler)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_create_errhandler,( MPI_Comm_errhandler_fn *function, MPI_Errhandler *errhandler)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_call_errhandler,(MPI_Comm comm,int errorcode)); +MPI_CALL(XBT_PUBLIC(int), MPI_Add_error_class,( int *errorclass)); +MPI_CALL(XBT_PUBLIC(int), MPI_Add_error_code,( int errorclass, int *errorcode)); +MPI_CALL(XBT_PUBLIC(int), MPI_Add_error_string,( int errorcode, char *string)); MPI_CALL(XBT_PUBLIC(int), MPI_Cancel, (MPI_Request* request)); MPI_CALL(XBT_PUBLIC(int), MPI_Buffer_attach, (void* buffer, int size)); MPI_CALL(XBT_PUBLIC(int), MPI_Buffer_detach, (void* buffer, int* size)); -MPI_CALL(XBT_PUBLIC(int), MPI_Testsome, (int incount, MPI_Request* requests, int* outcount, int* indices, MPI_Status* statuses)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_test_inter, (MPI_Comm comm, int* flag)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_get_attr, (MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_set_attr, (MPI_Comm comm, int comm_keyval, void *attribute_val)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_delete_attr, (MPI_Comm comm, int comm_keyval)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_create_keyval,(MPI_Comm_copy_attr_function* copy_fn, MPI_Comm_delete_attr_function* delete_fn, int* keyval, void* extra_state)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_free_keyval,(int* keyval)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_attr, (MPI_Datatype type, int type_keyval, void *attribute_val, int* flag)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_set_attr, (MPI_Datatype type, int type_keyval, void *att)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_delete_attr, (MPI_Datatype type, int comm_keyval)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_keyval,(MPI_Type_copy_attr_function* copy_fn, MPI_Type_delete_attr_function* delete_fn, int* keyval, void* extra_state)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_free_keyval,(int* keyval)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_dup,(MPI_Datatype datatype,MPI_Datatype *newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_set_name,(MPI_Datatype datatype, char * name)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_name,(MPI_Datatype datatype, char * name, int* len)); MPI_CALL(XBT_PUBLIC(int), MPI_Unpack, (void* inbuf, int insize, int* position, void* outbuf, int outcount, MPI_Datatype type, MPI_Comm comm)); -MPI_CALL(XBT_PUBLIC(int), MPI_Type_commit, (MPI_Datatype* datatype)); -MPI_CALL(XBT_PUBLIC(int), MPI_Type_hindexed, (int count, int* blocklens, MPI_Aint* indices, MPI_Datatype old_type, MPI_Datatype* newtype)); -MPI_CALL(XBT_PUBLIC(int), MPI_Type_hvector, (int count, int blocklen, MPI_Aint stride, MPI_Datatype old_type, MPI_Datatype* newtype)); -MPI_CALL(XBT_PUBLIC(int), MPI_Type_indexed, (int count, int* blocklens, int* indices, MPI_Datatype old_type, MPI_Datatype* newtype)); -MPI_CALL(XBT_PUBLIC(int), MPI_Type_struct, (int count, int* blocklens, MPI_Aint* indices, MPI_Datatype* old_types, MPI_Datatype* newtype)); -MPI_CALL(XBT_PUBLIC(int), MPI_Type_vector, (int count, int blocklen, int stride, MPI_Datatype old_type, MPI_Datatype* newtype)); MPI_CALL(XBT_PUBLIC(int), MPI_Ssend, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)); MPI_CALL(XBT_PUBLIC(int), MPI_Ssend_init, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request)); MPI_CALL(XBT_PUBLIC(int), MPI_Intercomm_create, (MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm, int remote_leader, int tag, MPI_Comm* comm_out)); @@ -398,7 +606,6 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Ibsend, (void* buf, int count, MPI_Datatype dataty MPI_CALL(XBT_PUBLIC(int), MPI_Comm_remote_group, (MPI_Comm comm, MPI_Group* group)); MPI_CALL(XBT_PUBLIC(int), MPI_Comm_remote_size, (MPI_Comm comm, int* size)); MPI_CALL(XBT_PUBLIC(int), MPI_Issend, (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request* request)); -MPI_CALL(XBT_PUBLIC(int), MPI_Probe, (int source, int tag, MPI_Comm comm, MPI_Status* status)); MPI_CALL(XBT_PUBLIC(int), MPI_Attr_delete, (MPI_Comm comm, int keyval)); MPI_CALL(XBT_PUBLIC(int), MPI_Attr_get, (MPI_Comm comm, int keyval, void* attr_value, int* flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Attr_put, (MPI_Comm comm, int keyval, void* attr_value)); @@ -409,29 +616,83 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Keyval_create, (MPI_Copy_function* copy_fn, MPI_De MPI_CALL(XBT_PUBLIC(int), MPI_Keyval_free, (int* keyval)); MPI_CALL(XBT_PUBLIC(int), MPI_Test_cancelled, (MPI_Status* status, int* flag)); MPI_CALL(XBT_PUBLIC(int), MPI_Pack, (void* inbuf, int incount, MPI_Datatype type, void* outbuf, int outcount, int* position, MPI_Comm comm)); -MPI_CALL(XBT_PUBLIC(int), MPI_Testall, (int count, MPI_Request* requests, int* flag, MPI_Status* statuses)); MPI_CALL(XBT_PUBLIC(int), MPI_Get_elements, (MPI_Status* status, MPI_Datatype datatype, int* elements)); MPI_CALL(XBT_PUBLIC(int), MPI_Dims_create, (int nnodes, int ndims, int* dims)); -MPI_CALL(XBT_PUBLIC(int), MPI_Iprobe, (int source, int tag, MPI_Comm comm, int* flag, MPI_Status* status)); 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_get,(MPI_Info info,char *key,int valuelen, char *value, int *flag)); +MPI_CALL(XBT_PUBLIC(int), MPI_Info_free,( MPI_Info *info)); +MPI_CALL(XBT_PUBLIC(int), MPI_Info_delete,( MPI_Info info, char *key)); +MPI_CALL(XBT_PUBLIC(int), MPI_Info_dup,(MPI_Info info, MPI_Info *newinfo)); +MPI_CALL(XBT_PUBLIC(int), MPI_Info_get_nkeys,( MPI_Info info, int *nkeys)); +MPI_CALL(XBT_PUBLIC(int), MPI_Info_get_nthkey,( MPI_Info info, int n, char *key)); +MPI_CALL(XBT_PUBLIC(int), MPI_Info_get_valuelen,( MPI_Info info, char *key, int *valuelen, int *flag)); + +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)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_envelope,(MPI_Datatype datatype,int *num_integers,int *num_addresses,int *num_datatypes, int *combiner)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_get_contents,(MPI_Datatype datatype, int max_integers, int max_addresses, + int max_datatypes, int* array_of_integers, MPI_Aint* array_of_addresses, + MPI_Datatype *array_of_datatypes)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_darray,(int size, int rank, int ndims, int* array_of_gsizes, + int* array_of_distribs, int* array_of_dargs, int* array_of_psizes, + int order, MPI_Datatype oldtype, MPI_Datatype *newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Pack_external_size, (char *datarep, int incount, MPI_Datatype datatype, MPI_Aint *size)); +MPI_CALL(XBT_PUBLIC(int), MPI_Pack_external, (char *datarep, void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, MPI_Aint outcount, MPI_Aint *position)); +MPI_CALL(XBT_PUBLIC(int), MPI_Unpack_external, ( char *datarep, void *inbuf, MPI_Aint insize, MPI_Aint *position, void *outbuf, int outcount, MPI_Datatype datatype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_resized ,(MPI_Datatype oldtype,MPI_Aint lb, MPI_Aint extent, MPI_Datatype *newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_create_subarray,(int ndims,int *array_of_sizes, int *array_of_subsizes, int *array_of_starts, int order, MPI_Datatype oldtype, MPI_Datatype *newtype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Type_match_size,(int typeclass,int size,MPI_Datatype *datatype)); +MPI_CALL(XBT_PUBLIC(int), MPI_Alltoallw, ( void *sendbuf, int *sendcnts, int *sdispls, MPI_Datatype *sendtypes, void *recvbuf, int *recvcnts, int *rdispls, MPI_Datatype *recvtypes, MPI_Comm comm)); +MPI_CALL(XBT_PUBLIC(int), MPI_Exscan,(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_set_name, (MPI_Comm comm, char* name)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_set_info, (MPI_Comm comm, MPI_Info info)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_get_info, (MPI_Comm comm, MPI_Info* info)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_dup, (MPI_Comm comm, MPI_Comm * newcomm)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_dup_with_info,(MPI_Comm comm, MPI_Info info, MPI_Comm * newcomm)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_split_type,(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_connect,( char *port_name, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *newcomm)); +MPI_CALL(XBT_PUBLIC(int), MPI_Request_get_status,( MPI_Request request, int *flag, MPI_Status *status)); +MPI_CALL(XBT_PUBLIC(int), MPI_Grequest_start,( MPI_Grequest_query_function *query_fn, MPI_Grequest_free_function *free_fn, MPI_Grequest_cancel_function *cancel_fn, void *extra_state, MPI_Request *request)); +MPI_CALL(XBT_PUBLIC(int), MPI_Grequest_complete,( MPI_Request request)); +MPI_CALL(XBT_PUBLIC(int), MPI_Status_set_cancelled,(MPI_Status *status,int flag)); +MPI_CALL(XBT_PUBLIC(int), MPI_Status_set_elements,( MPI_Status *status, MPI_Datatype datatype, int count)); +MPI_CALL(XBT_PUBLIC(int), MPI_Unpublish_name,( char *service_name, MPI_Info info, char *port_name)); +MPI_CALL(XBT_PUBLIC(int), MPI_Publish_name,( char *service_name, MPI_Info info, char *port_name)); +MPI_CALL(XBT_PUBLIC(int), MPI_Lookup_name,( char *service_name, MPI_Info info, char *port_name)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_join,( int fd, MPI_Comm *intercomm)); +MPI_CALL(XBT_PUBLIC(int), MPI_Open_port,( MPI_Info info, char *port_name)); +MPI_CALL(XBT_PUBLIC(int), MPI_Close_port,( char *port_name)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_accept,( char *port_name, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *newcomm)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_spawn,( char *command, char **argv, int maxprocs, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *intercomm, int* array_of_errcodes)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_spawn_multiple,( int count, char **array_of_commands, char*** array_of_argv, int* array_of_maxprocs, MPI_Info* array_of_info, + int root, MPI_Comm comm, MPI_Comm *intercomm, int* array_of_errcodes)); +MPI_CALL(XBT_PUBLIC(int), MPI_Comm_get_parent,( MPI_Comm *parent)); + //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(void) smpi_execute_flops(double flops); +XBT_PUBLIC(void) smpi_execute(double duration); + 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(int) smpi_sample_1(int global, const char *file, int line, +XBT_PUBLIC(void) smpi_sample_1(int global, const char *file, int line, int iters, double threshold); XBT_PUBLIC(int) smpi_sample_2(int global, const char *file, int line); XBT_PUBLIC(void) smpi_sample_3(int global, const char *file, int line); -XBT_PUBLIC(void) smpi_sample_flops(double flops); #define SMPI_SAMPLE_LOCAL(iters,thres) for(smpi_sample_1(0, __FILE__, __LINE__, iters, thres); \ smpi_sample_2(0, __FILE__, __LINE__); \ @@ -441,7 +702,8 @@ XBT_PUBLIC(void) smpi_sample_flops(double flops); smpi_sample_2(1, __FILE__, __LINE__); \ smpi_sample_3(1, __FILE__, __LINE__)) -#define SMPI_SAMPLE_DELAY(flops) for(smpi_sample_flops(flops); 0; ) +#define SMPI_SAMPLE_DELAY(duration) for(smpi_execute(duration); 0; ) +#define SMPI_SAMPLE_FLOPS(flops) for(smpi_execute_flops(flops); 0; ) XBT_PUBLIC(void *) smpi_shared_malloc(size_t size, const char *file, int line); @@ -455,15 +717,20 @@ 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__(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); /* Trace replay specific stuff */ +XBT_PUBLIC(void) smpi_replay_init(int *argc, char***argv); XBT_PUBLIC(void) smpi_action_trace_run(char *); +XBT_PUBLIC(int) smpi_replay_finalize(void); SG_END_DECL() #endif