Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
cleanup, remove some useless functions
authordegomme <degomme@localhost.localdomain>
Sun, 5 Oct 2014 18:53:15 +0000 (20:53 +0200)
committerdegomme <degomme@localhost.localdomain>
Sun, 5 Oct 2014 18:53:15 +0000 (20:53 +0200)
include/smpi/smpi.h
src/smpi/private.h
src/smpi/smpi_base.c
src/smpi/smpi_comm.c
src/smpi/smpi_mpi_dt.c
src/smpi/smpi_pmpi.c

index 0d2a1b4..4b96b52 100644 (file)
@@ -601,9 +601,8 @@ 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_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);
+#define MPI_Comm_copy_attr_function MPI_Copy_function
+#define MPI_Comm_delete_attr_function MPI_Delete_function
 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 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);
index d799e81..659424d 100644 (file)
@@ -114,11 +114,11 @@ typedef struct s_smpi_mpi_request {
 #endif
 } s_smpi_mpi_request_t;
 
 #endif
 } s_smpi_mpi_request_t;
 
-typedef struct s_smpi_mpi_key_elem {
-  MPI_Copy_function* copy_fn;
-  MPI_Delete_function* delete_fn;
-} s_smpi_mpi_key_elem_t; 
-typedef struct s_smpi_mpi_key_elem *smpi_key_elem;
+typedef struct s_smpi_mpi_comm_key_elem {
+  MPI_Comm_copy_attr_function* copy_fn;
+  MPI_Comm_delete_attr_function* delete_fn;
+} s_smpi_mpi_comm_key_elem_t; 
+typedef struct s_smpi_mpi_comm_key_elem *smpi_comm_key_elem;
 
 typedef struct s_smpi_mpi_type_key_elem {
   MPI_Type_copy_attr_function* copy_fn;
 
 typedef struct s_smpi_mpi_type_key_elem {
   MPI_Type_copy_attr_function* copy_fn;
@@ -417,11 +417,11 @@ int smpi_coll_basic_alltoallv(void *sendbuf, int *sendcounts,
                               int *recvdisps, MPI_Datatype recvtype,
                               MPI_Comm comm);
                               
                               int *recvdisps, MPI_Datatype recvtype,
                               MPI_Comm comm);
                               
-int smpi_keyval_create(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state);
-int smpi_keyval_free(int* keyval);
-int smpi_attr_delete(MPI_Comm comm, int keyval);
-int smpi_attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag);
-int smpi_attr_put(MPI_Comm comm, int keyval, void* attr_value);
+int smpi_comm_keyval_create(MPI_Comm_copy_attr_function* copy_fn, MPI_Comm_delete_attr_function* delete_fn, int* keyval, void* extra_state);
+int smpi_comm_keyval_free(int* keyval);
+int smpi_comm_attr_delete(MPI_Comm comm, int keyval);
+int smpi_comm_attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag);
+int smpi_comm_attr_put(MPI_Comm comm, int keyval, void* attr_value);
 int smpi_type_attr_delete(MPI_Datatype type, int keyval);
 int smpi_type_attr_get(MPI_Datatype type, int keyval, void* attr_value, int* flag);
 int smpi_type_attr_put(MPI_Datatype type, int keyval, void* attr_value);
 int smpi_type_attr_delete(MPI_Datatype type, int keyval);
 int smpi_type_attr_get(MPI_Datatype type, int keyval, void* attr_value, int* flag);
 int smpi_type_attr_put(MPI_Datatype type, int keyval, void* attr_value);
index 30bb6ab..dacdaf0 100644 (file)
@@ -75,8 +75,6 @@ double smpi_wtime_sleep = 0.0;
 double smpi_iprobe_sleep = 1e-4;
 double smpi_test_sleep = 1e-4;
 
 double smpi_iprobe_sleep = 1e-4;
 double smpi_test_sleep = 1e-4;
 
-xbt_dict_t smpi_keyvals = NULL;
-int keyval_id=MPI_TAG_UB+1;//avoid collisions
 
 // Methods used to parse and store the values for timing injections in smpi
 // These are taken from surf/network.c and generalized to have more factors
 
 // Methods used to parse and store the values for timing injections in smpi
 // These are taken from surf/network.c and generalized to have more factors
@@ -1590,70 +1588,3 @@ void smpi_mpi_exscan(void *sendbuf, void *recvbuf, int count,
   xbt_free(requests);
 }
 
   xbt_free(requests);
 }
 
