Simplify the communicator's name caching management (#6)
Signed-off-by: Clement Foyer <clement.foyer@inria.fr>
Этот коммит содержится в:
родитель
a680b3ac6d
Коммит
f334607c34
@ -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 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 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_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_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);
|
OMPI_DECLSPEC void mca_common_monitoring_coll_a2o(size_t size, mca_monitoring_coll_data_t*data);
|
||||||
|
@ -41,13 +41,20 @@ struct mca_monitoring_coll_data_t {
|
|||||||
/* Collectives operation monitoring */
|
/* Collectives operation monitoring */
|
||||||
static opal_hash_table_t *comm_data = NULL;
|
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)
|
static inline void mca_common_monitoring_coll_cache(mca_monitoring_coll_data_t*data)
|
||||||
{
|
{
|
||||||
if( data->is_released ) {
|
int world_rank;
|
||||||
/* 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);
|
|
||||||
}
|
|
||||||
if( -1 == data->world_rank ) {
|
if( -1 == data->world_rank ) {
|
||||||
/* Get current process world_rank */
|
/* Get current process world_rank */
|
||||||
mca_common_monitoring_get_world_rank(ompi_comm_rank(data->p_comm), data->p_comm,
|
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"
|
"O2A\t%" PRId32 "\t%zu bytes\t%zu msgs sent\n"
|
||||||
"A2O\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",
|
"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 : data->p_comm ?
|
||||||
: data->comm_name ? data->comm_name : "(no-name)",
|
data->p_comm->c_name : "(no-name)", data->procs,
|
||||||
data->procs,
|
|
||||||
data->world_rank, data->o2a_size, data->o2a_count,
|
data->world_rank, data->o2a_size, data->o2a_count,
|
||||||
data->world_rank, data->a2o_size, data->a2o_count,
|
data->world_rank, data->a2o_size, data->a2o_count,
|
||||||
data->world_rank, data->a2a_size, data->a2a_count);
|
data->world_rank, data->a2a_size, data->a2a_count);
|
||||||
|
@ -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)
|
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);
|
return pml_selected_module.pml_del_comm(comm);
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user