13 #ifndef HWLOC_HELPER_H
14 #define HWLOC_HELPER_H
17 #error Please include the main hwloc.h instead
92 if (!next || !next->
cpuset)
125 unsigned depth,
unsigned idx) __hwloc_attribute_pure;
128 unsigned depth,
unsigned idx)
172 static __hwloc_inline
unsigned
174 unsigned depth) __hwloc_attribute_pure;
175 static __hwloc_inline
unsigned
200 static __hwloc_inline
int
203 static __hwloc_inline
int
223 static __hwloc_inline
int
226 static __hwloc_inline
int
311 if (!next || !next->
cpuset)
363 if (obj->
depth < depth)
365 while (ancestor && ancestor->
depth > depth)
366 ancestor = ancestor->
parent;
377 while (ancestor && ancestor->
type != type)
378 ancestor = ancestor->
parent;
393 while (obj1 != obj2) {
398 if (obj1 != obj2 && obj1->
depth == obj2->
depth) {
410 static __hwloc_inline
int
412 static __hwloc_inline
int
427 if (prev->
parent != parent)
459 static __hwloc_inline
int
465 for (depth=0; ; depth++) {
505 current = current->
parent;
522 while (current && current->
cpuset) {
526 current = current->
parent;
631 for(i=0; i<nr; i++) {
662 static __hwloc_inline
void
664 static __hwloc_inline
void
668 if (!root->
arity || n == 1 || root->
depth >= until) {
684 static __hwloc_inline
void
692 for (i = 0; i < n_roots; i++)
696 for (i = 0; i < n_roots && tot_weight; i++) {
699 unsigned chunk = (n * weight + tot_weight-1) / tot_weight;
702 tot_weight -= weight;
865 static __hwloc_inline
void
893 static __hwloc_inline
void
914 static __hwloc_inline
void
945 static __hwloc_inline
void
1044 while (obj && obj->
cpuset) {
1069 static __hwloc_inline
int
1072 float *
latency,
float *reverse_latency)
1076 unsigned first_logical ;
1085 if (distances && distances->
latency) {
1086 const float * latency_matrix = distances->
latency;
1090 *latency = latency_matrix[l1*nbobjs+l2];
1091 *reverse_latency = latency_matrix[l2*nbobjs+l1];
1118 while (obj && !obj->
cpuset) {
1139 unsigned domain,
unsigned bus,
unsigned dev,
unsigned func)
1158 unsigned domain = 0;
1159 unsigned bus, dev, func;
1161 if (sscanf(busid,
"%x:%x.%x", &bus, &dev, &func) != 3
1162 && sscanf(busid,
"%x:%x:%x.%x", &domain, &bus, &dev, &func) != 4) {
1192 static __hwloc_inline
int
1194 unsigned domain,
unsigned bus)
1210 unsigned domain,
unsigned bus)
Structure of a topology object.
Definition: hwloc.h:331
unsigned arity
Number of children.
Definition: hwloc.h:363
unsigned short domain
Definition: hwloc.h:496
Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...
Definition: hwloc.h:187
HWLOC_DECLSPEC int hwloc_bitmap_isset(hwloc_const_bitmap_t bitmap, unsigned id) __hwloc_attribute_pure
Test whether index id is part of bitmap bitmap.
static __hwloc_inline hwloc_obj_t hwloc_get_obj_inside_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, unsigned idx) __hwloc_attribute_pure
Return the idx -th object of type type included in CPU set set.
Definition: helper.h:158
hwloc_const_bitmap_t hwloc_const_cpuset_t
A non-modifiable hwloc_cpuset_t.
Definition: hwloc.h:118
hwloc_obj_type_t
Type of topology object.
Definition: hwloc.h:152
unsigned char dev
Definition: hwloc.h:497
struct hwloc_obj * prev_cousin
Previous object of same type and depth.
Definition: hwloc.h:354
unsigned distances_count
Definition: hwloc.h:463
HWLOC_DECLSPEC int hwloc_bitmap_weight(hwloc_const_bitmap_t bitmap) __hwloc_attribute_pure
Compute the "weight" of bitmap bitmap (i.e., number of indexes that are in the bitmap).
Distances between objects.
Definition: hwloc.h:538
struct hwloc_obj_attr_u::hwloc_cache_attr_s cache
static __hwloc_inline hwloc_obj_t hwloc_get_obj_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth, unsigned idx) __hwloc_attribute_pure
Return the (logically) idx -th object at depth depth included in CPU set set.
Definition: helper.h:127
static __hwloc_inline unsigned hwloc_get_nbobjs_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth) __hwloc_attribute_pure
Return the number of objects at depth depth included in CPU set set.
Definition: helper.h:176
HWLOC_DECLSPEC int hwloc_bitmap_intersects(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2) __hwloc_attribute_pure
Test whether bitmaps bitmap1 and bitmap2 intersects.
Operating system device. These objects have neither CPU sets nor node sets. They are not added to the...
Definition: hwloc.h:225
HWLOC_DECLSPEC hwloc_bitmap_t hwloc_bitmap_dup(hwloc_const_bitmap_t bitmap) __hwloc_attribute_malloc
Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.
static __hwloc_inline void hwloc_cpuset_to_nodeset(hwloc_topology_t topology, hwloc_const_cpuset_t _cpuset, hwloc_nodeset_t nodeset)
Convert a CPU set into a NUMA node set and handle non-NUMA cases.
Definition: helper.h:866
HWLOC_DECLSPEC int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)
Returns the depth of objects of type type.
HWLOC_DECLSPEC int hwloc_get_largest_objs_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t *__hwloc_restrict objs, int max)
Get the set of largest objects covering exactly a given cpuset set.
HWLOC_DECLSPEC void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)
Empty the bitmap bitmap.
static __hwloc_inline hwloc_obj_t hwloc_get_hostbridge_by_pcibus(hwloc_topology_t topology, unsigned domain, unsigned bus)
Find the hostbridge that covers the given PCI bus.
Definition: helper.h:1209
static __hwloc_inline hwloc_const_cpuset_t hwloc_topology_get_topology_cpuset(hwloc_topology_t topology) __hwloc_attribute_pure
Get topology CPU set.
Definition: helper.h:744
unsigned char func
Definition: hwloc.h:497
struct hwloc_obj_attr_u::hwloc_bridge_attr_s bridge
struct hwloc_obj * parent
Parent, NULL if root (system object)
Definition: hwloc.h:357
static __hwloc_inline hwloc_obj_t hwloc_get_first_largest_obj_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)
Get the first largest object included in the given cpuset set.
Definition: helper.h:45
hwloc_nodeset_t allowed_nodeset
The set of allowed NUMA memory nodes.
Definition: hwloc.h:449
static __hwloc_inline hwloc_const_cpuset_t hwloc_topology_get_online_cpuset(hwloc_topology_t topology) __hwloc_attribute_pure
Get online CPU set.
Definition: helper.h:761
PCI-side of a bridge.
Definition: hwloc.h:254
static __hwloc_inline void hwloc_cpuset_from_nodeset(hwloc_topology_t topology, hwloc_cpuset_t _cpuset, hwloc_const_nodeset_t nodeset)
Convert a NUMA node set into a CPU set and handle non-NUMA cases.
Definition: helper.h:915
unsigned logical_index
Horizontal index in the whole list of similar objects, could be a "cousin_rank" since it's the rank...
Definition: hwloc.h:348
unsigned depth
Vertical index in the hierarchy. If the topology is symmetric, this is equal to the parent depth plus...
Definition: hwloc.h:343
static __hwloc_inline hwloc_const_nodeset_t hwloc_topology_get_allowed_nodeset(hwloc_topology_t topology) __hwloc_attribute_pure
Get allowed node set.
Definition: helper.h:830
unsigned os_index
OS-provided physical index number.
Definition: hwloc.h:334
struct hwloc_distances_s ** distances
Distances between all objects at same depth below this object.
Definition: hwloc.h:462
HWLOC_DECLSPEC int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap) __hwloc_attribute_pure
Test whether bitmap bitmap is empty.
static __hwloc_inline hwloc_obj_t hwloc_get_common_ancestor_obj(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj1, hwloc_obj_t obj2) __hwloc_attribute_pure
Returns the common parent object to objects lvl1 and lvl2.
Definition: helper.h:386
static __hwloc_inline int hwloc_get_nbobjs_inside_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type) __hwloc_attribute_pure
Return the number of objects of type type included in CPU set set.
Definition: helper.h:204
hwloc_cpuset_t complete_cpuset
The complete CPU set of logical processors of this object,.
Definition: hwloc.h:388
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth, hwloc_obj_t prev)
Return the next object at depth depth included in CPU set set.
Definition: helper.h:88
static __hwloc_inline const struct hwloc_distances_s * hwloc_get_whole_distance_matrix_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)
Get the distances between all objects of a given type.
Definition: helper.h:1018
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)
Iterate through same-type objects covering at least CPU set set.
Definition: helper.h:334
HWLOC_DECLSPEC int hwloc_bitmap_isincluded(hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap) __hwloc_attribute_pure
Test whether bitmap sub_bitmap is part of bitmap super_bitmap.
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:133
static __hwloc_inline hwloc_obj_t hwloc_get_non_io_ancestor_obj(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t ioobj)
Get the first non-I/O ancestor object.
Definition: helper.h:1114
static __hwloc_inline hwloc_obj_t hwloc_get_pcidev_by_busid(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)
Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id...
Definition: helper.h:1138
Objects of given type exist at different depth in the topology.
Definition: hwloc.h:1080
HWLOC_DECLSPEC int hwloc_bitmap_isequal(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2) __hwloc_attribute_pure
Test whether bitmap bitmap1 is equal to bitmap bitmap2.
static __hwloc_inline hwloc_obj_t hwloc_get_ancestor_obj_by_type(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_type_t type, hwloc_obj_t obj) __hwloc_attribute_pure
Returns the ancestor object of obj with type type.
Definition: helper.h:374
static __hwloc_inline const struct hwloc_distances_s * hwloc_get_distance_matrix_covering_obj_by_depth(hwloc_topology_t topology, hwloc_obj_t obj, unsigned depth, unsigned *firstp)
Get distances for the given depth and covering some objects.
Definition: helper.h:1040
static __hwloc_inline 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) __hwloc_attribute_pure
Find an object below another object, both specified by types and indexes.
Definition: helper.h:595
static __hwloc_inline hwloc_obj_t hwloc_get_obj_below_array_by_type(hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv) __hwloc_attribute_pure
Find an object below a chain of objects specified by types and indexes.
Definition: helper.h:627
HWLOC_DECLSPEC void hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)
Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)
Return the next object of type type included in CPU set set.
Definition: helper.h:109
static __hwloc_inline hwloc_obj_t hwloc_get_next_bridge(hwloc_topology_t topology, hwloc_obj_t prev)
Get the next bridge in the system.
Definition: helper.h:1185
static __hwloc_inline hwloc_obj_t hwloc_get_next_pcidev(hwloc_topology_t topology, hwloc_obj_t prev)
Get the next PCI device in the system.
Definition: helper.h:1129
static __hwloc_inline hwloc_obj_t hwloc_get_shared_cache_covering_obj(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj) __hwloc_attribute_pure
Get the first cache shared between an object and somebody else.
Definition: helper.h:517
hwloc_obj_cache_type_t type
Cache type.
Definition: hwloc.h:488
hwloc_obj_type_t type
Type of object.
Definition: hwloc.h:333
hwloc_nodeset_t complete_nodeset
The complete NUMA node set of this object,.
Definition: hwloc.h:435
static __hwloc_inline hwloc_obj_t hwloc_get_child_covering_cpuset(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t set, hwloc_obj_t parent) __hwloc_attribute_pure
Get the child covering at least CPU set set.
Definition: helper.h:258
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:116
NUMA node. A set of processors around memory which the processors can directly access.
Definition: hwloc.h:172
enum hwloc_obj_cache_type_e hwloc_obj_cache_type_t
Cache type.
static __hwloc_inline hwloc_const_cpuset_t hwloc_topology_get_allowed_cpuset(hwloc_topology_t topology) __hwloc_attribute_pure
Get allowed CPU set.
Definition: helper.h:778
struct hwloc_obj * next_sibling
Next object below the same parent.
Definition: hwloc.h:359
static __hwloc_inline hwloc_const_nodeset_t hwloc_topology_get_complete_nodeset(hwloc_topology_t topology) __hwloc_attribute_pure
Get complete node set.
Definition: helper.h:795
hwloc_nodeset_t nodeset
NUMA nodes covered by this object or containing this object.
Definition: hwloc.h:418
Host-side of a bridge, only possible upstream.
Definition: hwloc.h:253
static __hwloc_inline hwloc_obj_t hwloc_get_ancestor_obj_by_depth(hwloc_topology_t topology __hwloc_attribute_unused, unsigned depth, hwloc_obj_t obj) __hwloc_attribute_pure
Returns the ancestor object of obj at depth depth.
Definition: helper.h:360
static __hwloc_inline int hwloc_get_latency(hwloc_topology_t topology, hwloc_obj_t obj1, hwloc_obj_t obj2, float *latency, float *reverse_latency)
Get the latency in both directions between two objects.
Definition: helper.h:1070
hwloc_obj_bridge_type_t downstream_type
Definition: hwloc.h:515
static __hwloc_inline hwloc_obj_t hwloc_get_obj_covering_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set) __hwloc_attribute_pure
Get the lowest object covering at least CPU set set.
Definition: helper.h:283
union hwloc_obj_attr_u * attr
Object type-specific Attributes, may be NULL if no attribute value was found.
Definition: hwloc.h:339
hwloc_cpuset_t online_cpuset
The CPU set of online logical processors.
Definition: hwloc.h:399
HWLOC_DECLSPEC hwloc_obj_t hwloc_get_obj_by_depth(hwloc_topology_t topology, unsigned depth, unsigned idx) __hwloc_attribute_pure
Returns the topology object at logical index idx from depth depth.
unsigned depth
Depth of cache (e.g., L1, L2, ...etc.)
Definition: hwloc.h:484
HWLOC_DECLSPEC void hwloc_bitmap_fill(hwloc_bitmap_t bitmap)
Fill bitmap bitmap with all possible indexes (even if those objects don't exist or are otherwise unav...
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, unsigned depth, hwloc_obj_t prev)
Iterate through same-depth objects covering at least CPU set set.
Definition: helper.h:307
static __hwloc_inline void hwloc_distributev(hwloc_topology_t topology, hwloc_obj_t *root, unsigned n_roots, hwloc_cpuset_t *cpuset, unsigned n, unsigned until)
Distribute n items over the topology under root.
Definition: helper.h:685
struct hwloc_obj * first_child
First child.
Definition: hwloc.h:365
static __hwloc_inline int hwloc_obj_is_in_subtree(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj, hwloc_obj_t subtree_root) __hwloc_attribute_pure
Returns true if obj is inside the subtree beginning with ancestor object subtree_root.
Definition: helper.h:413
hwloc_const_bitmap_t hwloc_const_nodeset_t
A non-modifiable hwloc_nodeset_t.
Definition: hwloc.h:136
float * latency
Matrix of latencies between objects, stored as a one-dimension array. May be NULL if the distances co...
Definition: hwloc.h:546
static __hwloc_inline void hwloc_cpuset_from_nodeset_strict(struct hwloc_topology *topology, hwloc_cpuset_t _cpuset, hwloc_const_nodeset_t nodeset)
Convert a NUMA node set into a CPU set without handling non-NUMA cases.
Definition: helper.h:946
struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev
static __hwloc_inline hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology) __hwloc_attribute_pure
Get complete CPU set.
Definition: helper.h:726
struct hwloc_obj * next_cousin
Next object of same type and depth.
Definition: hwloc.h:353
static __hwloc_inline hwloc_obj_t hwloc_get_root_obj(hwloc_topology_t topology) __hwloc_attribute_pure
Returns the top-object of the topology-tree.
static __hwloc_inline hwloc_obj_t hwloc_get_next_obj_by_depth(hwloc_topology_t topology, unsigned depth, hwloc_obj_t prev)
Returns the next object at depth depth.
static __hwloc_inline 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.
PCI device. These objects have neither CPU sets nor node sets. They are not added to the topology unl...
Definition: hwloc.h:220
Cache. Can be L1i, L1d, L2, L3, ...
Definition: hwloc.h:180
static __hwloc_inline hwloc_obj_t hwloc_get_pu_obj_by_os_index(hwloc_topology_t topology, unsigned os_index) __hwloc_attribute_pure
Returns the object of type HWLOC_OBJ_PU with os_index.
Definition: helper.h:555
static __hwloc_inline hwloc_obj_t hwloc_get_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx) __hwloc_attribute_pure
Returns the topology object at logical index idx with type type.
struct hwloc_pcidev_attr_s pci
Definition: hwloc.h:506
static __hwloc_inline const struct hwloc_distances_s * hwloc_get_whole_distance_matrix_by_depth(hwloc_topology_t topology, unsigned depth)
Get the distances between all objects at the given depth.
Definition: helper.h:988
No object of given type exists in the topology.
Definition: hwloc.h:1079
unsigned char bus
Definition: hwloc.h:497
struct hwloc_obj ** children
Children, children[0 .. arity -1].
Definition: hwloc.h:364
Unified cache.
Definition: hwloc.h:245
struct hwloc_topology * hwloc_topology_t
Topology context.
Definition: hwloc.h:577
hwloc_cpuset_t allowed_cpuset
The CPU set of allowed logical processors.
Definition: hwloc.h:407
static __hwloc_inline void hwloc_distribute(hwloc_topology_t topology, hwloc_obj_t root, hwloc_cpuset_t *set, unsigned n, unsigned until)
Definition: helper.h:665
Bridge. Any bridge that connects the host or an I/O bus, to another I/O bus. Bridge objects have neit...
Definition: hwloc.h:213
hwloc_cpuset_t cpuset
CPUs covered by this object.
Definition: hwloc.h:375
HWLOC_DECLSPEC void hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)
Add index id in bitmap bitmap.
static __hwloc_inline int hwloc_bridge_covers_pcibus(hwloc_obj_t bridge, unsigned domain, unsigned bus)
Definition: helper.h:1193
static __hwloc_inline hwloc_obj_t hwloc_get_pcidev_by_busidstring(hwloc_topology_t topology, const char *busid)
Find the PCI device object matching the PCI bus id given as a string xxxx:yy:zz.t or yy:zz...
Definition: helper.h:1156
static __hwloc_inline void hwloc_cpuset_to_nodeset_strict(struct hwloc_topology *topology, hwloc_const_cpuset_t _cpuset, hwloc_nodeset_t nodeset)
Convert a CPU set into a NUMA node set without handling non-NUMA cases.
Definition: helper.h:894
unsigned relative_depth
Relative depth of the considered objects below the object containing this distance information...
Definition: hwloc.h:539
static __hwloc_inline int hwloc_get_cache_type_depth(hwloc_topology_t topology, unsigned cachelevel, hwloc_obj_cache_type_t cachetype)
Find the depth of cache objects matching cache depth and type.
Definition: helper.h:460
unsigned nbobjs
Number of objects considered in the matrix. It is the number of descendant objects at relative_depth ...
Definition: hwloc.h:541
static __hwloc_inline hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)
Get the next OS device in the system.
Definition: helper.h:1175
union hwloc_obj_attr_u::hwloc_bridge_attr_s::@1 downstream
static __hwloc_inline hwloc_obj_t hwloc_get_cache_covering_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set) __hwloc_attribute_pure
Get the first cache covering a cpuset set.
Definition: helper.h:499
static __hwloc_inline hwloc_const_nodeset_t hwloc_topology_get_topology_nodeset(hwloc_topology_t topology) __hwloc_attribute_pure
Get topology node set.
Definition: helper.h:813
static __hwloc_inline int hwloc_get_obj_index_inside_cpuset(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t set, hwloc_obj_t obj) __hwloc_attribute_pure
Return the logical index among the objects included in CPU set set.
Definition: helper.h:227
static __hwloc_inline hwloc_obj_t hwloc_get_next_child(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t parent, hwloc_obj_t prev)
Return the next child.
Definition: helper.h:423
hwloc_obj_bridge_type_t upstream_type
Definition: hwloc.h:508
HWLOC_DECLSPEC unsigned hwloc_get_closest_objs(hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t *__hwloc_restrict objs, unsigned max)
Do a depth-first traversal of the topology to find and sort.