-
-int smpi_keyval_create(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state){
-
-  if(!smpi_keyvals)
-  smpi_keyvals = xbt_dict_new();
-  
-  smpi_key_elem value = (smpi_key_elem) xbt_new0(s_smpi_mpi_key_elem_t,1);
-  
-  value->copy_fn=copy_fn;
-  value->delete_fn=delete_fn;
-  
-  *keyval = keyval_id;
-  
-  xbt_dict_set(smpi_keyvals,(const char*)keyval,(void*)value, NULL);
-  keyval_id++;
-  return MPI_SUCCESS;
-}
-
-int smpi_keyval_free(int* keyval){
-  smpi_key_elem elem = xbt_dict_get_or_null(smpi_keyvals, (const char*)keyval);
-  if(!elem)
-    return MPI_ERR_ARG;
-  xbt_dict_remove(smpi_keyvals, (const char*)keyval);
-  xbt_free(elem);
-  return MPI_SUCCESS;
-}
-
-int smpi_attr_delete(MPI_Comm comm, int keyval){
-  smpi_key_elem elem = xbt_dict_get_or_null(smpi_keyvals, (const char*)&keyval);
-  if(!elem)
-    return MPI_ERR_ARG;
-  if(elem->delete_fn!=MPI_NULL_DELETE_FN){
-    void * value;
-    int flag;
-    if(smpi_attr_get(comm, keyval, &value, &flag)==MPI_SUCCESS){
-      int ret = elem->delete_fn(comm, keyval, &value, &flag);
-      if(ret!=MPI_SUCCESS) return ret;
-    }
-  }  
-  return smpi_comm_attr_delete(comm, keyval);;
-}
-
-int smpi_attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag){
-  smpi_key_elem elem = xbt_dict_get_or_null(smpi_keyvals, (const char*)&keyval);
-  if(!elem)
-    return MPI_ERR_ARG;
-  return smpi_comm_attr_get(comm, keyval, attr_value, flag);;
-}
-
-int smpi_attr_put(MPI_Comm comm, int keyval, void* attr_value){
-
-  if(!smpi_keyvals)
-  smpi_keyvals = xbt_dict_new();
-  
-  smpi_key_elem elem = xbt_dict_get_or_null(smpi_keyvals, (const char*)&keyval);
-  if(!elem )
-    return MPI_ERR_ARG;
-  int flag;
-  void* value;
-  smpi_attr_get(comm, keyval, &value, &flag);
-  if(flag){
-    int ret = elem->delete_fn(comm, keyval, &value, &flag);
-    if(ret!=MPI_SUCCESS) return ret;
-  }
-  return smpi_comm_attr_put(comm, keyval, attr_value);;
-}
-
index b1fb5b2..d534a57 100644 (file)
 #include "colls/colls.h"
 #include "xbt/ex.h"
 
 #include "colls/colls.h"
 #include "xbt/ex.h"
 
-
-extern xbt_dict_t smpi_keyvals;
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_comm, smpi,
                                 "Logging specific to SMPI (comm)");
 
 
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_comm, smpi,
                                 "Logging specific to SMPI (comm)");
 
 
 
+xbt_dict_t smpi_comm_keyvals = NULL;
+int comm_keyval_id=MPI_TAG_UB+1;//avoid collisions
+
 /* Support for cartesian topology was added, but there are 2 other types of
  * topology, graph et dist graph. In order to support them, we have to add a
  * field MPIR_Topo_type, and replace the MPI_Topology field by an union. */
 /* Support for cartesian topology was added, but there are 2 other types of
  * topology, graph et dist graph. In order to support them, we have to add a
  * field MPIR_Topo_type, and replace the MPI_Topology field by an union. */
