From 5296099ecbb10c0e06bf3d9cd4f0ab8f49b381aa Mon Sep 17 00:00:00 2001 From: Ralph Castain Date: Tue, 14 May 2013 20:17:50 +0000 Subject: [PATCH] Fix the cpus-per-rank when binding to hwthreads. Add cpus-per-rank to diag printout Thanks to Elena for reporting the problem This commit was SVN r28508. --- orte/mca/rmaps/base/rmaps_base_binding.c | 5 ++++- orte/runtime/data_type_support/orte_dt_print_fns.c | 12 +++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/orte/mca/rmaps/base/rmaps_base_binding.c b/orte/mca/rmaps/base/rmaps_base_binding.c index 502fa994e2..2db9f59f92 100644 --- a/orte/mca/rmaps/base/rmaps_base_binding.c +++ b/orte/mca/rmaps/base/rmaps_base_binding.c @@ -316,7 +316,10 @@ static int bind_downwards(orte_job_t *jdata, "%s GOT %d CPUS", ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), ncpus); /* track the number bound */ - data = (opal_hwloc_obj_data_t*)trg_obj->userdata; + if (NULL == (data = (opal_hwloc_obj_data_t*)trg_obj->userdata)) { + data = OBJ_NEW(opal_hwloc_obj_data_t); + trg_obj->userdata = data; + } data->num_bound++; /* error out if adding a proc would cause overload and that wasn't allowed */ if (ncpus < data->num_bound && diff --git a/orte/runtime/data_type_support/orte_dt_print_fns.c b/orte/runtime/data_type_support/orte_dt_print_fns.c index 345e4029f5..fce8cdf2f1 100644 --- a/orte/runtime/data_type_support/orte_dt_print_fns.c +++ b/orte/runtime/data_type_support/orte_dt_print_fns.c @@ -660,21 +660,23 @@ int orte_dt_print_map(char **output, char *prefix, orte_job_map_t *src, opal_dat if (orte_devel_level_output) { #if OPAL_HAVE_HWLOC - asprintf(&tmp, "\n%sMapper requested: %s Last mapper: %s Mapping policy: %s Ranking policy: %s Binding policy: %s Cpu set: %s PPR: %s", + asprintf(&tmp, "\n%sMapper requested: %s Last mapper: %s Mapping policy: %s Ranking policy: %s\n%sBinding policy: %s Cpu set: %s PPR: %s Cpus-per-rank: %d", pfx2, (NULL == src->req_mapper) ? "NULL" : src->req_mapper, (NULL == src->last_mapper) ? "NULL" : src->last_mapper, orte_rmaps_base_print_mapping(src->mapping), orte_rmaps_base_print_ranking(src->ranking), - opal_hwloc_base_print_binding(src->binding), + pfx2, opal_hwloc_base_print_binding(src->binding), (NULL == opal_hwloc_base_cpu_set) ? "NULL" : opal_hwloc_base_cpu_set, - (NULL == src->ppr) ? "NULL" : src->ppr); + (NULL == src->ppr) ? "NULL" : src->ppr, + (int)src->cpus_per_rank); #else - asprintf(&tmp, "\n%sMapper requested: %s Last mapper: %s Mapping policy: %s Ranking policy: %s PPR: %s", + asprintf(&tmp, "\n%sMapper requested: %s Last mapper: %s Mapping policy: %s Ranking policy: %s PPR: %s Cpus-per-rank: %d", pfx2, (NULL == src->req_mapper) ? "NULL" : src->req_mapper, (NULL == src->last_mapper) ? "NULL" : src->last_mapper, orte_rmaps_base_print_mapping(src->mapping), orte_rmaps_base_print_ranking(src->ranking), - (NULL == src->ppr) ? "NULL" : src->ppr); + (NULL == src->ppr) ? "NULL" : src->ppr, + (int)src->cpus_per_rank)); #endif if (ORTE_VPID_INVALID == src->daemon_vpid_start) {