diff --git a/src/hwloc/hwloc_base_util.c b/src/hwloc/hwloc_base_util.c
index b14e5b1f26..c99b67548c 100644
--- a/src/hwloc/hwloc_base_util.c
+++ b/src/hwloc/hwloc_base_util.c
@@ -1328,7 +1328,7 @@ void prte_hwloc_get_binding_info(hwloc_const_cpuset_t cpuset,
/* if the cpuset is all zero, then something is wrong */
if (hwloc_bitmap_iszero(cpuset)) {
- snprintf(cores, sz, "\n%*c\n", 20, ' ');
+ snprintf(cores, sz, "\n%*c\n", 20, ' ');
}
/* if the cpuset includes all available cpus, and
@@ -1401,7 +1401,7 @@ char *prte_hwloc_base_cset2str(hwloc_const_cpuset_t cpuset,
/* if the cpuset is all zero, then something is wrong */
if (hwloc_bitmap_iszero(cpuset)) {
- return strdup("NOT MAPPED");
+ return strdup("EMPTY CPUSET");
}
/* if the cpuset includes all available cpus, and
diff --git a/src/mca/rmaps/base/rmaps_base_binding.c b/src/mca/rmaps/base/rmaps_base_binding.c
index 551100ea60..e5b5cce8a1 100644
--- a/src/mca/rmaps/base/rmaps_base_binding.c
+++ b/src/mca/rmaps/base/rmaps_base_binding.c
@@ -16,7 +16,7 @@
* Copyright (c) 2015-2017 Research Organization for Information Science
* and Technology (RIST). All rights reserved.
* Copyright (c) 2018 Inria. All rights reserved.
- * Copyright (c) 2021-2023 Nanook Consulting All rights reserved.
+ * Copyright (c) 2021-2024 Nanook Consulting All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
@@ -61,6 +61,7 @@ static int bind_generic(prte_job_t *jdata, prte_proc_t *proc,
hwloc_obj_type_t type;
hwloc_obj_t target;
hwloc_cpuset_t tgtcpus, tmpcpus;
+ int nobjs, n;
pmix_output_verbose(5, prte_rmaps_base_framework.framework_output,
"mca:rmaps: bind %s with policy %s",
@@ -82,18 +83,18 @@ static int bind_generic(prte_job_t *jdata, prte_proc_t *proc,
#endif
hwloc_bitmap_and(prte_rmaps_base.baseset, options->target, tgtcpus);
- trg_obj = NULL;
- /* find the first object of that type in the target that has at least one available CPU */
- tmp_obj = hwloc_get_next_obj_inside_cpuset_by_type(node->topology->topo,
- prte_rmaps_base.baseset,
- options->hwb, NULL);
- while (NULL != tmp_obj) {
+ nobjs = hwloc_get_nbobjs_by_type(node->topology->topo, options->hwb);
+
+ for (n=0; n < nobjs; n++) {
+ tmp_obj = hwloc_get_obj_by_type(node->topology->topo, options->hwb, n);
#if HWLOC_API_VERSION < 0x20000
tmpcpus = tmp_obj->allowed_cpuset;
#else
tmpcpus = tmp_obj->cpuset;
#endif
hwloc_bitmap_and(prte_rmaps_base.available, node->available, tmpcpus);
+ hwloc_bitmap_and(prte_rmaps_base.available, prte_rmaps_base.available, prte_rmaps_base.baseset);
+
if (options->use_hwthreads) {
ncpus = hwloc_bitmap_weight(prte_rmaps_base.available);
} else {
@@ -112,9 +113,6 @@ static int bind_generic(prte_job_t *jdata, prte_proc_t *proc,
trg_obj = tmp_obj;
break;
}
- tmp_obj = hwloc_get_next_obj_inside_cpuset_by_type(node->topology->topo,
- prte_rmaps_base.baseset,
- options->hwb, tmp_obj);
}
if (NULL == trg_obj) {
/* there aren't any appropriate targets under this object */
diff --git a/src/mca/rmaps/base/rmaps_base_support_fns.c b/src/mca/rmaps/base/rmaps_base_support_fns.c
index 84389b21a9..2eb02bb3af 100644
--- a/src/mca/rmaps/base/rmaps_base_support_fns.c
+++ b/src/mca/rmaps/base/rmaps_base_support_fns.c
@@ -631,27 +631,18 @@ int prte_rmaps_base_get_ncpus(prte_node_t *node,
{
int ncpus;
-#if HWLOC_API_VERSION < 0x20000
- hwloc_obj_t root;
- root = hwloc_get_root_obj(node->topology->topo);
if (NULL == options->job_cpuset) {
- hwloc_bitmap_copy(prte_rmaps_base.available, root->allowed_cpuset);
+ hwloc_bitmap_copy(prte_rmaps_base.available, node->available);
} else {
- hwloc_bitmap_and(prte_rmaps_base.available, root->allowed_cpuset, options->job_cpuset);
+ hwloc_bitmap_and(prte_rmaps_base.available, node->available, options->job_cpuset);
}
if (NULL != obj) {
+#if HWLOC_API_VERSION < 0x20000
hwloc_bitmap_and(prte_rmaps_base.available, prte_rmaps_base.available, obj->allowed_cpuset);
- }
#else
- if (NULL == options->job_cpuset) {
- hwloc_bitmap_copy(prte_rmaps_base.available, hwloc_topology_get_allowed_cpuset(node->topology->topo));
- } else {
- hwloc_bitmap_and(prte_rmaps_base.available, hwloc_topology_get_allowed_cpuset(node->topology->topo), options->job_cpuset);
- }
- if (NULL != obj) {
hwloc_bitmap_and(prte_rmaps_base.available, prte_rmaps_base.available, obj->cpuset);
- }
#endif
+ }
if (options->use_hwthreads) {
ncpus = hwloc_bitmap_weight(prte_rmaps_base.available);
} else {
@@ -664,6 +655,7 @@ int prte_rmaps_base_get_ncpus(prte_node_t *node,
*/
ncpus = hwloc_get_nbobjs_inside_cpuset_by_type(node->topology->topo, prte_rmaps_base.available, HWLOC_OBJ_CORE);
}
+
return ncpus;
}