@@ -122,9 +123,9 @@ int smpi_comm_dup(MPI_Comm comm, MPI_Comm* newcomm){
       void* value_in;
       void* value_out;
       xbt_dict_foreach(comm->attributes, cursor, key, value_in){
       void* value_in;
       void* value_out;
       xbt_dict_foreach(comm->attributes, cursor, key, value_in){
-        smpi_key_elem elem = xbt_dict_get_or_null(smpi_keyvals, (const char*)key);
+        smpi_comm_key_elem elem = xbt_dict_get_or_null(smpi_comm_keyvals, (const char*)key);
         if(elem && elem->copy_fn!=MPI_NULL_COPY_FN){
         if(elem && elem->copy_fn!=MPI_NULL_COPY_FN){
-          ret = elem->copy_fn(comm, *key, NULL, value_in, &value_out, &flag );
+          ret = elem->copy_fn(comm, atoi((const char*)key), NULL, value_in, &value_out, &flag );
           if(ret!=MPI_SUCCESS){
             smpi_comm_destroy(*newcomm);
             *newcomm=MPI_COMM_NULL;
           if(ret!=MPI_SUCCESS){
             smpi_comm_destroy(*newcomm);
             *newcomm=MPI_COMM_NULL;
@@ -334,9 +335,9 @@ void smpi_comm_unuse(MPI_Comm comm){
       void * value;
       int flag;
       xbt_dict_foreach(comm->attributes, cursor, key, value){
       void * value;
       int flag;
       xbt_dict_foreach(comm->attributes, cursor, key, value){
-        smpi_key_elem elem = xbt_dict_get_or_null(smpi_keyvals, (const char*)key);
-        if(elem)
-          elem->delete_fn(comm, *key, &value, &flag);
+        smpi_comm_key_elem elem = xbt_dict_get_or_null(smpi_comm_keyvals, (const char*)key);
+        if(elem &&  elem->delete_fn)
+          elem->delete_fn(comm, atoi((const char*)key), value, &flag);
       }
     }
     xbt_free(comm);
       }
     }
     xbt_free(comm);
@@ -534,36 +535,104 @@ void smpi_comm_init_smp(MPI_Comm comm){
     smpi_process_set_replaying(1); 
 }
 
     smpi_process_set_replaying(1); 
 }
 
-
 int smpi_comm_attr_delete(MPI_Comm comm, int keyval){
 int smpi_comm_attr_delete(MPI_Comm comm, int keyval){
+  char* tmpkey=xbt_malloc(sizeof(int));
+  sprintf(tmpkey, "%d", keyval);
+  smpi_comm_key_elem elem = xbt_dict_get_or_null(smpi_comm_keyvals, (const char*)tmpkey);
+  if(!elem)
+    return MPI_ERR_ARG;
+  if(elem->delete_fn!=MPI_NULL_DELETE_FN){
+    void * value;
+    int flag;
+    if(smpi_comm_attr_get(comm, keyval, &value, &flag)==MPI_SUCCESS){
+      int ret = elem->delete_fn(comm, keyval, &value, &flag);
+      if(ret!=MPI_SUCCESS) return ret;
+    }
+  }  
   if(comm->attributes==NULL)
     return MPI_ERR_ARG;
   if(comm->attributes==NULL)
     return MPI_ERR_ARG;
-    
-  xbt_dict_remove(comm->attributes, (const char*)&keyval);
+
+  xbt_dict_remove(comm->attributes, (const char*)tmpkey);
+  xbt_free(tmpkey);
   return MPI_SUCCESS;
 }
   return MPI_SUCCESS;
 }
+
 int smpi_comm_attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag){
 int smpi_comm_attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag){
+  char* tmpkey=xbt_malloc(sizeof(int));
+  sprintf(tmpkey, "%d", keyval);
+  smpi_comm_key_elem elem = xbt_dict_get_or_null(smpi_comm_keyvals, (const char*)tmpkey);
+  if(!elem)
+    return MPI_ERR_ARG;
   xbt_ex_t ex;
   if(comm->attributes==NULL){
     *flag=0;
     return MPI_SUCCESS;
   }
   TRY {
   xbt_ex_t ex;
   if(comm->attributes==NULL){
     *flag=0;
     return MPI_SUCCESS;
   }
   TRY {
-    *(void**)attr_value = xbt_dict_get(comm->attributes, (const char*)&keyval);
+  char* tmpkey=xbt_malloc(sizeof(int));
+  sprintf(tmpkey, "%d", keyval);
+    *(void**)attr_value = xbt_dict_get(comm->attributes, (const char*)tmpkey);
     *flag=1;
   }
   CATCH(ex) {
     *flag=0;
     xbt_ex_free(ex);
   }
     *flag=1;
   }
   CATCH(ex) {
     *flag=0;
     xbt_ex_free(ex);
   }
+  xbt_free(tmpkey);
   return MPI_SUCCESS;
 }
 
 int smpi_comm_attr_put(MPI_Comm comm, int keyval, void* attr_value){
   return MPI_SUCCESS;
 }
 
 int smpi_comm_attr_put(MPI_Comm comm, int keyval, void* attr_value){
+  if(!smpi_comm_keyvals)
+  smpi_comm_keyvals = xbt_dict_new();
+  char* tmpkey=xbt_malloc(sizeof(int));
+  sprintf(tmpkey, "%d", keyval);
+  smpi_comm_key_elem elem = xbt_dict_get_or_null(smpi_comm_keyvals, (const char*)tmpkey);
+  if(!elem )
+    return MPI_ERR_ARG;
+  int flag;
+  void* value;
+  smpi_comm_attr_get(comm, keyval, &value, &flag);
+  if(flag && elem->delete_fn!=MPI_NULL_DELETE_FN){
+    int ret = elem->delete_fn(comm, keyval, &value, &flag);
+    if(ret!=MPI_SUCCESS) return ret;
+  }
   if(comm->attributes==NULL)
     comm->attributes=xbt_dict_new();
 
   if(comm->attributes==NULL)
     comm->attributes=xbt_dict_new();
 
-  xbt_dict_set(comm->attributes, (const char*)&keyval, attr_value, NULL);
+  xbt_dict_set(comm->attributes, (const char*)tmpkey, attr_value, NULL);
+  xbt_free(tmpkey);
+  return MPI_SUCCESS;
+}
+
+int smpi_comm_keyval_create(MPI_Comm_copy_attr_function* copy_fn, MPI_Comm_delete_attr_function* delete_fn, int* keyval, void* extra_state){
+
+  if(!smpi_comm_keyvals)
+  smpi_comm_keyvals = xbt_dict_new();
+  
+  smpi_comm_key_elem value = (smpi_comm_key_elem) xbt_new0(s_smpi_mpi_comm_key_elem_t,1);
+  
+  value->copy_fn=copy_fn;
+  value->delete_fn=delete_fn;
+  
+  *keyval = comm_keyval_id;
+  char* tmpkey=xbt_malloc(sizeof(int));
+  sprintf(tmpkey, "%d", *keyval);
+  xbt_dict_set(smpi_comm_keyvals,(const char*)tmpkey,(void*)value, NULL);
+  comm_keyval_id++;
+  xbt_free(tmpkey);
+  return MPI_SUCCESS;
+}
+
+int smpi_comm_keyval_free(int* keyval){
+  smpi_comm_key_elem elem = xbt_dict_get_or_null(smpi_comm_keyvals, (const char*)keyval);
+  if(!elem)
+    return MPI_ERR_ARG;
+  char* tmpkey=xbt_malloc(sizeof(int));
+  sprintf(tmpkey, "%d", *keyval);
+  xbt_dict_remove(smpi_comm_keyvals, (const char*)tmpkey);
+  xbt_free(elem);
+  xbt_free(tmpkey);
   return MPI_SUCCESS;
 }
 
   return MPI_SUCCESS;
 }
 
index 2a9a464..3636516 100644 (file)
@@ -410,7 +410,7 @@ void smpi_datatype_free(MPI_Datatype* type){
       int flag;
       xbt_dict_foreach((*type)->attributes, cursor, key, value){
         smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)key);
       int flag;
       xbt_dict_foreach((*type)->attributes, cursor, key, value){
         smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)key);
-        if(elem)
+        if(elem &&  elem->delete_fn)
           elem->delete_fn(*type, atoi((const char*)key), &value, &flag);
       }
   }
           elem->delete_fn(*type, atoi((const char*)key), &value, &flag);
       }
   }
