From: Augustin Degomme Date: Mon, 21 Jul 2014 09:33:08 +0000 (+0200) Subject: Add MPI_Win_get_name and MPI_Win_set_name support X-Git-Tag: v3_12~893^2~13 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/22099d0593f8067506657185076e10cbeafe5760?hp=d50ac0d02476601f9fe8ec760dce685d39d61bc7 Add MPI_Win_get_name and MPI_Win_set_name support --- diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 34ec68e228..b990c4bb83 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -568,9 +568,9 @@ MPI_CALL(XBT_PUBLIC(int), MPI_Reduce_local,(void *inbuf, void *inoutbuf, int cou MPI_Datatype datatype, MPI_Op op)); 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_Win_set_name,(MPI_Win win, char * name)); +MPI_CALL(XBT_PUBLIC(int), MPI_Win_get_name,(MPI_Win win, char * name, int* len)); MPI_CALL(XBT_PUBLIC(int), MPI_Win_fence,( int assert, MPI_Win win)); MPI_CALL(XBT_PUBLIC(int), MPI_Get,( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, diff --git a/src/smpi/private.h b/src/smpi/private.h index 8e9ce16fdf..cbe5e55ddf 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -334,6 +334,9 @@ int smpi_mpi_win_free( MPI_Win* win); MPI_Win smpi_mpi_win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm); +void smpi_mpi_win_get_name(MPI_Win win, char* name, int* length); +void smpi_mpi_win_set_name(MPI_Win win, char* name); + int smpi_mpi_win_fence( int assert, MPI_Win win); int smpi_mpi_get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, @@ -472,6 +475,8 @@ void mpi_type_ub_(int* datatype, MPI_Aint * extent, int* ierr); void mpi_win_fence_( int* assert, int* win, int* ierr); void mpi_win_free_( int* win, int* ierr); void mpi_win_create_( int *base, MPI_Aint* size, int* disp_unit, int* info, int* comm, int *win, int* ierr); +void mpi_win_set_name_ (int* win, char * name, int* ierr); +void mpi_win_get_name_ (int* win, char * name, int* len, int* ierr); void mpi_info_create_( int *info, int* ierr); void mpi_info_set_( int *info, char *key, char *value, int* ierr); void mpi_info_free_(int* info, int* ierr); diff --git a/src/smpi/smpi_f77.c b/src/smpi/smpi_f77.c index 16690d67f0..87fe053d2b 100644 --- a/src/smpi/smpi_f77.c +++ b/src/smpi/smpi_f77.c @@ -719,6 +719,16 @@ void mpi_win_create_( int *base, MPI_Aint* size, int* disp_unit, int* info, int* } } +void mpi_win_set_name_ (int* win, char * name, int* ierr){ + + *ierr = MPI_Win_set_name(get_win(*win), name); +} + +void mpi_win_get_name_ (int* win, char * name, int* len, int* ierr){ + + *ierr = MPI_Win_get_name(get_win(*win),name,len); +} + void mpi_info_create_( int *info, int* ierr){ *ierr = MPI_Info_create( (MPI_Info *)info); } diff --git a/src/smpi/smpi_mpi.c b/src/smpi/smpi_mpi.c index e7899faaed..e214d15076 100644 --- a/src/smpi/smpi_mpi.c +++ b/src/smpi/smpi_mpi.c @@ -830,6 +830,16 @@ int MPI_Win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI return PMPI_Win_create( base, size, disp_unit, info, comm,win); } +int MPI_Win_set_name(MPI_Win win, char * name) +{ + return PMPI_Win_set_name(win, name); +} + +int MPI_Win_get_name(MPI_Win win, char * name, int* len) +{ + return PMPI_Win_get_name(win,name,len); +} + int MPI_Info_create( MPI_Info *info){ return PMPI_Info_create( info); } diff --git a/src/smpi/smpi_pmpi.c b/src/smpi/smpi_pmpi.c index d0d8b4bc0d..485a8c0f06 100644 --- a/src/smpi/smpi_pmpi.c +++ b/src/smpi/smpi_pmpi.c @@ -2733,6 +2733,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; diff --git a/src/smpi/smpi_rma.c b/src/smpi/smpi_rma.c index 6c77070a31..dc311a5abe 100644 --- a/src/smpi/smpi_rma.c +++ b/src/smpi/smpi_rma.c @@ -23,6 +23,7 @@ typedef struct s_smpi_mpi_win{ xbt_dynar_t requests; xbt_bar_t bar; MPI_Win* connected_wins; + char* name; } s_smpi_mpi_win_t; @@ -41,6 +42,7 @@ MPI_Win smpi_mpi_win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info win->assert = 0; //win->info = info; win->comm = comm; + win->name = NULL; win->requests = xbt_dynar_new(sizeof(MPI_Request), NULL); win->connected_wins = xbt_malloc0(comm_size*sizeof(MPI_Win)); win->connected_wins[rank] = win; @@ -74,11 +76,23 @@ int smpi_mpi_win_free( MPI_Win* win){ xbt_barrier_wait((*win)->bar); xbt_dynar_free(&(*win)->requests); xbt_free((*win)->connected_wins); + if ((*win)->name != NULL){ + xbt_free((*win)->name); + } xbt_free(*win); win = MPI_WIN_NULL; return MPI_SUCCESS; } +void smpi_mpi_win_get_name(MPI_Win win, char* name, int* length){ + *length = strlen(win->name); + strcpy(name, win->name); +} + +void smpi_mpi_win_set_name(MPI_Win win, char* name){ + win->name = strdup(name);; +} + int smpi_mpi_win_fence( int assert, MPI_Win win){ diff --git a/teshsuite/smpi/mpich3-test/f77/rma/CMakeLists.txt b/teshsuite/smpi/mpich3-test/f77/rma/CMakeLists.txt index bc872f60c1..4a23dcb6d4 100644 --- a/teshsuite/smpi/mpich3-test/f77/rma/CMakeLists.txt +++ b/teshsuite/smpi/mpich3-test/f77/rma/CMakeLists.txt @@ -21,7 +21,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN) # add_executable(winattrf winattrf.f) # add_executable(c2f2cwinf c2f2cwinf.f c2f2cwin.c) add_executable(wingetf wingetf.f) -# add_executable(winnamef winnamef.f) + add_executable(winnamef winnamef.f) # add_executable(winscale1f winscale1f.f) # add_executable(winscale2f winscale2f.f) @@ -34,7 +34,7 @@ target_link_libraries(winfencef simgrid mtest_f77) #target_link_libraries(winattr2f simgrid mtest_f77) #target_link_libraries(winattrf simgrid mtest_f77) target_link_libraries(wingetf simgrid mtest_f77) -#target_link_libraries(winnamef simgrid mtest_f77) +target_link_libraries(winnamef simgrid mtest_f77) #target_link_libraries(winscale1f simgrid mtest_f77) #target_link_libraries(winscale2f simgrid mtest_f77) diff --git a/teshsuite/smpi/mpich3-test/f90/rma/CMakeLists.txt b/teshsuite/smpi/mpich3-test/f90/rma/CMakeLists.txt index 4059f489de..07f062784d 100644 --- a/teshsuite/smpi/mpich3-test/f90/rma/CMakeLists.txt +++ b/teshsuite/smpi/mpich3-test/f90/rma/CMakeLists.txt @@ -21,7 +21,7 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN) # add_executable(winattrf90 winattrf90.f90) # add_executable(c2f2cwinf90 c2f2cwinf90.f90 c2f2cwin.c) add_executable(wingetf90 wingetf90.f90) -# add_executable(winnamef90 winnamef90.f90) + add_executable(winnamef90 winnamef90.f90) # add_executable(winscale1f90 winscale1f90.f90) # add_executable(winscale2f90 winscale2f90.f90) @@ -34,7 +34,7 @@ target_link_libraries(winfencef90 simgrid mtest_f90) #target_link_libraries(winattr2f90 simgrid mtest_f90) #target_link_libraries(winattrf90 simgrid mtest_f90) target_link_libraries(wingetf90 simgrid mtest_f90) -#target_link_libraries(winnamef90 simgrid mtest_f90) +target_link_libraries(winnamef90 simgrid mtest_f90) #target_link_libraries(winscale1f90 simgrid mtest_f90) #target_link_libraries(winscale2f90 simgrid mtest_f90) diff --git a/teshsuite/smpi/mpich3-test/rma/testlist b/teshsuite/smpi/mpich3-test/rma/testlist index 02360d0047..8eac09dd1e 100644 --- a/teshsuite/smpi/mpich3-test/rma/testlist +++ b/teshsuite/smpi/mpich3-test/rma/testlist @@ -1,4 +1,4 @@ -#Needs Win set name, win_get_name needed +#Needs win_create_keyval win_set_attr, win_get_attr #winname 2 allocmem 2 putfence1 4