X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/cf108868b4eeed4d0d9d343bc68557d7814e18c0..a5945452ef5b1114fd7c2fab0e865d776775c34d:/src/smpi/smpi_group.cpp diff --git a/src/smpi/smpi_group.cpp b/src/smpi/smpi_group.cpp index 22fd814ff5..119b8bba68 100644 --- a/src/smpi/smpi_group.cpp +++ b/src/smpi/smpi_group.cpp @@ -6,8 +6,7 @@ #include "private.h" -XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_group, smpi, - "Logging specific to SMPI (group)"); +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_group, smpi, "Logging specific to SMPI (group)"); typedef struct s_smpi_mpi_group { int size; @@ -50,9 +49,7 @@ MPI_Group smpi_group_copy(MPI_Group origin) xbt_dict_cursor_t cursor = NULL; int i; - if(origin!= smpi_comm_group(MPI_COMM_WORLD) - && origin != MPI_GROUP_NULL - && origin != smpi_comm_group(MPI_COMM_SELF) + if(origin != MPI_GROUP_NULL && origin != MPI_GROUP_EMPTY) { group = xbt_new(s_smpi_mpi_group_t, 1); @@ -65,40 +62,36 @@ MPI_Group smpi_group_copy(MPI_Group origin) } xbt_dict_foreach(origin->index_to_rank_map, cursor, key, ptr_rank) { - xbt_dict_set(group->index_to_rank_map, key, ptr_rank, NULL); + int * cp = static_cast(xbt_malloc(sizeof(int))); + *cp=*reinterpret_cast(ptr_rank); + xbt_dict_set(group->index_to_rank_map, key, cp, NULL); } } return group; } - void smpi_group_destroy(MPI_Group group) { if(group!= smpi_comm_group(MPI_COMM_WORLD) && group != MPI_GROUP_NULL - && group != smpi_comm_group(MPI_COMM_SELF) && group != MPI_GROUP_EMPTY) smpi_group_unuse(group); } void smpi_group_set_mapping(MPI_Group group, int index, int rank) { - char * key; int * val_rank; if (rank < group->size) { group->rank_to_index_map[rank] = index; if (index!=MPI_UNDEFINED ) { - val_rank = (int *) malloc(sizeof(int)); - *val_rank = rank; - int size = asprintf(&key, "%d", index); - if (size!=-1){ - xbt_dict_set(group->index_to_rank_map, key, val_rank, NULL); - free(key); - } else { - xbt_die("could not allocate memory for asprintf"); - } + val_rank = static_cast(xbt_malloc(sizeof(int))); + *val_rank = rank; + + char * key = bprintf("%d", index); + xbt_dict_set(group->index_to_rank_map, key, val_rank, NULL); + xbt_free(key); } } } @@ -116,14 +109,11 @@ int smpi_group_index(MPI_Group group, int rank) int smpi_group_rank(MPI_Group group, int index) { int * ptr_rank = NULL; - char * key; - int size = asprintf(&key, "%d", index); - if (size!=-1){ - ptr_rank = static_cast(xbt_dict_get_or_null(group->index_to_rank_map, key)); - xbt_free(key); - }else - xbt_die("could not allocate memory for asprintf"); - if (!ptr_rank) + char * key = bprintf("%d", index); + ptr_rank = static_cast(xbt_dict_get_or_null(group->index_to_rank_map, key)); + xbt_free(key); + + if (ptr_rank==NULL) return MPI_UNDEFINED; return *ptr_rank; } @@ -144,7 +134,6 @@ int smpi_group_unuse(MPI_Group group) return 0; } return group->refcount; - } int smpi_group_size(MPI_Group group)