X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2b4010b2a5fda082278a02a35a9e9eb18b58e110..9b09b6c6cb6a092b83bb385d071d447137aac5de:/src/smpi/smpi_pmpi.c diff --git a/src/smpi/smpi_pmpi.c b/src/smpi/smpi_pmpi.c index c2aa98cae1..9a52cc9aa4 100644 --- a/src/smpi/smpi_pmpi.c +++ b/src/smpi/smpi_pmpi.c @@ -127,15 +127,7 @@ int PMPI_Abort(MPI_Comm comm, int errorcode) double PMPI_Wtime(void) { - double time; - if (smpi_process_initialized() && !smpi_process_finalized() && !smpi_process_get_sampling()) { - smpi_bench_end(); - time = SIMIX_get_clock(); - smpi_bench_begin(); - } else { - time = SIMIX_get_clock(); - } - return time; + return smpi_mpi_wtime(); } extern double sg_maxmin_precision; @@ -486,30 +478,14 @@ int PMPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group * newgro int PMPI_Group_incl(MPI_Group group, int n, int *ranks, MPI_Group * newgroup) { - int retval, i, index; + int retval; if (group == MPI_GROUP_NULL) { retval = MPI_ERR_GROUP; } else if (newgroup == NULL) { retval = MPI_ERR_ARG; } else { - if (n == 0) { - *newgroup = MPI_GROUP_EMPTY; - } else if (n == smpi_group_size(group)) { - *newgroup = group; - if(group!= smpi_comm_group(MPI_COMM_WORLD) - && group != MPI_GROUP_NULL - && group != smpi_comm_group(MPI_COMM_SELF) - && group != MPI_GROUP_EMPTY) - smpi_group_use(group); - } else { - *newgroup = smpi_group_new(n); - for (i = 0; i < n; i++) { - index = smpi_group_index(group, ranks[i]); - smpi_group_set_mapping(*newgroup, index, i); - } - } - retval = MPI_SUCCESS; + retval = smpi_group_incl(group, n, ranks, newgroup); } return retval; } @@ -1004,7 +980,7 @@ int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, *request = MPI_REQUEST_NULL; retval = MPI_SUCCESS; } else if (src!=MPI_ANY_SOURCE && (src >= smpi_group_size(smpi_comm_group(comm)) || src <0)){ - retval = MPI_ERR_COMM; + retval = MPI_ERR_RANK; } else if (count < 0) { retval = MPI_ERR_COUNT; } else if (buf==NULL && count > 0) { @@ -1699,6 +1675,8 @@ int PMPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm c if (comm == MPI_COMM_NULL) { retval = MPI_ERR_COMM; + } else if (!is_datatype_valid(datatype)) { + retval = MPI_ERR_ARG; } else { #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; @@ -1964,10 +1942,13 @@ int PMPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, if (comm == MPI_COMM_NULL) { retval = MPI_ERR_COMM; - } else if (((smpi_comm_rank(comm)==root) && (sendtype == MPI_DATATYPE_NULL)) - || ((recvbuf !=MPI_IN_PLACE) && (recvtype == MPI_DATATYPE_NULL))) { + } else if (((smpi_comm_rank(comm)==root) && (!is_datatype_valid(sendtype))) + || ((recvbuf !=MPI_IN_PLACE) && (!is_datatype_valid(recvtype)))){ retval = MPI_ERR_TYPE; - } else { + } else if ((sendbuf == recvbuf) || + ((smpi_comm_rank(comm)==root) && sendcount>0 && (sendbuf == NULL))){ + retval = MPI_ERR_BUFFER; + }else { if (recvbuf == MPI_IN_PLACE) { recvtype=sendtype; @@ -2738,6 +2719,35 @@ int PMPI_Win_free( MPI_Win* win){ return retval; } +int PMPI_Win_set_name(MPI_Win win, char * name) +{ + int retval = 0; + if (win == MPI_WIN_NULL) { + retval = MPI_ERR_TYPE; + } else if (name == NULL) { + retval = MPI_ERR_ARG; + } else { + smpi_mpi_win_set_name(win, name); + retval = MPI_SUCCESS; + } + return retval; +} + +int PMPI_Win_get_name(MPI_Win win, char * name, int* len) +{ + int retval = 0; + + if (win == MPI_WIN_NULL) { + retval = MPI_ERR_TYPE; + } else if (name == NULL) { + retval = MPI_ERR_ARG; + } else { + smpi_mpi_win_get_name(win, name, len); + retval = MPI_SUCCESS; + } + return retval; +} + int PMPI_Win_fence( int assert, MPI_Win win){ int retval = 0; @@ -2848,7 +2858,34 @@ int PMPI_Free_mem(void *baseptr){ return MPI_SUCCESS; } +int PMPI_Type_set_name(MPI_Datatype datatype, char * name) +{ + int retval = 0; + if (datatype == MPI_DATATYPE_NULL) { + retval = MPI_ERR_TYPE; + } else if (name == NULL) { + retval = MPI_ERR_ARG; + } else { + smpi_datatype_set_name(datatype, name); + retval = MPI_SUCCESS; + } + return retval; +} + +int PMPI_Type_get_name(MPI_Datatype datatype, char * name, int* len) +{ + int retval = 0; + if (datatype == MPI_DATATYPE_NULL) { + retval = MPI_ERR_TYPE; + } else if (name == NULL) { + retval = MPI_ERR_ARG; + } else { + smpi_datatype_get_name(datatype, name, len); + retval = MPI_SUCCESS; + } + return retval; +} /* The following calls are not yet implemented and will fail at runtime. */ /* Once implemented, please move them above this notice. */ @@ -2858,15 +2895,7 @@ int PMPI_Free_mem(void *baseptr){ return MPI_SUCCESS; \ } -int PMPI_Type_set_name(MPI_Datatype datatype, char * name) -{ - NOT_YET_IMPLEMENTED -} -int PMPI_Type_get_name(MPI_Datatype datatype, char * name, int* len) -{ - NOT_YET_IMPLEMENTED -} int PMPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int* size) { NOT_YET_IMPLEMENTED