Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add MPI_Win_get_name and MPI_Win_set_name support
authorAugustin Degomme <augustin.degomme@imag.fr>
Mon, 21 Jul 2014 09:33:08 +0000 (11:33 +0200)
committerAugustin Degomme <augustin.degomme@imag.fr>
Mon, 21 Jul 2014 09:33:08 +0000 (11:33 +0200)
include/smpi/smpi.h
src/smpi/private.h
src/smpi/smpi_f77.c
src/smpi/smpi_mpi.c
src/smpi/smpi_pmpi.c
src/smpi/smpi_rma.c
teshsuite/smpi/mpich3-test/f77/rma/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/rma/CMakeLists.txt
teshsuite/smpi/mpich3-test/rma/testlist

index 34ec68e..b990c4b 100644 (file)
@@ -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,
index 8e9ce16..cbe5e55 100644 (file)
@@ -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);
index 16690d6..87fe053 100644 (file)
@@ -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);
 }
index e7899fa..e214d15 100644 (file)
@@ -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);
 }
index d0d8b4b..485a8c0 100644 (file)
@@ -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;
index 6c77070..dc311a5 100644 (file)
@@ -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){
 
index bc872f6..4a23dcb 100644 (file)
@@ -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)
 
index 4059f48..07f0627 100644 (file)
@@ -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)
 
index 02360d0..8eac09d 100644 (file)
@@ -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