Skip to content

Commit b53a803

Browse files
CPU Affinity: Filter out packages with zero PUs (#2676)
1 parent 3ea991c commit b53a803

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/conv-core/cpuaffinity.C

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,17 @@ static void cpuAffinityRecvHandler(void *msg)
602602
if (m->node_hosts[i] == myhost)
603603
++nodes_on_host;
604604

605-
const int package_count = cmi_hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PACKAGE);
605+
// Filter out packages with null cpusets, caused by system resource management
606+
const int total_package_count = cmi_hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PACKAGE);
607+
std::vector<hwloc_obj_t> packages;
608+
packages.reserve(total_package_count);
609+
for (int i = 0; i < total_package_count; ++i)
610+
{
611+
hwloc_obj_t obj = cmi_hwloc_get_obj_by_type(topology, HWLOC_OBJ_PACKAGE, i);
612+
if (cmi_hwloc_get_nbobjs_inside_cpuset_by_type(topology, obj->cpuset, HWLOC_OBJ_PU) > 0)
613+
packages.emplace_back(obj);
614+
}
615+
const int package_count = packages.size();
606616

607617
hwloc_obj_t obj;
608618
int numranks, myrank;
@@ -627,7 +637,7 @@ static void cpuAffinityRecvHandler(void *msg)
627637
}
628638
}
629639

630-
obj = cmi_hwloc_get_obj_by_type(topology, HWLOC_OBJ_PACKAGE, mypackage);
640+
obj = packages[mypackage];
631641
numranks = pes_on_package;
632642
myrank = my_first_pe_rank_on_package + CmiMyRank();
633643

0 commit comments

Comments
 (0)