@@ -1686,6 +1686,7 @@ int smpi_type_attr_delete(MPI_Datatype type, int keyval){
     return MPI_ERR_ARG;
 
   xbt_dict_remove(type->attributes, (const char*)tmpkey);
     return MPI_ERR_ARG;
 
   xbt_dict_remove(type->attributes, (const char*)tmpkey);
+  xbt_free(tmpkey);
   return MPI_SUCCESS;
 }
 
   return MPI_SUCCESS;
 }
 
@@ -1710,6 +1711,7 @@ int smpi_type_attr_get(MPI_Datatype type, int keyval, void* attr_value, int* fla
     *flag=0;
     xbt_ex_free(ex);
   }
     *flag=0;
     xbt_ex_free(ex);
   }
+  xbt_free(tmpkey);
   return MPI_SUCCESS;
 }
 
   return MPI_SUCCESS;
 }
 
@@ -1732,6 +1734,7 @@ int smpi_type_attr_put(MPI_Datatype type, int keyval, void* attr_value){
     type->attributes=xbt_dict_new();
 
   xbt_dict_set(type->attributes, (const char*)tmpkey, attr_value, NULL);
     type->attributes=xbt_dict_new();
 
   xbt_dict_set(type->attributes, (const char*)tmpkey, attr_value, NULL);
+  xbt_free(tmpkey);
   return MPI_SUCCESS;
 }
 
   return MPI_SUCCESS;
 }
 
