X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9b09b6c6cb6a092b83bb385d071d447137aac5de..cd69f8c66886ae218c6a9b38125b27fe157e6bb2:/src/smpi/smpi_pmpi.c diff --git a/src/smpi/smpi_pmpi.c b/src/smpi/smpi_pmpi.c index 9a52cc9aa4..ca7ed79061 100644 --- a/src/smpi/smpi_pmpi.c +++ b/src/smpi/smpi_pmpi.c @@ -253,8 +253,7 @@ int PMPI_Type_dup(MPI_Datatype datatype, MPI_Datatype *newtype){ if (datatype == MPI_DATATYPE_NULL) { retval = MPI_ERR_TYPE; } else { - *newtype = smpi_datatype_dup(datatype); - retval = MPI_SUCCESS; + retval = smpi_datatype_dup(datatype, newtype); } return retval; } @@ -551,10 +550,12 @@ int PMPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], size = 0; for (i = 0; i < n; i++) { for (rank = ranges[i][0]; /* First */ - rank >= 0; /* Last */ + rank >= 0 && rank < smpi_group_size(group); /* Last */ ) { size++; - + if(rank == ranges[i][1]){/*already last ?*/ + break; + } rank += ranges[i][2]; /* Stride */ if (ranges[i][0] ranges[i][1]) @@ -570,11 +571,14 @@ int PMPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], j = 0; for (i = 0; i < n; i++) { for (rank = ranges[i][0]; /* First */ - rank >= 0; /* Last */ + rank >= 0 && rank < smpi_group_size(group); /* Last */ ) { index = smpi_group_index(group, rank); smpi_group_set_mapping(*newgroup, index, j); j++; + if(rank == ranges[i][1]){/*already last ?*/ + break; + } rank += ranges[i][2]; /* Stride */ if (ranges[i][0] ranges[i][1]) @@ -612,10 +616,12 @@ int PMPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], size = smpi_group_size(group); for (i = 0; i < n; i++) { for (rank = ranges[i][0]; /* First */ - rank >= 0; /* Last */ + rank >= 0 && rank < smpi_group_size(group); /* Last */ ) { size--; - + if(rank == ranges[i][1]){/*already last ?*/ + break; + } rank += ranges[i][2]; /* Stride */ if (ranges[i][0] ranges[i][1]) @@ -635,14 +641,17 @@ int PMPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], while (newrank < size) { add=1; for (i = 0; i < n; i++) { - for (rank = ranges[i][0];rank >= 0;){ + for (rank = ranges[i][0]; + rank >= 0 && rank < smpi_group_size(group); + ){ if(rank==oldrank){ add=0; break; } - + if(rank == ranges[i][1]){/*already last ?*/ + break; + } rank += ranges[i][2]; /* Stride */ - if (ranges[i][0] ranges[i][1]) break; @@ -763,8 +772,7 @@ int PMPI_Comm_dup(MPI_Comm comm, MPI_Comm * newcomm) } else if (newcomm == NULL) { retval = MPI_ERR_ARG; } else { - *newcomm = smpi_comm_new(smpi_comm_group(comm), smpi_comm_topo(comm)); - retval = MPI_SUCCESS; + retval = smpi_comm_dup(comm, newcomm); } return retval; } @@ -1371,7 +1379,7 @@ int PMPI_Test(MPI_Request * request, int *flag, MPI_Status * status) } else if (*request == MPI_REQUEST_NULL) { *flag= TRUE; smpi_empty_status(status); - retval = MPI_ERR_REQUEST; + retval = MPI_SUCCESS; } else { #ifdef HAVE_TRACING int rank = request && (*request)->comm != MPI_COMM_NULL @@ -1478,7 +1486,7 @@ int PMPI_Wait(MPI_Request * request, MPI_Status * status) if (request == NULL) { retval = MPI_ERR_ARG; } else if (*request == MPI_REQUEST_NULL) { - retval = MPI_ERR_REQUEST; + retval = MPI_SUCCESS; } else { #ifdef HAVE_TRACING @@ -2735,15 +2743,24 @@ int PMPI_Win_set_name(MPI_Win win, char * name) int PMPI_Win_get_name(MPI_Win win, char * name, int* len) { - int retval = 0; + int retval = MPI_SUCCESS; if (win == MPI_WIN_NULL) { - retval = MPI_ERR_TYPE; + retval = MPI_ERR_WIN; } 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_get_group(MPI_Win win, MPI_Group * group){ + int retval = MPI_SUCCESS; + if (win == MPI_WIN_NULL) { + retval = MPI_ERR_WIN; + }else { + smpi_mpi_win_get_group(win, group); } return retval; } @@ -2755,7 +2772,15 @@ int PMPI_Win_fence( int assert, MPI_Win win){ if (win == MPI_WIN_NULL) { retval = MPI_ERR_WIN; } else { - retval = smpi_mpi_win_fence(assert, win); +#ifdef HAVE_TRACING + int rank = smpi_process_index(); + TRACE_smpi_collective_in(rank, -1, __FUNCTION__, NULL); +#endif + retval = smpi_mpi_win_fence(assert, win); +#ifdef HAVE_TRACING + TRACE_smpi_collective_out(rank, -1, __FUNCTION__); +#endif + } smpi_bench_begin(); return retval; @@ -2781,7 +2806,19 @@ int PMPI_Get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, (!is_datatype_valid(target_datatype))) { retval = MPI_ERR_TYPE; } else { +#ifdef HAVE_TRACING + int rank = smpi_process_index(); + MPI_Group group; + smpi_mpi_win_get_group(win, &group); + int src_traced = smpi_group_index(group, target_rank); + TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, NULL); +#endif + retval = smpi_mpi_get( origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win); + +#ifdef HAVE_TRACING + TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__); +#endif } smpi_bench_begin(); return retval; @@ -2807,7 +2844,21 @@ int PMPI_Put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, (!is_datatype_valid(target_datatype))) { retval = MPI_ERR_TYPE; } else { +#ifdef HAVE_TRACING + int rank = smpi_process_index(); + MPI_Group group; + smpi_mpi_win_get_group(win, &group); + int dst_traced = smpi_group_index(group, target_rank); + TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, NULL); + TRACE_smpi_send(rank, rank, dst_traced, origin_count*smpi_datatype_size(origin_datatype)); +#endif + retval = smpi_mpi_put( origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win); + +#ifdef HAVE_TRACING + TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__); +#endif + } smpi_bench_begin(); return retval; @@ -2836,7 +2887,20 @@ int PMPI_Accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_da } else if (op == MPI_OP_NULL) { retval = MPI_ERR_OP; } else { +#ifdef HAVE_TRACING + int rank = smpi_process_index(); + MPI_Group group; + smpi_mpi_win_get_group(win, &group); + int src_traced = smpi_group_index(group, target_rank); + TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, NULL); +#endif + retval = smpi_mpi_accumulate( origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, op, win); + +#ifdef HAVE_TRACING + TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__); +#endif + } smpi_bench_begin(); return retval; @@ -2887,6 +2951,160 @@ int PMPI_Type_get_name(MPI_Datatype datatype, char * name, int* len) return retval; } + +MPI_Datatype PMPI_Type_f2c(MPI_Fint datatype){ + return smpi_type_f2c(datatype); +} + +MPI_Fint PMPI_Type_c2f(MPI_Datatype datatype){ + return smpi_type_c2f( datatype); +} + +MPI_Group PMPI_Group_f2c(MPI_Fint group){ + return smpi_group_f2c( group); +} + +MPI_Fint PMPI_Group_c2f(MPI_Group group){ + return smpi_group_c2f(group); +} + +MPI_Request PMPI_Request_f2c(MPI_Fint request){ + return smpi_request_f2c(request); +} + +MPI_Fint PMPI_Request_c2f(MPI_Request request) { + return smpi_request_c2f(request); +} + +MPI_Win PMPI_Win_f2c(MPI_Fint win){ + return smpi_win_f2c(win); +} + +MPI_Fint PMPI_Win_c2f(MPI_Win win){ + return smpi_win_c2f(win); +} + +MPI_Op PMPI_Op_f2c(MPI_Fint op){ + return smpi_op_f2c(op); +} + +MPI_Fint PMPI_Op_c2f(MPI_Op op){ + return smpi_op_c2f(op); +} + +MPI_Comm PMPI_Comm_f2c(MPI_Fint comm){ + return smpi_comm_f2c(comm); +} + +MPI_Fint PMPI_Comm_c2f(MPI_Comm comm){ + return smpi_comm_c2f(comm); +} + +int PMPI_Keyval_create(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state) { + return smpi_comm_keyval_create(copy_fn, delete_fn, keyval, extra_state); +} + +int PMPI_Keyval_free(int* keyval) { + return smpi_comm_keyval_free(keyval); +} + +int PMPI_Attr_delete(MPI_Comm comm, int keyval) { + if(keyval == MPI_TAG_UB||keyval == MPI_HOST||keyval == MPI_IO + ||keyval == MPI_WTIME_IS_GLOBAL||keyval == MPI_APPNUM + ||keyval == MPI_UNIVERSE_SIZE||keyval == MPI_LASTUSEDCODE) + return MPI_ERR_ARG; + else if (comm==MPI_COMM_NULL) + return MPI_ERR_COMM; + else + return smpi_comm_attr_delete(comm, keyval); +} + +int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) { + if (comm==MPI_COMM_NULL){ + *flag=0; + return MPI_ERR_COMM; + } else if(keyval == MPI_TAG_UB||keyval == MPI_HOST||keyval == MPI_IO + ||keyval == MPI_WTIME_IS_GLOBAL||keyval == MPI_APPNUM + ||keyval == MPI_UNIVERSE_SIZE||keyval == MPI_LASTUSEDCODE){ + *flag=1; + //FIXME : not ideal and leaky, but should not be called too much + int* res = xbt_new(int, 1); + *res=keyval; + *(int**)attr_value=res; + return MPI_SUCCESS; + } else + return smpi_comm_attr_get(comm, keyval, attr_value, flag); +} + +int PMPI_Attr_put(MPI_Comm comm, int keyval, void* attr_value) { + if(keyval == MPI_TAG_UB||keyval == MPI_HOST||keyval == MPI_IO + ||keyval == MPI_WTIME_IS_GLOBAL||keyval == MPI_APPNUM + ||keyval == MPI_UNIVERSE_SIZE||keyval == MPI_LASTUSEDCODE) + return MPI_ERR_ARG; + else if (comm==MPI_COMM_NULL) + return MPI_ERR_COMM; + else + return smpi_comm_attr_put(comm, keyval, attr_value); +} + +int PMPI_Comm_get_attr (MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag) +{ + return PMPI_Attr_get(comm, comm_keyval, attribute_val,flag); +} + +int PMPI_Comm_set_attr (MPI_Comm comm, int comm_keyval, void *attribute_val) +{ + return PMPI_Attr_put(comm, comm_keyval, attribute_val); +} + +int PMPI_Comm_delete_attr (MPI_Comm comm, int comm_keyval) +{ + return PMPI_Attr_delete(comm, comm_keyval); +} + +int PMPI_Comm_create_keyval(MPI_Comm_copy_attr_function* copy_fn, MPI_Comm_delete_attr_function* delete_fn, int* keyval, void* extra_state) +{ + return PMPI_Keyval_create(copy_fn, delete_fn, keyval, extra_state); +} + +int PMPI_Comm_free_keyval(int* keyval) { + return PMPI_Keyval_free(keyval); +} + + +int PMPI_Type_get_attr (MPI_Datatype type, int type_keyval, void *attribute_val, int* flag) +{ + if (type==MPI_DATATYPE_NULL) + return MPI_ERR_TYPE; + else + return smpi_type_attr_get(type, type_keyval, attribute_val, flag); +} + +int PMPI_Type_set_attr (MPI_Datatype type, int type_keyval, void *attribute_val) +{ + if (type==MPI_DATATYPE_NULL) + return MPI_ERR_TYPE; + else + return smpi_type_attr_put(type, type_keyval, attribute_val); +} + +int PMPI_Type_delete_attr (MPI_Datatype type, int type_keyval) +{ + if (type==MPI_DATATYPE_NULL) + return MPI_ERR_TYPE; + else + return smpi_type_attr_delete(type, type_keyval); +} + +int PMPI_Type_create_keyval(MPI_Type_copy_attr_function* copy_fn, MPI_Type_delete_attr_function* delete_fn, int* keyval, void* extra_state) +{ + return smpi_type_keyval_create(copy_fn, delete_fn, keyval, extra_state); +} + +int PMPI_Type_free_keyval(int* keyval) { + return smpi_type_keyval_free(keyval); +} + /* The following calls are not yet implemented and will fail at runtime. */ /* Once implemented, please move them above this notice. */ @@ -2896,6 +3114,21 @@ int PMPI_Type_get_name(MPI_Datatype datatype, char * name, int* len) } +MPI_Info PMPI_Info_f2c(MPI_Fint info){ + NOT_YET_IMPLEMENTED +} + +MPI_Fint PMPI_Info_c2f(MPI_Info info){ + NOT_YET_IMPLEMENTED +} + +MPI_Errhandler PMPI_Errhandler_f2c(MPI_Fint errhandler){ + NOT_YET_IMPLEMENTED +} + +MPI_Fint PMPI_Errhandler_c2f(MPI_Errhandler errhandler){ + NOT_YET_IMPLEMENTED +} int PMPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int* size) { NOT_YET_IMPLEMENTED @@ -2983,30 +3216,6 @@ int PMPI_Comm_test_inter(MPI_Comm comm, int* flag) { NOT_YET_IMPLEMENTED } -int PMPI_Comm_get_attr (MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag) -{ - NOT_YET_IMPLEMENTED -} - -int PMPI_Comm_set_attr (MPI_Comm comm, int comm_keyval, void *attribute_val) -{ - NOT_YET_IMPLEMENTED -} - -int PMPI_Comm_delete_attr (MPI_Comm comm, int comm_keyval) -{ - NOT_YET_IMPLEMENTED -} - -int PMPI_Comm_create_keyval(MPI_Comm_copy_attr_function* copy_fn, MPI_Comm_delete_attr_function* delete_fn, int* keyval, void* extra_state) -{ - NOT_YET_IMPLEMENTED -} - -int PMPI_Comm_free_keyval(int* keyval) { - NOT_YET_IMPLEMENTED -} - int PMPI_Pcontrol(const int level ) { NOT_YET_IMPLEMENTED @@ -3016,30 +3225,6 @@ int PMPI_Unpack(void* inbuf, int insize, int* position, void* outbuf, int outcou NOT_YET_IMPLEMENTED } -int PMPI_Type_get_attr (MPI_Datatype type, int type_keyval, void *attribute_val, int* flag) -{ - NOT_YET_IMPLEMENTED -} - -int PMPI_Type_set_attr (MPI_Datatype type, int type_keyval, void *attribute_val) -{ - NOT_YET_IMPLEMENTED -} - -int PMPI_Type_delete_attr (MPI_Datatype type, int comm_keyval) -{ - NOT_YET_IMPLEMENTED -} - -int PMPI_Type_create_keyval(MPI_Type_copy_attr_function* copy_fn, MPI_Type_delete_attr_function* delete_fn, int* keyval, void* extra_state) -{ - NOT_YET_IMPLEMENTED -} - -int PMPI_Type_free_keyval(int* keyval) { - NOT_YET_IMPLEMENTED -} - int PMPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm, int remote_leader, int tag, MPI_Comm* comm_out) { NOT_YET_IMPLEMENTED } @@ -3068,18 +3253,6 @@ int PMPI_Comm_remote_size(MPI_Comm comm, int* size) { NOT_YET_IMPLEMENTED } -int PMPI_Attr_delete(MPI_Comm comm, int keyval) { - NOT_YET_IMPLEMENTED -} - -int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) { - NOT_YET_IMPLEMENTED -} - -int PMPI_Attr_put(MPI_Comm comm, int keyval, void* attr_value) { - NOT_YET_IMPLEMENTED -} - int PMPI_Rsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) { NOT_YET_IMPLEMENTED } @@ -3092,14 +3265,6 @@ int PMPI_Irsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, NOT_YET_IMPLEMENTED } -int PMPI_Keyval_create(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state) { - NOT_YET_IMPLEMENTED -} - -int PMPI_Keyval_free(int* keyval) { - NOT_YET_IMPLEMENTED -} - int PMPI_Test_cancelled(MPI_Status* status, int* flag) { NOT_YET_IMPLEMENTED } @@ -3296,3 +3461,31 @@ int PMPI_Comm_spawn_multiple( int count, char **array_of_commands, char*** array int PMPI_Comm_get_parent( MPI_Comm *parent){ NOT_YET_IMPLEMENTED } + +int PMPI_Win_complete(MPI_Win win){ + NOT_YET_IMPLEMENTED +} + +int PMPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) { + NOT_YET_IMPLEMENTED +} + +int PMPI_Win_post(MPI_Group group, int assert, MPI_Win win){ + NOT_YET_IMPLEMENTED +} + +int PMPI_Win_start(MPI_Group group, int assert, MPI_Win win){ + NOT_YET_IMPLEMENTED +} + +int PMPI_Win_test(MPI_Win win, int *flag){ + NOT_YET_IMPLEMENTED +} + +int PMPI_Win_unlock(int rank, MPI_Win win){ + NOT_YET_IMPLEMENTED +} + +int PMPI_Win_wait(MPI_Win win){ + NOT_YET_IMPLEMENTED +}