Ralph and Brice,

since https://github.com/open-mpi/ompi/commit/fe68f2309912ea2afdc3339ff9a3b697f69a2dd1 we likely set the default binding policy to OPAL_BIND_TO_NUMA


unfortunatly, that does not work on my VM (Virtual Box, single socket, 4 cores) since there is no HWLOC_OBJ_NODE here

with hwloc v1.11

<topology>
<object type="Machine" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" local_memory="3975217152"> <object type="Package" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f"> <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0"> <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0"> <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1"> <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2"> <object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"> <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
[...]

</topology>


but with the latest hwloc (master branch, that does not work yet with Open MPI)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topology SYSTEM "hwloc.dtd">
<topology>
<object type="Machine" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="1"> <object type="NUMANode" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="2" local_memory="4294500352"> <object type="Package" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="3"> <object type="L3Cache" cpuset="0x00000001" complete_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="9" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16" cache_type="0"> <object type="L2Cache" cpuset="0x00000001" complete_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="8" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0"> <object type="L1Cache" cpuset="0x00000001" complete_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="6" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="1"> <object type="L1iCache" cpuset="0x00000001" complete_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="7" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8" cache_type="2"> <object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="4"> <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" gp_index="5"/>
[...]

</topology>


an ugly work around is to bind to HWLOC_OBJ_PACKAGE when there is no HWLOC_OBJ_NODE

diff --git a/orte/mca/rmaps/base/rmaps_base_binding.c b/orte/mca/rmaps/base/rmaps_base_binding.c
index 6786da7..ddc106c 100644
--- a/orte/mca/rmaps/base/rmaps_base_binding.c
+++ b/orte/mca/rmaps/base/rmaps_base_binding.c
@@ -916,6 +916,10 @@ int orte_rmaps_base_compute_bindings(orte_job_t *jdata)
bind_depth = hwloc_get_cache_type_depth(node->topology, clvl, (hwloc_obj_cache_type_t)-1);
             } else {
                 bind_depth = hwloc_get_type_depth(node->topology, hwb);
+                if (0 > bind_depth && HWLOC_OBJ_NODE == hwb) {
+                    hwb = HWLOC_OBJ_PACKAGE;
+                    bind_depth = hwloc_get_type_depth(node->topology, hwb);
+                }
             }
             if (0 > bind_depth) {
                 /* didn't find such an object */


or we could check the existence of HWLOC_OBJ_PACKAGE before setting the default policy in orte_rmaps_base_map_job(),

not to mention it is possible to generate an xml topology with the latest hwloc, and

mpirun --mca hwloc_base_topo_file topo.xml ...



Brice,


things would be much easier if there were an HWLOC_OBJ_NODE object in the topology.

could you please consider backporting the relevant changes from master into the v1.11 branch ?


Cheers,


Gilles

_______________________________________________
devel mailing list
devel@lists.open-mpi.org
https://rfd.newmexicoconsortium.org/mailman/listinfo/devel

Reply via email to