From: degomme Date: Sun, 5 Oct 2014 18:53:15 +0000 (+0200) Subject: cleanup, remove some useless functions X-Git-Tag: v3_12~770 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/3716378fd4fd5dae5bf86451d08965d206bb7391?ds=sidebyside cleanup, remove some useless functions --- diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 0d2a1b4568..4b96b5279f 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -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_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); diff --git a/src/smpi/private.h b/src/smpi/private.h index d799e81f55..659424dd38 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -114,11 +114,11 @@ typedef struct s_smpi_mpi_request { #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; @@ -417,11 +417,11 @@ int smpi_coll_basic_alltoallv(void *sendbuf, int *sendcounts, 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); diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index 30bb6ab31d..dacdaf01a4 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -75,8 +75,6 @@ double smpi_wtime_sleep = 0.0; 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 @@ -1590,70 +1588,3 @@ void smpi_mpi_exscan(void *sendbuf, void *recvbuf, int count, 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);; -} - diff --git a/src/smpi/smpi_comm.c b/src/smpi/smpi_comm.c index b1fb5b2fd5..d534a57983 100644 --- a/src/smpi/smpi_comm.c +++ b/src/smpi/smpi_comm.c @@ -14,13 +14,14 @@ #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_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. */ @@ -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){ - 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){ - 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; @@ -334,9 +335,9 @@ void smpi_comm_unuse(MPI_Comm comm){ 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); @@ -534,36 +535,104 @@ void smpi_comm_init_smp(MPI_Comm comm){ smpi_process_set_replaying(1); } - 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; - - xbt_dict_remove(comm->attributes, (const char*)&keyval); + + xbt_dict_remove(comm->attributes, (const char*)tmpkey); + xbt_free(tmpkey); return MPI_SUCCESS; } + 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 { - *(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); } + xbt_free(tmpkey); 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(); - 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; } diff --git a/src/smpi/smpi_mpi_dt.c b/src/smpi/smpi_mpi_dt.c index 2a9a464b10..363651655b 100644 --- a/src/smpi/smpi_mpi_dt.c +++ b/src/smpi/smpi_mpi_dt.c @@ -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); - if(elem) + if(elem && elem->delete_fn) 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); + xbt_free(tmpkey); 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); } + xbt_free(tmpkey); 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); + xbt_free(tmpkey); 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++; + xbt_free(tmpkey); 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); + xbt_free(tmpkey); return MPI_SUCCESS; } diff --git a/src/smpi/smpi_pmpi.c b/src/smpi/smpi_pmpi.c index 6d6f958cfd..7a8e852c5f 100644 --- a/src/smpi/smpi_pmpi.c +++ b/src/smpi/smpi_pmpi.c @@ -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) { - 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) { - return smpi_keyval_free(keyval); + return smpi_comm_keyval_free(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 - 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) { @@ -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 - 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) { @@ -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 - 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)