Finding objects, miscellaneous helpers

## Functions

static hwloc_obj_t | hwloc_get_pu_obj_by_os_index (hwloc_topology_t topology, unsigned os_index)
static hwloc_obj_t | hwloc_get_numanode_obj_by_os_index (hwloc_topology_t topology, unsigned os_index)
unsigned | hwloc_get_closest_objs (hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t *restrict objs, unsigned max)
static hwloc_obj_t | hwloc_get_obj_below_by_type (hwloc_topology_t topology, hwloc_obj_type_t type1, unsigned idx1, hwloc_obj_type_t type2, unsigned idx2)
static hwloc_obj_t | hwloc_get_obj_below_array_by_type (hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)

## Detailed Description

Be sure to see the figure in Terms and Definitions that shows a complete topology tree, including depths, child/sibling/cousin relationships, and an example of an asymmetric topology where one package has fewer caches than its peers.

## Function Documentation

## hwloc_get_closest_objs()

unsigned hwloc_get_closest_objs | ( | hwloc_topology_t | topology,
|  | hwloc_obj_t | src,
|  | hwloc_obj_t *restrict | objs,
|  | unsigned | max
| ) |  |

Do a depth-first traversal of the topology to find and sort.

all objects that are at the same depth than `src`. Report in `objs` up to `max` physically closest ones to `src`.

Returns
  the number of objects returned in `objs`.
  0 if `src` is an I/O object.

Note
  This function requires the `src` object to have a CPU set.

## hwloc_get_numanode_obj_by_os_index()

static hwloc_obj_t hwloc_get_numanode_obj_by_os_index | ( | hwloc_topology_t | topology,
|  | unsigned | os_index
| ) |  |

inlinestatic

Returns the object of type HWLOC_OBJ_NUMANODE with `os_index`.

This function is useful for converting a nodeset into the NUMA node objects it contains. When retrieving the current binding (e.g. with hwloc_get_membind_nodeset()), one may iterate over the bits of the resulting nodeset with hwloc_bitmap_foreach_begin(), and find the corresponding NUMA nodes with this function.

## hwloc_get_obj_below_array_by_type()

static hwloc_obj_t hwloc_get_obj_below_array_by_type | ( | hwloc_topology_t | topology,
|  | int | nr,
|  | hwloc_obj_type_t * | typev,
|  | unsigned * | idxv
| ) |  |

inlinestatic

Find an object below a chain of objects specified by types and indexes.

This is a generalized version of hwloc_get_obj_below_by_type().

Arrays `typev` and `idxv` must contain `nr` types and indexes.

Start from the top system object and walk the arrays `typev` and `idxv`. For each type and logical index couple in the arrays, look under the previously found object to find the index-th object of the given type. Indexes are specified within the parent, not withing the entire system.

For instance, if nr is 3, typev contains NODE, PACKAGE and CORE, and idxv contains 0, 1 and 2, return the third core object below the second package below the first NUMA node.

Note
  This function requires all these objects and the root object to have a CPU set.

## hwloc_get_obj_below_by_type()

static hwloc_obj_t hwloc_get_obj_below_by_type | ( | hwloc_topology_t | topology,
|  | hwloc_obj_type_t | type1,
|  | unsigned | idx1,
|  | hwloc_obj_type_t | type2,
|  | unsigned | idx2
| ) |  |

inlinestatic

Find an object below another object, both specified by types and indexes.

Start from the top system object and find object of type `type1` and logical index `idx1`. Then look below this object and find another object of type `type2` and logical index `idx2`. Indexes are specified within the parent, not withing the entire system.

For instance, if type1 is PACKAGE, idx1 is 2, type2 is CORE and idx2 is 3, return the fourth core object below the third package.

Note
  This function requires these objects to have a CPU set.

## hwloc_get_pu_obj_by_os_index()

static hwloc_obj_t hwloc_get_pu_obj_by_os_index | ( | hwloc_topology_t | topology,
|  | unsigned | os_index
| ) |  |

inlinestatic

Returns the object of type HWLOC_OBJ_PU with `os_index`.

This function is useful for converting a CPU set into the PU objects it contains. When retrieving the current binding (e.g. with hwloc_get_cpubind()), one may iterate over the bits of the resulting CPU set with hwloc_bitmap_foreach_begin(), and find the corresponding PUs with this function.