@@ -1750,6 +1753,7 @@ int smpi_type_keyval_create(MPI_Type_copy_attr_function* copy_fn, MPI_Type_delet
   sprintf(tmpkey, "%d", *keyval);
   xbt_dict_set(smpi_type_keyvals,(const char*)tmpkey,(void*)value, NULL);
   type_keyval_id++;
   sprintf(tmpkey, "%d", *keyval);
   xbt_dict_set(smpi_type_keyvals,(const char*)tmpkey,(void*)value, NULL);
   type_keyval_id++;
+  xbt_free(tmpkey);
   return MPI_SUCCESS;
 }
 
   return MPI_SUCCESS;
 }
 
@@ -1761,5 +1765,6 @@ int smpi_type_keyval_free(int* keyval){
   sprintf(tmpkey, "%d", *keyval);
   xbt_dict_remove(smpi_type_keyvals, (const char*)tmpkey);
   xbt_free(elem);
   sprintf(tmpkey, "%d", *keyval);
   xbt_dict_remove(smpi_type_keyvals, (const char*)tmpkey);
   xbt_free(elem);
+  xbt_free(tmpkey);
   return MPI_SUCCESS;
 }
   return MPI_SUCCESS;
 }
index 6d6f958..7a8e852 100644 (file)
@@ -2954,11 +2954,11 @@ MPI_Fint PMPI_Comm_c2f(MPI_Comm comm){
 }
 
 int PMPI_Keyval_create(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state) {
 }
 
 int PMPI_Keyval_create(MPI_Copy_function* copy_fn, MPI_Delete_function* delete_fn, int* keyval, void* extra_state) {
-  return smpi_keyval_create(copy_fn, delete_fn, keyval, extra_state);
+  return smpi_comm_keyval_create(copy_fn, delete_fn, keyval, extra_state);
 }
 
 int PMPI_Keyval_free(int* keyval) {
 }
 
 int PMPI_Keyval_free(int* keyval) {
-  return smpi_keyval_free(keyval);
+  return smpi_comm_keyval_free(keyval);
 }
 
 int PMPI_Attr_delete(MPI_Comm comm, int keyval) {
 }
 
 int PMPI_Attr_delete(MPI_Comm comm, int keyval) {
@@ -2969,7 +2969,7 @@ int PMPI_Attr_delete(MPI_Comm comm, int keyval) {
   else if (comm==MPI_COMM_NULL)
     return MPI_ERR_COMM;
   else
   else if (comm==MPI_COMM_NULL)
     return MPI_ERR_COMM;
   else
-    return smpi_attr_delete(comm, keyval);
+    return smpi_comm_attr_delete(comm, keyval);
 }
 
 int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) {
 }
 
 int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) {
@@ -2986,7 +2986,7 @@ int PMPI_Attr_get(MPI_Comm comm, int keyval, void* attr_value, int* flag) {
     *(int**)attr_value=res;
     return MPI_SUCCESS;
   } else
     *(int**)attr_value=res;
     return MPI_SUCCESS;
   } else
-  return smpi_attr_get(comm, keyval, attr_value, flag);
+  return smpi_comm_attr_get(comm, keyval, attr_value, flag);
 }
 
 int PMPI_Attr_put(MPI_Comm comm, int keyval, void* attr_value) {
 }
 
 int PMPI_Attr_put(MPI_Comm comm, int keyval, void* attr_value) {
@@ -2997,7 +2997,7 @@ int PMPI_Attr_put(MPI_Comm comm, int keyval, void* attr_value) {
   else if (comm==MPI_COMM_NULL)
     return MPI_ERR_COMM;
   else
   else if (comm==MPI_COMM_NULL)
     return MPI_ERR_COMM;
   else
-  return smpi_attr_put(comm, keyval, attr_value);
+  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)
 }
 
 int PMPI_Comm_get_attr (MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag)