Hardware Locality (hwloc)  3.0.0a1-git
hwloc.h
1 /*
2  * SPDX-License-Identifier: BSD-3-Clause
3  * Copyright © 2009 CNRS
4  * Copyright © 2009-2025 Inria. All rights reserved.
5  * Copyright © 2009-2012 Université Bordeaux
6  * Copyright © 2009-2020 Cisco Systems, Inc. All rights reserved.
7  * See COPYING in top-level directory.
8  */
9 
10 /*=====================================================================
11  * PLEASE GO READ THE DOCUMENTATION!
12  * ------------------------------------------------
13  * $tarball_directory/doc/doxygen-doc/
14  * or
15  * https://www.open-mpi.org/projects/hwloc/doc/
16  *=====================================================================
17  *
18  * FAIR WARNING: Do NOT expect to be able to figure out all the
19  * subtleties of hwloc by simply reading function prototypes and
20  * constant descrptions here in this file.
21  *
22  * Hwloc has wonderful documentation in both PDF and HTML formats for
23  * your reading pleasure. The formal documentation explains a LOT of
24  * hwloc-specific concepts, provides definitions, and discusses the
25  * "big picture" for many of the things that you'll find here in this
26  * header file.
27  *
28  * The PDF/HTML documentation was generated via Doxygen; much of what
29  * you'll see in there is also here in this file. BUT THERE IS A LOT
30  * THAT IS IN THE PDF/HTML THAT IS ***NOT*** IN hwloc.h!
31  *
32  * There are entire paragraph-length descriptions, discussions, and
33  * pretty pictures to explain subtle corner cases, provide concrete
34  * examples, etc.
35  *
36  * Please, go read the documentation. :-)
37  *
38  * Moreover there are several examples of hwloc use under doc/examples
39  * in the source tree.
40  *
41  *=====================================================================*/
42 
56 #ifndef HWLOC_H
57 #define HWLOC_H
58 
59 #include "hwloc/autogen/config.h"
60 
61 #include <sys/types.h>
62 #include <stdio.h>
63 #include <string.h>
64 #include <limits.h>
65 
66 /*
67  * Symbol transforms
68  */
69 #include "hwloc/rename.h"
70 
71 /*
72  * Bitmap definitions
73  */
74 
75 #include "hwloc/bitmap.h"
76 
77 
78 #ifdef __cplusplus
79 extern "C" {
80 #endif
81 
82 
118 #define HWLOC_API_VERSION 0x00030000
119 
126 HWLOC_DECLSPEC unsigned hwloc_get_api_version(void);
127 
129 #define HWLOC_COMPONENT_ABI 8
130 
168 
187 
202 typedef enum {
203 
205 #define HWLOC_OBJ_TYPE_MIN HWLOC_OBJ_MACHINE /* Sentinel value */
223  HWLOC_OBJ_DIE,
238  HWLOC_OBJ_PU,
360  HWLOC_OBJ_TYPE_MAX
362 
369 
375 
380  HWLOC_OBJ_OSDEV_STORAGE = (1ULL<<0),
386  HWLOC_OBJ_OSDEV_MEMORY = (1ULL<<1),
393  HWLOC_OBJ_OSDEV_GPU = (1ULL<<2),
400  HWLOC_OBJ_OSDEV_COPROC = (1ULL<<3),
406  HWLOC_OBJ_OSDEV_NETWORK = (1ULL<<4),
413  HWLOC_OBJ_OSDEV_OPENFABRICS = (1ULL<<5),
419  HWLOC_OBJ_OSDEV_DMA = (1ULL<<6)
423 };
424 
428 typedef unsigned long hwloc_obj_osdev_types_t;
429 
452 HWLOC_DECLSPEC int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2) __hwloc_attribute_const;
453 
455 #define HWLOC_TYPE_UNORDERED INT_MAX
456 
465 union hwloc_obj_attr_u;
466 
470 struct hwloc_info_s {
471  char *name;
472  char *value;
473 };
474 
483  struct hwloc_info_s *array;
484  unsigned count;
485  unsigned allocated;
486 };
487 
492 struct hwloc_obj {
493  /* physical information */
495  char *subtype;
497  unsigned os_index;
502 #define HWLOC_UNKNOWN_INDEX (unsigned)-1
503 
504  char *name;
509  hwloc_uint64_t total_memory;
514  /* global position */
515  int depth;
530  unsigned logical_index;
537  /* cousins are all objects of the same type (and depth) across the entire topology */
541  /* children of the same parent are siblings, even if they may have different type and depth */
542  struct hwloc_obj *parent;
543  unsigned sibling_rank;
548  unsigned arity;
552  struct hwloc_obj **children;
568  unsigned memory_arity;
586  unsigned io_arity;
598  unsigned misc_arity;
607  /* cpusets and nodesets */
674  struct hwloc_infos_s infos;
676  /* misc */
677  void *userdata;
682  hwloc_uint64_t gp_index;
687 };
691 typedef struct hwloc_obj * hwloc_obj_t;
692 
697  int cpukind;
701  } core;
702 
705  hwloc_uint64_t local_memory;
707 
710  hwloc_uint64_t size;
712  unsigned depth;
713  unsigned linesize;
716  int inclusive;
719  } cache;
722  unsigned depth;
724  unsigned kind;
725  unsigned subkind;
726  unsigned char dont_merge;
727  } group;
730  unsigned int domain;
731  unsigned char bus;
732  unsigned char dev;
733  unsigned char func;
734  unsigned char prog_if;
735  unsigned short class_id;
736  unsigned short vendor_id;
737  unsigned short device_id;
738  unsigned short subvendor_id;
739  unsigned short subdevice_id;
740  unsigned char revision;
741  float linkspeed;
750  union {
751  struct hwloc_pcidev_attr_s pci;
754  union {
755  struct {
756  unsigned int domain;
757  unsigned char secondary_bus;
758  unsigned char subordinate_bus;
759  } pci;
762  unsigned depth;
767  } osdev;
768 };
769 
778 struct hwloc_topology;
783 typedef struct hwloc_topology * hwloc_topology_t;
784 
791 HWLOC_DECLSPEC int hwloc_topology_init (hwloc_topology_t *topologyp);
792 
813 HWLOC_DECLSPEC int hwloc_topology_load(hwloc_topology_t topology);
814 
819 HWLOC_DECLSPEC void hwloc_topology_destroy (hwloc_topology_t topology);
820 
833 HWLOC_DECLSPEC int hwloc_topology_dup(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology);
834 
852 HWLOC_DECLSPEC int hwloc_topology_abi_check(hwloc_topology_t topology);
853 
865 HWLOC_DECLSPEC void hwloc_topology_check(hwloc_topology_t topology);
866 
889 HWLOC_DECLSPEC int hwloc_topology_get_depth(hwloc_topology_t __hwloc_restrict topology) __hwloc_attribute_pure;
890 
917 HWLOC_DECLSPEC int hwloc_get_type_depth (hwloc_topology_t topology, hwloc_obj_type_t type);
918 
928 };
929 
944  hwloc_obj_type_t type,
945  union hwloc_obj_attr_u *attrp, size_t attrsize);
946 
966 HWLOC_DECLSPEC int hwloc_get_memory_parents_depth (hwloc_topology_t topology);
967 
981 static __hwloc_inline int
982 hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
983 
997 static __hwloc_inline int
998 hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
999 
1008 HWLOC_DECLSPEC hwloc_obj_type_t hwloc_get_depth_type (hwloc_topology_t topology, int depth) __hwloc_attribute_pure;
1009 
1015 HWLOC_DECLSPEC unsigned hwloc_get_nbobjs_by_depth (hwloc_topology_t topology, int depth) __hwloc_attribute_pure;
1016 
1023 static __hwloc_inline int
1024 hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
1025 
1032 static __hwloc_inline hwloc_obj_t
1033 hwloc_get_root_obj (hwloc_topology_t topology) __hwloc_attribute_pure;
1034 
1040 HWLOC_DECLSPEC hwloc_obj_t hwloc_get_obj_by_depth (hwloc_topology_t topology, int depth, unsigned idx) __hwloc_attribute_pure;
1041 
1049 static __hwloc_inline hwloc_obj_t
1050 hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx) __hwloc_attribute_pure;
1051 
1058 static __hwloc_inline hwloc_obj_t
1060 
1069 static __hwloc_inline hwloc_obj_t
1071  hwloc_obj_t prev);
1072 
1091 HWLOC_DECLSPEC const char * hwloc_obj_type_string (hwloc_obj_type_t type) __hwloc_attribute_const;
1092 
1115 HWLOC_DECLSPEC int hwloc_obj_type_snprintf(char * __hwloc_restrict string, size_t size,
1116  hwloc_obj_t obj,
1117  unsigned long flags, hwloc_topology_t topology);
1118 
1140 HWLOC_DECLSPEC int hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_t size,
1141  hwloc_obj_t obj, const char * __hwloc_restrict separator,
1142  unsigned long flags, hwloc_topology_t topology);
1143 
1150 
1157 
1163 
1168 
1174 
1181 };
1182 
1206 HWLOC_DECLSPEC int hwloc_type_sscanf(const char *string,
1207  hwloc_obj_type_t *typep,
1208  union hwloc_obj_attr_u *attrp, size_t attrsize);
1209 
1223 static __hwloc_inline const char *
1224 hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name) __hwloc_attribute_pure;
1225 
1235 static __hwloc_inline const char *
1236 hwloc_get_info_by_name(struct hwloc_infos_s *infos, const char *name) __hwloc_attribute_pure;
1237 
1259 HWLOC_DECLSPEC int hwloc_modify_infos(struct hwloc_infos_s *infos,
1260  unsigned long operation,
1261  const char *name, const char *value);
1262 
1270 
1278 
1288 
1296 };
1297 
1317 static __hwloc_inline int
1318 hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value);
1319 
1328 HWLOC_DECLSPEC struct hwloc_infos_s * hwloc_topology_get_infos(hwloc_topology_t topology);
1329 
1344 HWLOC_DECLSPEC int hwloc_obj_set_subtype(hwloc_topology_t topology, hwloc_obj_t obj, const char *subtype);
1345 
1417 typedef enum {
1421 
1425 
1450 
1466  HWLOC_CPUBIND_NOMEMBIND = (1<<3)
1468 
1475 HWLOC_DECLSPEC int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags);
1476 
1485 HWLOC_DECLSPEC int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
1486 
1500 HWLOC_DECLSPEC int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags);
1501 
1519 HWLOC_DECLSPEC int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
1520 
1521 #ifdef hwloc_thread_t
1531 HWLOC_DECLSPEC int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags);
1532 #endif
1533 
1534 #ifdef hwloc_thread_t
1548 HWLOC_DECLSPEC int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags);
1549 #endif
1550 
1570 HWLOC_DECLSPEC int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
1571 
1594 HWLOC_DECLSPEC int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
1595 
1675 typedef enum {
1684 
1695 
1705 
1714 
1724 
1731 
1738  HWLOC_MEMBIND_MIXED = -1
1740 
1754 typedef enum {
1760 
1765 
1773 
1779 
1792 
1802  HWLOC_MEMBIND_BYNODESET = (1<<5)
1804 
1821 HWLOC_DECLSPEC int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags);
1822 
1872 HWLOC_DECLSPEC int hwloc_get_membind(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags);
1873 
1887 HWLOC_DECLSPEC int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags);
1888 
1933 HWLOC_DECLSPEC int hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags);
1934 
1945 HWLOC_DECLSPEC int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags);
1946 
1978 HWLOC_DECLSPEC int hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, hwloc_membind_policy_t * policy, int flags);
1979 
2002 HWLOC_DECLSPEC int hwloc_get_area_memlocation(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, int flags);
2003 
2013 HWLOC_DECLSPEC void *hwloc_alloc(hwloc_topology_t topology, size_t len);
2014 
2030 HWLOC_DECLSPEC void *hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
2031 
2046 static __hwloc_inline void *
2047 hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
2048 
2054 HWLOC_DECLSPEC int hwloc_free(hwloc_topology_t topology, void *addr, size_t len);
2055 
2101 HWLOC_DECLSPEC int hwloc_topology_set_pid(hwloc_topology_t __hwloc_restrict topology, hwloc_pid_t pid);
2102 
2134 HWLOC_DECLSPEC int hwloc_topology_set_synthetic(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict description);
2135 
2167 HWLOC_DECLSPEC int hwloc_topology_set_xml(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict xmlpath);
2168 
2201 HWLOC_DECLSPEC int hwloc_topology_set_xmlbuffer(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict buffer, int size);
2202 
2210 };
2211 
2229 HWLOC_DECLSPEC int hwloc_topology_set_components(hwloc_topology_t __hwloc_restrict topology, unsigned long flags, const char * __hwloc_restrict name);
2230 
2272 
2292 
2313 
2337 
2362 
2384 
2399 
2406 
2413 
2419 };
2420 
2435 HWLOC_DECLSPEC int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags);
2436 
2448 HWLOC_DECLSPEC unsigned long hwloc_topology_get_flags (hwloc_topology_t topology);
2449 
2459 HWLOC_DECLSPEC int hwloc_topology_is_thissystem(hwloc_topology_t __hwloc_restrict topology) __hwloc_attribute_pure;
2460 
2464  unsigned char pu;
2466  unsigned char numa;
2468  unsigned char numa_memory;
2470  unsigned char disallowed_pu;
2472  unsigned char disallowed_numa;
2474  unsigned char cpukind_efficiency;
2475 };
2476 
2484  unsigned char set_thisproc_cpubind;
2486  unsigned char get_thisproc_cpubind;
2488  unsigned char set_proc_cpubind;
2490  unsigned char get_proc_cpubind;
2492  unsigned char set_thisthread_cpubind;
2494  unsigned char get_thisthread_cpubind;
2496  unsigned char set_thread_cpubind;
2498  unsigned char get_thread_cpubind;
2505 };
2506 
2514  unsigned char set_thisproc_membind;
2516  unsigned char get_thisproc_membind;
2518  unsigned char set_proc_membind;
2520  unsigned char get_proc_membind;
2522  unsigned char set_thisthread_membind;
2524  unsigned char get_thisthread_membind;
2525 
2527  unsigned char alloc_membind;
2529  unsigned char set_area_membind;
2531  unsigned char get_area_membind;
2533  unsigned char get_area_memlocation;
2534 
2536  unsigned char firsttouch_membind;
2538  unsigned char bind_membind;
2540  unsigned char interleave_membind;
2544  unsigned char nexttouch_membind;
2546  unsigned char migrate_membind;
2547 };
2548 
2553  unsigned char imported_support;
2554 };
2555 
2567 };
2568 
2598 HWLOC_DECLSPEC const struct hwloc_topology_support *hwloc_topology_get_support(hwloc_topology_t __hwloc_restrict topology);
2599 
2616 
2624 
2640 
2655 };
2656 
2662 
2668 
2676 
2684 
2692 
2698 
2709 HWLOC_DECLSPEC void hwloc_topology_set_userdata(hwloc_topology_t topology, const void *userdata);
2710 
2719 HWLOC_DECLSPEC void * hwloc_topology_get_userdata(hwloc_topology_t topology);
2720 
2737 
2743 
2750 
2756 
2761  HWLOC_RESTRICT_FLAG_ADAPT_IO = (1UL<<2)
2762 };
2763 
2799 HWLOC_DECLSPEC int hwloc_topology_restrict(hwloc_topology_t __hwloc_restrict topology, hwloc_const_bitmap_t set, unsigned long flags);
2800 
2808 
2817 
2820  HWLOC_ALLOW_FLAG_CUSTOM = (1UL<<2)
2821 };
2822 
2844 HWLOC_DECLSPEC int hwloc_topology_allow(hwloc_topology_t __hwloc_restrict topology, hwloc_const_cpuset_t cpuset, hwloc_const_nodeset_t nodeset, unsigned long flags);
2845 
2870 HWLOC_DECLSPEC hwloc_obj_t hwloc_topology_insert_misc_object(hwloc_topology_t topology, hwloc_obj_t parent, const char *name);
2871 
2890 
2903 
2981 
2995 
3013 HWLOC_DECLSPEC int hwloc_topology_refresh(hwloc_topology_t topology);
3014 
3019 #ifdef __cplusplus
3020 } /* extern "C" */
3021 #endif
3022 
3023 
3024 /* high-level helpers */
3025 #include "hwloc/helper.h"
3026 
3027 /* inline code of some functions above */
3028 #include "hwloc/inlines.h"
3029 
3030 /* memory attributes */
3031 #include "hwloc/memattrs.h"
3032 
3033 /* kinds of CPU cores */
3034 #include "hwloc/cpukinds.h"
3035 
3036 /* exporting to XML or synthetic */
3037 #include "hwloc/export.h"
3038 
3039 /* distances */
3040 #include "hwloc/distances.h"
3041 
3042 /* topology diffs */
3043 #include "hwloc/diff.h"
3044 
3045 /* deprecated headers */
3046 #include "hwloc/deprecated.h"
3047 
3048 #endif /* HWLOC_H */
unsigned hwloc_get_api_version(void)
Indicate at runtime which hwloc API version was used at build time.
struct hwloc_bitmap_s * hwloc_bitmap_t
Set of bits represented as an opaque pointer to an internal bitmap.
Definition: bitmap.h:70
const struct hwloc_bitmap_s * hwloc_const_bitmap_t
a non-modifiable hwloc_bitmap_t
Definition: bitmap.h:72
unsigned long hwloc_topology_get_flags(hwloc_topology_t topology)
Get OR'ed flags of a topology.
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.
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.
void hwloc_topology_set_userdata(hwloc_topology_t topology, const void *userdata)
Set the topology-specific userdata pointer.
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.
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.
int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)
Does the topology context come from this system?
void * hwloc_topology_get_userdata(hwloc_topology_t topology)
Retrieve the topology-specific userdata pointer.
hwloc_type_filter_e
Type filtering flags.
Definition: hwloc.h:2609
int hwloc_topology_set_all_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)
Set the filtering for all object types.
int hwloc_topology_set_flags(hwloc_topology_t topology, unsigned long flags)
Set OR'ed flags to non-yet-loaded topology.
const struct hwloc_topology_support * hwloc_topology_get_support(hwloc_topology_t restrict topology)
Retrieve the topology support.
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_flags_e
Flags to be set onto a topology context before load.
Definition: hwloc.h:2249
@ HWLOC_TYPE_FILTER_KEEP_NONE
Ignore all objects of this type.
Definition: hwloc.h:2623
@ HWLOC_TYPE_FILTER_KEEP_IMPORTANT
Only keep likely-important objects of the given type.
Definition: hwloc.h:2654
@ HWLOC_TYPE_FILTER_KEEP_STRUCTURE
Only ignore objects if their entire level does not bring any structure.
Definition: hwloc.h:2639
@ HWLOC_TYPE_FILTER_KEEP_ALL
Keep all objects of this type.
Definition: hwloc.h:2615
@ HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED
Detect the whole system, ignore reservations, include disallowed objects.
Definition: hwloc.h:2271
@ HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES
Get the set of allowed resources from the local operating system even if the topology was loaded from...
Definition: hwloc.h:2312
@ HWLOC_TOPOLOGY_FLAG_NO_CPUKINDS
Ignore CPU Kinds.
Definition: hwloc.h:2418
@ HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING
Do not consider resources outside of the process memory binding.
Definition: hwloc.h:2383
@ HWLOC_TOPOLOGY_FLAG_NO_DISTANCES
Ignore distances.
Definition: hwloc.h:2405
@ HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM
Assume that the selected backend provides the topology for the system on which we are running.
Definition: hwloc.h:2291
@ HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING
Do not consider resources outside of the process CPU binding.
Definition: hwloc.h:2361
@ HWLOC_TOPOLOGY_FLAG_NO_MEMATTRS
Ignore memory attributes and tiers.
Definition: hwloc.h:2412
@ HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT
Import support from the imported topology.
Definition: hwloc.h:2336
@ HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING
Do not ever modify the process or thread binding during discovery.
Definition: hwloc.h:2398
hwloc_cpubind_flags_t
Process/Thread binding flags.
Definition: hwloc.h:1417
int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags)
Bind a process pid on CPUs given in physical bitmap set.
int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)
Bind current process or thread on CPUs given in physical bitmap set.
int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)
Get the last physical CPU where a process ran.
int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)
Get the current physical binding of process pid.
int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)
Get current process or thread binding.
int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags)
Bind a thread thread on CPUs given in physical bitmap set.
int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags)
Get the current physical binding of thread tid.
int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)
Get the last physical CPU where the current process or thread ran.
@ HWLOC_CPUBIND_PROCESS
Bind all threads of the current (possibly) multithreaded process.
Definition: hwloc.h:1420
@ HWLOC_CPUBIND_NOMEMBIND
Avoid any effect on memory binding.
Definition: hwloc.h:1466
@ HWLOC_CPUBIND_STRICT
Request for strict binding from the OS.
Definition: hwloc.h:1449
@ HWLOC_CPUBIND_THREAD
Bind current thread of current process.
Definition: hwloc.h:1424
int hwloc_topology_init(hwloc_topology_t *topologyp)
Allocate a topology context.
int hwloc_topology_abi_check(hwloc_topology_t topology)
Verify that the topology is compatible with the current hwloc library.
int hwloc_topology_dup(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology)
Duplicate a topology.
struct hwloc_topology * hwloc_topology_t
Topology context.
Definition: hwloc.h:783
void hwloc_topology_destroy(hwloc_topology_t topology)
Terminate and free a topology context.
int hwloc_topology_load(hwloc_topology_t topology)
Build the actual topology.
void hwloc_topology_check(hwloc_topology_t topology)
Run internal checks on a topology structure.
const char * hwloc_get_info_by_name(struct hwloc_infos_s *infos, const char *name)
Search the given name in the array of infos and return the corresponding value.
const char * hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)
Search the given name in the object array of infos and return the corresponding value.
int hwloc_obj_set_subtype(hwloc_topology_t topology, hwloc_obj_t obj, const char *subtype)
Set (or replace) the subtype of an object.
hwloc_modify_infos_op_e
Operations given to hwloc_modify_infos().
Definition: hwloc.h:1264
struct hwloc_infos_s * hwloc_topology_get_infos(hwloc_topology_t topology)
Get the structure of info attributes attached to the topology.
int hwloc_modify_infos(struct hwloc_infos_s *infos, unsigned long operation, const char *name, const char *value)
Modify an array of info attributes.
int hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value)
Add the given name and value pair to the given object info attributes.
@ HWLOC_MODIFY_INFOS_OP_REMOVE
Remove existing info attributes that matches the given name and/or value if not NULL.
Definition: hwloc.h:1295
@ HWLOC_MODIFY_INFOS_OP_ADD_UNIQUE
Add a new info attribute with the given name and value only if that pair doesn't exist yet.
Definition: hwloc.h:1277
@ HWLOC_MODIFY_INFOS_OP_ADD
Add a new info attribute with the given name and value.
Definition: hwloc.h:1269
@ HWLOC_MODIFY_INFOS_OP_REPLACE
Replace existing info attributes with the given name, with a single attribute with the given name and...
Definition: hwloc.h:1287
int hwloc_get_type_or_above_depth(hwloc_topology_t topology, hwloc_obj_type_t type)
Returns the depth of objects of type type or above.
hwloc_obj_t hwloc_get_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)
Returns the topology object at logical index idx with type type.
unsigned hwloc_get_nbobjs_by_depth(hwloc_topology_t topology, int depth)
Returns the width of level at depth depth.
hwloc_obj_t hwloc_get_obj_by_depth(hwloc_topology_t topology, int depth, unsigned idx)
Returns the topology object at logical index idx from depth depth.
hwloc_obj_type_t hwloc_get_depth_type(hwloc_topology_t topology, int depth)
Returns the type of objects at depth depth.
int hwloc_get_nbobjs_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)
Returns the width of level type type.
hwloc_obj_t hwloc_get_next_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t prev)
Returns the next object at depth depth.
hwloc_obj_t hwloc_get_next_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t prev)
Returns the next object of type type.
int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)
Returns the depth of objects of type type.
int hwloc_get_type_depth_with_attr(hwloc_topology_t topology, hwloc_obj_type_t type, union hwloc_obj_attr_u *attrp, size_t attrsize)
Returns the depth of objects of type and attributes attrp.
int hwloc_get_type_or_below_depth(hwloc_topology_t topology, hwloc_obj_type_t type)
Returns the depth of objects of type type or below.
int hwloc_topology_get_depth(hwloc_topology_t restrict topology)
Get the depth of the hierarchical tree of objects.
hwloc_obj_t hwloc_get_root_obj(hwloc_topology_t topology)
Returns the top-object of the topology-tree.
int hwloc_get_memory_parents_depth(hwloc_topology_t topology)
Return the depth of parents where memory objects are attached.
hwloc_get_type_depth_e
Definition: hwloc.h:919
@ HWLOC_TYPE_DEPTH_UNKNOWN
No object of given type exists in the topology.
Definition: hwloc.h:920
@ HWLOC_TYPE_DEPTH_NUMANODE
Virtual depth for NUMA nodes.
Definition: hwloc.h:922
@ HWLOC_TYPE_DEPTH_MEMCACHE
Virtual depth for MemCache object.
Definition: hwloc.h:927
@ HWLOC_TYPE_DEPTH_MISC
Virtual depth for Misc object.
Definition: hwloc.h:926
@ HWLOC_TYPE_DEPTH_PCI_DEVICE
Virtual depth for PCI device object level.
Definition: hwloc.h:924
@ HWLOC_TYPE_DEPTH_MULTIPLE
Objects of given type exist at different depth in the topology (only for Groups).
Definition: hwloc.h:921
@ HWLOC_TYPE_DEPTH_BRIDGE
Virtual depth for bridge object level.
Definition: hwloc.h:923
@ HWLOC_TYPE_DEPTH_OS_DEVICE
Virtual depth for software device object level.
Definition: hwloc.h:925
int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)
Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) spe...
void * hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)
Allocate some memory on NUMA memory nodes specified by set.
void * hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)
Allocate some memory on NUMA memory nodes specified by set.
int hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)
Query the default memory binding policy and physical locality of the specified process.
int hwloc_free(hwloc_topology_t topology, void *addr, size_t len)
Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().
int hwloc_get_area_memlocation(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, int flags)
Get the NUMA nodes where memory identified by (addr, len ) is physically allocated.
void * hwloc_alloc(hwloc_topology_t topology, size_t len)
Allocate some memory.
int hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)
Query the CPUs near the physical NUMA node(s) and binding policy of the memory identified by (addr,...
hwloc_membind_flags_t
Memory binding flags.
Definition: hwloc.h:1754
int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)
Set the default memory binding policy of the specified process to prefer the NUMA node(s) specified b...
hwloc_membind_policy_t
Memory binding policy.
Definition: hwloc.h:1675
int hwloc_get_membind(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)
Query the default memory binding policy and physical locality of the current process or thread.
int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)
Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by set.
@ HWLOC_MEMBIND_STRICT
Definition: hwloc.h:1772
@ HWLOC_MEMBIND_PROCESS
Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...
Definition: hwloc.h:1759
@ HWLOC_MEMBIND_THREAD
Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...
Definition: hwloc.h:1764
@ HWLOC_MEMBIND_BYNODESET
Consider the bitmap argument as a nodeset.
Definition: hwloc.h:1802
@ HWLOC_MEMBIND_MIGRATE
Migrate existing allocated memory. If the memory cannot be migrated and the HWLOC_MEMBIND_STRICT flag...
Definition: hwloc.h:1778
@ HWLOC_MEMBIND_NOCPUBIND
Avoid any effect on CPU binding.
Definition: hwloc.h:1791
@ HWLOC_MEMBIND_DEFAULT
Reset the memory allocation policy to the system default. Depending on the operating system,...
Definition: hwloc.h:1683
@ HWLOC_MEMBIND_MIXED
Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...
Definition: hwloc.h:1738
@ HWLOC_MEMBIND_FIRSTTOUCH
Allocate each memory page individually on the local NUMA node of the thread that touches it.
Definition: hwloc.h:1694
@ HWLOC_MEMBIND_WEIGHTED_INTERLEAVE
Allocate memory on the given nodes in an interleaved / weighted manner. The precise layout of the mem...
Definition: hwloc.h:1723
@ HWLOC_MEMBIND_BIND
Allocate memory on the specified nodes.
Definition: hwloc.h:1704
@ HWLOC_MEMBIND_INTERLEAVE
Allocate memory on the given nodes in an interleaved / round-robin manner. The precise layout of the ...
Definition: hwloc.h:1713
@ HWLOC_MEMBIND_NEXTTOUCH
For each page bound with this policy, by next time it is touched (and next time only),...
Definition: hwloc.h:1730
hwloc_const_bitmap_t hwloc_const_cpuset_t
A non-modifiable hwloc_cpuset_t.
Definition: hwloc.h:167
hwloc_const_bitmap_t hwloc_const_nodeset_t
A non-modifiable hwloc_nodeset_t.
Definition: hwloc.h:186
hwloc_bitmap_t hwloc_nodeset_t
A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.
Definition: hwloc.h:183
hwloc_bitmap_t hwloc_cpuset_t
A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.
Definition: hwloc.h:165
hwloc_obj_snprintf_flag_e
Flags to be given to hwloc_obj_type_snprintf() and hwloc_obj_attr_snprintf().
Definition: hwloc.h:1145
int hwloc_obj_type_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, unsigned long flags, hwloc_topology_t topology)
Stringify the type of a given topology object into a human-readable form.
int hwloc_type_sscanf(const char *string, hwloc_obj_type_t *typep, union hwloc_obj_attr_u *attrp, size_t attrsize)
Return an object type and attributes from a type string.
const char * hwloc_obj_type_string(hwloc_obj_type_t type)
Return a constant stringified object type.
int hwloc_obj_attr_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, const char *restrict separator, unsigned long flags, hwloc_topology_t topology)
Stringify the attributes of a given topology object into a human-readable form.
@ HWLOC_OBJ_SNPRINTF_FLAG_SHORT_NAMES
Reduce the name even if it may become ambiguous, for instance by removing the OS device prefix and sh...
Definition: hwloc.h:1156
@ HWLOC_OBJ_SNPRINTF_FLAG_MORE_ATTRS
Display additional attributes such as cache associativity, PCI link speed, and total memory.
Definition: hwloc.h:1162
@ HWLOC_OBJ_SNPRINTF_FLAG_LONG_NAMES
Use long type names such as L2Cache instead of L2.
Definition: hwloc.h:1149
@ HWLOC_OBJ_SNPRINTF_FLAG_NO_UNITS
Display memory sizes in bytes without units.
Definition: hwloc.h:1167
@ HWLOC_OBJ_SNPRINTF_FLAG_OLD_VERBOSE
Backward compatibility with hwloc 2.x verbose mode, shows additional attributes, and memory sizes wit...
Definition: hwloc.h:1180
@ HWLOC_OBJ_SNPRINTF_FLAG_UNITS_1000
Display memory sizes in KB, MB, GB, etc i.e. divide by 1000 instead of 1024 for KiB,...
Definition: hwloc.h:1173
unsigned long hwloc_obj_osdev_types_t
Type(s) of a OS device. OR'ed set of hwloc_obj_osdev_type_e.
Definition: hwloc.h:428
int hwloc_compare_types(hwloc_obj_type_t type1, hwloc_obj_type_t type2)
Compare the depth of two object types.
hwloc_obj_bridge_type_e
Type of one side (upstream or downstream) of an I/O bridge.
Definition: hwloc.h:371
enum hwloc_obj_cache_type_e hwloc_obj_cache_type_t
Cache type.
hwloc_obj_osdev_type_e
Single type of a OS device. Multiple of these may be combined for a single device.
Definition: hwloc.h:379
hwloc_obj_cache_type_e
Cache type.
Definition: hwloc.h:364
enum hwloc_obj_bridge_type_e hwloc_obj_bridge_type_t
Type of one side (upstream or downstream) of an I/O bridge.
hwloc_obj_type_t
Type of topology object.
Definition: hwloc.h:202
@ HWLOC_OBJ_BRIDGE_HOST
Host-side of a bridge, only possible upstream.
Definition: hwloc.h:372
@ HWLOC_OBJ_BRIDGE_PCI
PCI-side of a bridge.
Definition: hwloc.h:373
@ HWLOC_OBJ_OSDEV_MEMORY
Operating system memory device. For instance "dax2.0" on Linux, either for normal DRAM when not expos...
Definition: hwloc.h:386
@ HWLOC_OBJ_OSDEV_STORAGE
Operating system storage device (e.g. block). For instance "sda" or "pmem0" on Linux,...
Definition: hwloc.h:380
@ HWLOC_OBJ_OSDEV_COPROC
Operating system co-processor device. For instance "opencl0d0" for a OpenCL device,...
Definition: hwloc.h:400
@ HWLOC_OBJ_OSDEV_OPENFABRICS
Operating system OpenFabrics device. For instance the "mlx4_0" InfiniBand HCA, or "hfi1_0" Omni-Path ...
Definition: hwloc.h:413
@ HWLOC_OBJ_OSDEV_DMA
Operating system dma engine device. For instance the "dma0chan0" DMA channel on Linux.
Definition: hwloc.h:419
@ HWLOC_OBJ_OSDEV_GPU
Operating system GPU device. For instance ":0.0" for a GL display, "card0" for a Linux DRM device,...
Definition: hwloc.h:393
@ HWLOC_OBJ_OSDEV_NETWORK
Operating system network device. For instance the "eth0" interface, "bxi0" Atos/Bull BXI HCA,...
Definition: hwloc.h:406
@ HWLOC_OBJ_CACHE_UNIFIED
Unified cache.
Definition: hwloc.h:365
@ HWLOC_OBJ_CACHE_INSTRUCTION
Instruction cache (filtered out by default).
Definition: hwloc.h:367
@ HWLOC_OBJ_CACHE_DATA
Data cache.
Definition: hwloc.h:366
@ HWLOC_OBJ_MEMCACHE
Memory-side cache (filtered out by default). A cache in front of a specific NUMA node.
Definition: hwloc.h:299
@ HWLOC_OBJ_L2ICACHE
Level 2 instruction Cache (filtered out by default).
Definition: hwloc.h:257
@ HWLOC_OBJ_L2CACHE
Level 2 Data (or Unified) Cache.
Definition: hwloc.h:251
@ HWLOC_OBJ_MISC
Miscellaneous objects (filtered out by default). Objects without particular meaning,...
Definition: hwloc.h:345
@ HWLOC_OBJ_L3CACHE
Level 3 Data (or Unified) Cache.
Definition: hwloc.h:252
@ HWLOC_OBJ_MACHINE
Machine. A set of processors and memory with cache coherency.
Definition: hwloc.h:208
@ HWLOC_OBJ_OS_DEVICE
Operating system device (filtered out by default).
Definition: hwloc.h:334
@ HWLOC_OBJ_GROUP
Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...
Definition: hwloc.h:260
@ HWLOC_OBJ_L4CACHE
Level 4 Data (or Unified) Cache.
Definition: hwloc.h:253
@ HWLOC_OBJ_L1CACHE
Level 1 Data (or Unified) Cache.
Definition: hwloc.h:250
@ HWLOC_OBJ_PCI_DEVICE
PCI device (filtered out by default).
Definition: hwloc.h:324
@ HWLOC_OBJ_L5CACHE
Level 5 Data (or Unified) Cache.
Definition: hwloc.h:254
@ HWLOC_OBJ_BRIDGE
Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...
Definition: hwloc.h:312
@ HWLOC_OBJ_NUMANODE
NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...
Definition: hwloc.h:273
@ HWLOC_OBJ_PACKAGE
Physical package. The physical package that usually gets inserted into a socket on the motherboard....
Definition: hwloc.h:217
@ HWLOC_OBJ_PU
Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...
Definition: hwloc.h:238
@ HWLOC_OBJ_L3ICACHE
Level 3 instruction Cache (filtered out by default).
Definition: hwloc.h:258
@ HWLOC_OBJ_CORE
Core. A computation unit (may be shared by several PUs, aka logical processors).
Definition: hwloc.h:234
@ HWLOC_OBJ_DIE
Die within a physical package. A subpart of the physical package, that contains multiple cores.
Definition: hwloc.h:223
@ HWLOC_OBJ_L1ICACHE
Level 1 instruction Cache (filtered out by default).
Definition: hwloc.h:256
struct hwloc_obj * hwloc_obj_t
Convenience typedef; a pointer to a struct hwloc_obj.
Definition: hwloc.h:691
int hwloc_topology_set_xmlbuffer(hwloc_topology_t restrict topology, const char *restrict buffer, int size)
Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...
int hwloc_topology_set_pid(hwloc_topology_t restrict topology, hwloc_pid_t pid)
Change which process the topology is viewed from.
int hwloc_topology_set_synthetic(hwloc_topology_t restrict topology, const char *restrict description)
Enable synthetic topology.
int hwloc_topology_set_xml(hwloc_topology_t restrict topology, const char *restrict xmlpath)
Enable XML-file based topology.
hwloc_topology_components_flag_e
Flags to be passed to hwloc_topology_set_components()
Definition: hwloc.h:2205
int hwloc_topology_set_components(hwloc_topology_t restrict topology, unsigned long flags, const char *restrict name)
Prevent a discovery component from being used for a topology.
@ HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST
Blacklist the target component from being used.
Definition: hwloc.h:2209
hwloc_obj_t hwloc_topology_insert_group_object(hwloc_topology_t topology, hwloc_obj_t group)
Add more structure to the topology by adding an intermediate Group.
hwloc_allow_flags_e
Flags to be given to hwloc_topology_allow().
Definition: hwloc.h:2802
hwloc_obj_t hwloc_topology_alloc_group_object(hwloc_topology_t topology)
Allocate a Group object to insert later with hwloc_topology_insert_group_object().
int hwloc_topology_refresh(hwloc_topology_t topology)
Refresh internal structures after topology modification.
int hwloc_topology_restrict(hwloc_topology_t restrict topology, hwloc_const_bitmap_t set, unsigned long flags)
Restrict the topology to the given CPU set or nodeset.
hwloc_restrict_flags_e
Flags to be given to hwloc_topology_restrict().
Definition: hwloc.h:2730
int hwloc_topology_free_group_object(hwloc_topology_t topology, hwloc_obj_t group)
Free a group object allocated with hwloc_topology_alloc_group_object().
int hwloc_obj_add_other_obj_sets(hwloc_obj_t dst, hwloc_obj_t src)
Setup object cpusets/nodesets by OR'ing another object's sets.
hwloc_obj_t hwloc_topology_insert_misc_object(hwloc_topology_t topology, hwloc_obj_t parent, const char *name)
Add a MISC object as a leaf of the topology.
int hwloc_topology_allow(hwloc_topology_t restrict topology, hwloc_const_cpuset_t cpuset, hwloc_const_nodeset_t nodeset, unsigned long flags)
Change the sets of allowed PUs and NUMA nodes in the topology.
@ HWLOC_ALLOW_FLAG_CUSTOM
Allow a custom set of objects, given to hwloc_topology_allow() as cpuset and/or nodeset parameters.
Definition: hwloc.h:2820
@ HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS
Only allow objects that are available to the current process.
Definition: hwloc.h:2816
@ HWLOC_ALLOW_FLAG_ALL
Mark all objects as allowed in the topology.
Definition: hwloc.h:2807
@ HWLOC_RESTRICT_FLAG_ADAPT_MISC
Move Misc objects to ancestors if their parents are removed during restriction. If this flag is not s...
Definition: hwloc.h:2755
@ HWLOC_RESTRICT_FLAG_REMOVE_CPULESS
Remove all objects that became CPU-less. By default, only objects that contain no PU and no memory ar...
Definition: hwloc.h:2736
@ HWLOC_RESTRICT_FLAG_ADAPT_IO
Move I/O objects to ancestors if their parents are removed during restriction. If this flag is not se...
Definition: hwloc.h:2761
@ HWLOC_RESTRICT_FLAG_BYNODESET
Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...
Definition: hwloc.h:2742
@ HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS
Remove all objects that became Memory-less. By default, only objects that contain no PU and no memory...
Definition: hwloc.h:2749
Info attribute (name and value strings)
Definition: hwloc.h:470
char * name
Info name.
Definition: hwloc.h:471
char * value
Info value.
Definition: hwloc.h:472
Array of string info attributes (pairs of name and value).
Definition: hwloc.h:482
struct hwloc_info_s * array
Array of string pairs.
Definition: hwloc.h:483
unsigned count
Number of elements in the array.
Definition: hwloc.h:484
Bridge specific Object Attributes.
Definition: hwloc.h:749
hwloc_obj_bridge_type_t upstream_type
Upstream Bridge type.
Definition: hwloc.h:753
unsigned depth
Definition: hwloc.h:762
unsigned int domain
Domain number the downstream PCI buses.
Definition: hwloc.h:756
union hwloc_obj_attr_u::hwloc_bridge_attr_s::@1 downstream
struct hwloc_pcidev_attr_s pci
PCI attribute of the upstream part as a PCI device.
Definition: hwloc.h:751
union hwloc_obj_attr_u::hwloc_bridge_attr_s::@0 upstream
hwloc_obj_bridge_type_t downstream_type
Downstream Bridge type.
Definition: hwloc.h:761
unsigned char secondary_bus
First PCI bus number below the bridge.
Definition: hwloc.h:757
unsigned char subordinate_bus
Highest PCI bus number below the bridge.
Definition: hwloc.h:758
Cache-specific Object Attributes.
Definition: hwloc.h:709
unsigned depth
Depth of cache (e.g., L1, L2, ...etc.)
Definition: hwloc.h:712
unsigned linesize
Cache-line size in bytes. 0 if unknown.
Definition: hwloc.h:713
hwloc_uint64_t size
Size of cache in bytes.
Definition: hwloc.h:710
int associativity
Ways of associativity, -1 if fully associative, 0 if unknown.
Definition: hwloc.h:714
hwloc_obj_cache_type_t type
Cache type.
Definition: hwloc.h:711
int inclusive
1 if inclusive, 0 if unknown. Other values may be used for exclusive caches in the future....
Definition: hwloc.h:716
Core-specific Object Attributes.
Definition: hwloc.h:696
int cpukind
The index of the CPU kind of this core. 0 if all cores are identical. -1 if a core ever exposes diffe...
Definition: hwloc.h:697
Group-specific Object Attributes.
Definition: hwloc.h:721
unsigned kind
Internally-used kind of group.
Definition: hwloc.h:724
unsigned subkind
Internally-used subkind to distinguish different levels of groups with same kind.
Definition: hwloc.h:725
unsigned depth
Depth of group object. It may change if intermediate Group objects are added.
Definition: hwloc.h:722
unsigned char dont_merge
Flag preventing groups from being automatically merged with identical parent or children.
Definition: hwloc.h:726
NUMA node-specific Object Attributes.
Definition: hwloc.h:704
hwloc_uint64_t local_memory
Local memory (in bytes)
Definition: hwloc.h:705
OS Device specific Object Attributes.
Definition: hwloc.h:765
hwloc_obj_osdev_types_t types
OR'ed set of at least one hwloc_obj_osdev_type_e.
Definition: hwloc.h:766
PCI Device specific Object Attributes.
Definition: hwloc.h:729
unsigned char revision
Revision number.
Definition: hwloc.h:740
unsigned short device_id
Device ID (yyyy in [xxxx:yyyy]).
Definition: hwloc.h:737
unsigned char dev
Device number (zz in the PCI BDF notation xxxx:yy:zz.t).
Definition: hwloc.h:732
unsigned short subvendor_id
Sub-Vendor ID.
Definition: hwloc.h:738
float linkspeed
Link speed in GB/s. This datarate is the currently configured speed of the entire PCI link (sum of th...
Definition: hwloc.h:741
unsigned char func
Function number (t in the PCI BDF notation xxxx:yy:zz.t).
Definition: hwloc.h:733
unsigned short vendor_id
Vendor ID (xxxx in [xxxx:yyyy]).
Definition: hwloc.h:736
unsigned char bus
Bus number (yy in the PCI BDF notation xxxx:yy:zz.t).
Definition: hwloc.h:731
unsigned short subdevice_id
Sub-Device ID.
Definition: hwloc.h:739
unsigned int domain
Domain number (xxxx in the PCI BDF notation xxxx:yy:zz.t).
Definition: hwloc.h:730
unsigned short class_id
The class number (first two bytes, without the prog_if).
Definition: hwloc.h:735
unsigned char prog_if
Register-level programming interface number (3rd byte of the class).
Definition: hwloc.h:734
Structure of a topology object.
Definition: hwloc.h:492
struct hwloc_obj ** children
Normal children, children[0 .. arity -1].
Definition: hwloc.h:552
hwloc_nodeset_t nodeset
NUMA nodes covered by this object or containing this object.
Definition: hwloc.h:636
unsigned logical_index
Horizontal index in the whole list of similar objects, hence guaranteed unique across the entire mach...
Definition: hwloc.h:530
int symmetric_subtree
Set if the subtree of normal objects below this object is symmetric, which means all normal children ...
Definition: hwloc.h:557
unsigned misc_arity
Number of Misc children. These children are listed in misc_first_child.
Definition: hwloc.h:598
int depth
Vertical index in the hierarchy.
Definition: hwloc.h:515
struct hwloc_obj * misc_first_child
First Misc child. Misc objects are listed here (misc_arity and misc_first_child) instead of in the no...
Definition: hwloc.h:601
char * subtype
Subtype string to better describe the type field.
Definition: hwloc.h:495
unsigned os_index
OS-provided physical index number. It is not guaranteed unique across the entire machine,...
Definition: hwloc.h:497
hwloc_cpuset_t cpuset
CPUs covered by this object.
Definition: hwloc.h:608
unsigned memory_arity
Number of Memory children. These children are listed in memory_first_child.
Definition: hwloc.h:568
hwloc_uint64_t total_memory
Total memory (in bytes) in NUMA nodes below this object.
Definition: hwloc.h:509
void * userdata
Application-given private data pointer, initialized to NULL, use it as you wish. See hwloc_topology_s...
Definition: hwloc.h:677
unsigned io_arity
Number of I/O children. These children are listed in io_first_child.
Definition: hwloc.h:586
struct hwloc_obj * prev_sibling
Previous object below the same parent (inside the same list of children).
Definition: hwloc.h:545
struct hwloc_obj * next_sibling
Next object below the same parent (inside the same list of children).
Definition: hwloc.h:544
struct hwloc_obj * last_child
Last normal child.
Definition: hwloc.h:554
struct hwloc_obj * next_cousin
Next object of same type and depth.
Definition: hwloc.h:538
struct hwloc_obj * io_first_child
First I/O child. Bridges, PCI and OS devices are listed here (io_arity and io_first_child) instead of...
Definition: hwloc.h:589
hwloc_cpuset_t complete_cpuset
The complete CPU set of processors of this object,.
Definition: hwloc.h:623
hwloc_uint64_t gp_index
Global persistent index. Generated by hwloc, unique across the topology (contrary to os_index) and pe...
Definition: hwloc.h:682
unsigned sibling_rank
Index in parent's children[] array. Or the index in parent's Memory, I/O or Misc children list.
Definition: hwloc.h:543
unsigned arity
Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedi...
Definition: hwloc.h:548
char * name
Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...
Definition: hwloc.h:504
struct hwloc_obj * memory_first_child
First Memory child. NUMA nodes and Memory-side caches are listed here (memory_arity and memory_first_...
Definition: hwloc.h:571
hwloc_nodeset_t complete_nodeset
The complete NUMA node set of this object,.
Definition: hwloc.h:658
struct hwloc_obj * prev_cousin
Previous object of same type and depth.
Definition: hwloc.h:539
hwloc_obj_type_t type
Type of object.
Definition: hwloc.h:494
union hwloc_obj_attr_u * attr
Object type-specific Attributes, may be NULL if no attribute value was found.
Definition: hwloc.h:511
struct hwloc_infos_s infos
Array of info attributes (name and value strings).
Definition: hwloc.h:674
struct hwloc_obj * parent
Parent, NULL if root (Machine object)
Definition: hwloc.h:542
struct hwloc_obj * first_child
First normal child.
Definition: hwloc.h:553
Flags describing actual PU binding support for this topology.
Definition: hwloc.h:2482
unsigned char get_proc_last_cpu_location
Definition: hwloc.h:2502
unsigned char set_thread_cpubind
Definition: hwloc.h:2496
unsigned char set_thisthread_cpubind
Definition: hwloc.h:2492
unsigned char get_thisthread_last_cpu_location
Definition: hwloc.h:2504
unsigned char get_thisproc_cpubind
Definition: hwloc.h:2486
unsigned char get_thisthread_cpubind
Definition: hwloc.h:2494
unsigned char get_thread_cpubind
Definition: hwloc.h:2498
unsigned char set_thisproc_cpubind
Definition: hwloc.h:2484
unsigned char set_proc_cpubind
Definition: hwloc.h:2488
unsigned char get_proc_cpubind
Definition: hwloc.h:2490
unsigned char get_thisproc_last_cpu_location
Definition: hwloc.h:2500
Flags describing actual discovery support for this topology.
Definition: hwloc.h:2462
unsigned char numa
Detecting the number of NUMA nodes is supported.
Definition: hwloc.h:2466
unsigned char disallowed_numa
Detecting and identifying NUMA nodes that are not available to the current process is supported.
Definition: hwloc.h:2472
unsigned char cpukind_efficiency
Detecting the efficiency of CPU kinds is supported, see Kinds of CPU cores.
Definition: hwloc.h:2474
unsigned char pu
Detecting the number of PU objects is supported.
Definition: hwloc.h:2464
unsigned char numa_memory
Detecting the amount of memory in NUMA nodes is supported.
Definition: hwloc.h:2468
unsigned char disallowed_pu
Detecting and identifying PU objects that are not available to the current process is supported.
Definition: hwloc.h:2470
Flags describing actual memory binding support for this topology.
Definition: hwloc.h:2512
unsigned char set_thisthread_membind
Definition: hwloc.h:2522
unsigned char get_area_membind
Definition: hwloc.h:2531
unsigned char firsttouch_membind
Definition: hwloc.h:2536
unsigned char get_area_memlocation
Definition: hwloc.h:2533
unsigned char set_thisproc_membind
Definition: hwloc.h:2514
unsigned char interleave_membind
Definition: hwloc.h:2540
unsigned char get_thisproc_membind
Definition: hwloc.h:2516
unsigned char set_area_membind
Definition: hwloc.h:2529
unsigned char weighted_interleave_membind
Definition: hwloc.h:2542
unsigned char get_thisthread_membind
Definition: hwloc.h:2524
unsigned char set_proc_membind
Definition: hwloc.h:2518
unsigned char get_proc_membind
Definition: hwloc.h:2520
unsigned char migrate_membind
Definition: hwloc.h:2546
unsigned char nexttouch_membind
Definition: hwloc.h:2544
unsigned char alloc_membind
Definition: hwloc.h:2527
unsigned char bind_membind
Definition: hwloc.h:2538
Flags describing miscellaneous features.
Definition: hwloc.h:2551
unsigned char imported_support
Definition: hwloc.h:2553
Set of flags describing actual support for this topology.
Definition: hwloc.h:2562
struct hwloc_topology_misc_support * misc
Definition: hwloc.h:2566
struct hwloc_topology_membind_support * membind
Definition: hwloc.h:2565
struct hwloc_topology_cpubind_support * cpubind
Definition: hwloc.h:2564
struct hwloc_topology_discovery_support * discovery
Definition: hwloc.h:2563
Object type-specific Attributes.
Definition: hwloc.h:694
struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev
struct hwloc_obj_attr_u::hwloc_bridge_attr_s bridge
struct hwloc_obj_attr_u::hwloc_cache_attr_s cache
struct hwloc_obj_attr_u::hwloc_group_attr_s group
struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev
struct hwloc_obj_attr_u::hwloc_core_attr_s core
struct hwloc_obj_attr_u::hwloc_numanode_attr_s numanode