From f334607c34f853297206d90024c017e94bdb9ac9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20FOYER?= Date: Tue, 27 Jun 2017 19:01:43 +0200 Subject: [PATCH] Simplify the communicator's name caching management (#6) Signed-off-by: Clement Foyer --- .../mca/common/monitoring/common_monitoring.h | 1 + .../monitoring/common_monitoring_coll.c | 22 ++++++++++++------- ompi/mca/pml/monitoring/pml_monitoring_comm.c | 1 + 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ompi/mca/common/monitoring/common_monitoring.h b/ompi/mca/common/monitoring/common_monitoring.h index 5c4cef00d3..a199adef99 100644 --- a/ompi/mca/common/monitoring/common_monitoring.h +++ b/ompi/mca/common/monitoring/common_monitoring.h @@ -110,6 +110,7 @@ typedef struct mca_monitoring_coll_data_t mca_monitoring_coll_data_t; OMPI_DECLSPEC OBJ_CLASS_DECLARATION(mca_monitoring_coll_data_t); OMPI_DECLSPEC mca_monitoring_coll_data_t*mca_common_monitoring_coll_new(ompi_communicator_t*comm); +OMPI_DECLSPEC int mca_common_monitoring_coll_cache_name(ompi_communicator_t*comm); OMPI_DECLSPEC void mca_common_monitoring_coll_release(mca_monitoring_coll_data_t*data); OMPI_DECLSPEC void mca_common_monitoring_coll_o2a(size_t size, mca_monitoring_coll_data_t*data); OMPI_DECLSPEC void mca_common_monitoring_coll_a2o(size_t size, mca_monitoring_coll_data_t*data); diff --git a/ompi/mca/common/monitoring/common_monitoring_coll.c b/ompi/mca/common/monitoring/common_monitoring_coll.c index c68ae442f1..9383eb415d 100644 --- a/ompi/mca/common/monitoring/common_monitoring_coll.c +++ b/ompi/mca/common/monitoring/common_monitoring_coll.c @@ -41,13 +41,20 @@ struct mca_monitoring_coll_data_t { /* Collectives operation monitoring */ static opal_hash_table_t *comm_data = NULL; +int mca_common_monitoring_coll_cache_name(ompi_communicator_t*comm) +{ + mca_monitoring_coll_data_t*data; + int ret = opal_hash_table_get_value_uint64(comm_data, *((uint64_t*)&comm), (void*)&data); + if( OPAL_SUCCESS == ret ) { + data->comm_name = strdup(comm->c_name); + data->p_comm = NULL; + } + return ret; +} + static inline void mca_common_monitoring_coll_cache(mca_monitoring_coll_data_t*data) { - if( data->is_released ) { - /* As long as the data struct is not released, we still have the communicator to - immediately fetch the communicator's name */ - data->comm_name = strdup(data->p_comm->c_name); - } + int world_rank; if( -1 == data->world_rank ) { /* Get current process world_rank */ mca_common_monitoring_get_world_rank(ompi_comm_rank(data->p_comm), data->p_comm, @@ -160,9 +167,8 @@ void mca_common_monitoring_coll_flush(FILE *pf, mca_monitoring_coll_data_t*data) "O2A\t%" PRId32 "\t%zu bytes\t%zu msgs sent\n" "A2O\t%" PRId32 "\t%zu bytes\t%zu msgs sent\n" "A2A\t%" PRId32 "\t%zu bytes\t%zu msgs sent\n", - data->p_comm ? data->p_comm->c_name - : data->comm_name ? data->comm_name : "(no-name)", - data->procs, + data->comm_name ? data->comm_name : data->p_comm ? + data->p_comm->c_name : "(no-name)", data->procs, data->world_rank, data->o2a_size, data->o2a_count, data->world_rank, data->a2o_size, data->a2o_count, data->world_rank, data->a2a_size, data->a2a_count); diff --git a/ompi/mca/pml/monitoring/pml_monitoring_comm.c b/ompi/mca/pml/monitoring/pml_monitoring_comm.c index 44b7d0c9d6..b689ef637e 100644 --- a/ompi/mca/pml/monitoring/pml_monitoring_comm.c +++ b/ompi/mca/pml/monitoring/pml_monitoring_comm.c @@ -20,5 +20,6 @@ int mca_pml_monitoring_add_comm(struct ompi_communicator_t* comm) int mca_pml_monitoring_del_comm(struct ompi_communicator_t* comm) { + mca_common_monitoring_coll_cache_name(comm); return pml_selected_module.pml_del_comm(comm); }