Open MPI logo

Portable Hardware Locality (hwloc) Documentation: v2.2.0

  |   Home   |   Support   |   FAQ   |  
Topology Detection Configuration and Query

Data Structures

struct  hwloc_topology_discovery_support
struct  hwloc_topology_cpubind_support
struct  hwloc_topology_membind_support
struct  hwloc_topology_support




int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags)
unsigned long hwloc_topology_get_flags (hwloc_topology_t topology)
int hwloc_topology_is_thissystem (hwloc_topology_t restrict topology)
const struct hwloc_topology_supporthwloc_topology_get_support (hwloc_topology_t restrict topology)
int hwloc_topology_set_type_filter (hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e filter)
int hwloc_topology_get_type_filter (hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter)
int hwloc_topology_set_all_types_filter (hwloc_topology_t topology, enum hwloc_type_filter_e filter)
int hwloc_topology_set_cache_types_filter (hwloc_topology_t topology, enum hwloc_type_filter_e filter)
int hwloc_topology_set_icache_types_filter (hwloc_topology_t topology, enum hwloc_type_filter_e filter)
int hwloc_topology_set_io_types_filter (hwloc_topology_t topology, enum hwloc_type_filter_e filter)
void hwloc_topology_set_userdata (hwloc_topology_t topology, const void *userdata)
void * hwloc_topology_get_userdata (hwloc_topology_t topology)

Detailed Description

Several functions can optionally be called between hwloc_topology_init() and hwloc_topology_load() to configure how the detection should be performed, e.g. to ignore some objects types, define a synthetic topology, etc.

Enumeration Type Documentation

◆ hwloc_topology_flags_e

Flags to be set onto a topology context before load.

Flags should be given to hwloc_topology_set_flags(). They may also be returned by hwloc_topology_get_flags().


Detect the whole system, ignore reservations, include disallowed objects.

Gather all resources, even if some were disabled by the administrator. For instance, ignore Linux Cgroup/Cpusets and gather all processors and memory nodes.

When this flag is not set, PUs and NUMA nodes that are disallowed are not added to the topology. Parent objects (package, core, cache, etc.) are added only if some of their children are allowed. All existing PUs and NUMA nodes in the topology are allowed. hwloc_topology_get_allowed_cpuset() and hwloc_topology_get_allowed_nodeset() are equal to the root object cpuset and nodeset.

When this flag is set, the actual sets of allowed PUs and NUMA nodes are given by hwloc_topology_get_allowed_cpuset() and hwloc_topology_get_allowed_nodeset(). They may be smaller than the root object cpuset and nodeset.

If the current topology is exported to XML and reimported later, this flag should be set again in the reimported topology so that disallowed resources are reimported as well.


Assume that the selected backend provides the topology for the system on which we are running.

This forces hwloc_topology_is_thissystem() to return 1, i.e. makes hwloc assume that the selected backend provides the topology for the system on which we are running, even if it is not the OS-specific backend but the XML backend for instance. This means making the binding functions actually call the OS-specific system calls and really do binding, while the XML backend would otherwise provide empty hooks just returning success.

Setting the environment variable HWLOC_THISSYSTEM may also result in the same behavior.

This can be used for efficiency reasons to first detect the topology once, save it to an XML file, and quickly reload it later through the XML backend, but still having binding functions actually do bind.


Get the set of allowed resources from the local operating system even if the topology was loaded from XML or synthetic description.

If the topology was loaded from XML or from a synthetic string, restrict it by applying the current process restrictions such as Linux Cgroup/Cpuset.

This is useful when the topology is not loaded directly from the local machine (e.g. for performance reason) and it comes with all resources, while the running process is restricted to only parts of the machine.

This flag is ignored unless HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM is also set since the loaded topology must match the underlying machine where restrictions will be gathered from.

Setting the environment variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES would result in the same behavior.

◆ hwloc_type_filter_e

Type filtering flags.

By default, most objects are kept (HWLOC_TYPE_FILTER_KEEP_ALL). Instruction caches, I/O and Misc objects are ignored by default (HWLOC_TYPE_FILTER_KEEP_NONE). Die and Group levels are ignored unless they bring structure (HWLOC_TYPE_FILTER_KEEP_STRUCTURE).

Note that group objects are also ignored individually (without the entire level) when they do not bring structure.


Keep all objects of this type.

Cannot be set for HWLOC_OBJ_GROUP (groups are designed only to add more structure to the topology).


Ignore all objects of this type.

The bottom-level type HWLOC_OBJ_PU, the HWLOC_OBJ_NUMANODE type, and the top-level type HWLOC_OBJ_MACHINE may not be ignored.


Only ignore objects if their entire level does not bring any structure.

Keep the entire level of objects if at least one of these objects adds structure to the topology. An object brings structure when it has multiple children and it is not the only child of its parent.

If all objects in the level are the only child of their parent, and if none of them has multiple children, the entire level is removed.

Cannot be set for I/O and Misc objects since the topology structure does not matter there.


Only keep likely-important objects of the given type.

It is only useful for I/O object types. For HWLOC_OBJ_PCI_DEVICE and HWLOC_OBJ_OS_DEVICE, it means that only objects of major/common kinds are kept (storage, network, OpenFabrics, Intel MICs, CUDA, OpenCL, NVML, and displays). Also, only OS devices directly attached on PCI (e.g. no USB) are reported. For HWLOC_OBJ_BRIDGE, it means that bridges are kept only if they have children.

This flag equivalent to HWLOC_TYPE_FILTER_KEEP_ALL for Normal, Memory and Misc types since they are likely important.

Function Documentation

◆ hwloc_topology_get_flags()

unsigned long hwloc_topology_get_flags ( hwloc_topology_t  topology)

Get OR'ed flags of a topology.

Get the OR'ed set of hwloc_topology_flags_e of a topology.

the flags previously set with hwloc_topology_set_flags().

◆ hwloc_topology_get_support()

const struct hwloc_topology_support* hwloc_topology_get_support ( hwloc_topology_t restrict  topology)

Retrieve the topology support.

Each flag indicates whether a feature is supported. If set to 0, the feature is not supported. If set to 1, the feature is supported, but the corresponding call may still fail in some corner cases.

These features are also listed by hwloc-info --support

◆ hwloc_topology_get_type_filter()

int hwloc_topology_get_type_filter ( hwloc_topology_t  topology,
hwloc_obj_type_t  type,
enum hwloc_type_filter_e filter 

Get the current filtering for the given object type.

◆ hwloc_topology_get_userdata()

void* hwloc_topology_get_userdata ( hwloc_topology_t  topology)

Retrieve the topology-specific userdata pointer.

Retrieve the application-given private data pointer that was previously set with hwloc_topology_set_userdata().

◆ hwloc_topology_is_thissystem()

int hwloc_topology_is_thissystem ( hwloc_topology_t restrict  topology)

Does the topology context come from this system?

1 if this topology context was built using the system running this program.
0 instead (for instance if using another file-system root, a XML topology file, or a synthetic topology).

◆ hwloc_topology_set_all_types_filter()

int hwloc_topology_set_all_types_filter ( hwloc_topology_t  topology,
enum hwloc_type_filter_e  filter 

Set the filtering for all object types.

If some types do not support this filtering, they are silently ignored.

◆ hwloc_topology_set_cache_types_filter()

int hwloc_topology_set_cache_types_filter ( hwloc_topology_t  topology,
enum hwloc_type_filter_e  filter 

Set the filtering for all CPU cache object types.

Memory-side caches are not involved since they are not CPU caches.

◆ hwloc_topology_set_flags()

int hwloc_topology_set_flags ( hwloc_topology_t  topology,
unsigned long  flags 

Set OR'ed flags to non-yet-loaded topology.

Set a OR'ed set of hwloc_topology_flags_e onto a topology that was not yet loaded.

If this function is called multiple times, the last invokation will erase and replace the set of flags that was previously set.

The flags set in a topology may be retrieved with hwloc_topology_get_flags()

◆ hwloc_topology_set_icache_types_filter()

int hwloc_topology_set_icache_types_filter ( hwloc_topology_t  topology,
enum hwloc_type_filter_e  filter 

Set the filtering for all CPU instruction cache object types.

Memory-side caches are not involved since they are not CPU caches.

◆ hwloc_topology_set_io_types_filter()

int hwloc_topology_set_io_types_filter ( hwloc_topology_t  topology,
enum hwloc_type_filter_e  filter 

Set the filtering for all I/O object types.

◆ hwloc_topology_set_type_filter()

int hwloc_topology_set_type_filter ( hwloc_topology_t  topology,
hwloc_obj_type_t  type,
enum hwloc_type_filter_e  filter 

Set the filtering for the given object type.

◆ hwloc_topology_set_userdata()

void hwloc_topology_set_userdata ( hwloc_topology_t  topology,
const void *  userdata 

Set the topology-specific userdata pointer.

Each topology may store one application-given private data pointer. It is initialized to NULL. hwloc will never modify it.

Use it as you wish, after hwloc_topology_init() and until hwloc_topolog_destroy().

This pointer is not exported to XML.