Hardware Locality (hwloc)  PR-737-20250925.0822.gite8f69c77f
distances.h
1 /*
2  * SPDX-License-Identifier: BSD-3-Clause
3  * Copyright © 2010-2025 Inria. All rights reserved.
4  * See COPYING in top-level directory.
5  */
6 
11 #ifndef HWLOC_DISTANCES_H
12 #define HWLOC_DISTANCES_H
13 
14 #ifndef HWLOC_H
15 #error Please include the main hwloc.h instead
16 #endif
17 
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #elif 0
22 }
23 #endif
24 
25 
56  unsigned nbobjs;
62  unsigned long kind;
63  hwloc_uint64_t *values;
68 };
69 
90 
110 
117 };
118 
144 HWLOC_DECLSPEC int
146  unsigned *nr, struct hwloc_distances_s **distances,
147  unsigned long kind, unsigned long flags);
148 
155 HWLOC_DECLSPEC int
157  unsigned *nr, struct hwloc_distances_s **distances,
158  unsigned long kind, unsigned long flags);
159 
166 HWLOC_DECLSPEC int
168  unsigned *nr, struct hwloc_distances_s **distances,
169  unsigned long kind, unsigned long flags);
170 
181 HWLOC_DECLSPEC int
182 hwloc_distances_get_by_name(hwloc_topology_t topology, const char *name,
183  unsigned *nr, struct hwloc_distances_s **distances,
184  unsigned long flags);
185 
196 HWLOC_DECLSPEC const char *
197 hwloc_distances_get_name(hwloc_topology_t topology, struct hwloc_distances_s *distances);
198 
203 HWLOC_DECLSPEC void
204 hwloc_distances_release(hwloc_topology_t topology, struct hwloc_distances_s *distances);
205 
222 
236 
249 
259 };
260 
289 HWLOC_DECLSPEC int hwloc_distances_transform(hwloc_topology_t topology, struct hwloc_distances_s *distances,
290  enum hwloc_distances_transform_e transform,
291  void *transform_attr,
292  unsigned long flags);
293 
307 static __hwloc_inline int
309 {
310  unsigned i;
311  for(i=0; i<distances->nbobjs; i++)
312  if (distances->objs[i] == obj)
313  return (int)i;
314  return -1;
315 }
316 
325 static __hwloc_inline int
327  hwloc_obj_t obj1, hwloc_obj_t obj2,
328  hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)
329 {
330  int i1 = hwloc_distances_obj_index(distances, obj1);
331  int i2 = hwloc_distances_obj_index(distances, obj2);
332  if (i1 < 0 || i2 < 0)
333  return -1;
334  *value1to2 = distances->values[i1 * distances->nbobjs + i2];
335  *value2to1 = distances->values[i2 * distances->nbobjs + i1];
336  return 0;
337 }
338 
363 
386 HWLOC_DECLSPEC hwloc_distances_add_handle_t
388  const char *name, unsigned long kind,
389  unsigned long flags);
390 
413 HWLOC_DECLSPEC int hwloc_distances_add_values(hwloc_topology_t topology,
415  unsigned nbobjs, hwloc_obj_t *objs,
416  hwloc_uint64_t *values,
417  unsigned long flags);
418 
433 };
434 
451 HWLOC_DECLSPEC int hwloc_distances_add_commit(hwloc_topology_t topology,
453  unsigned long flags);
454 
473 HWLOC_DECLSPEC int hwloc_distances_remove(hwloc_topology_t topology);
474 
481 HWLOC_DECLSPEC int hwloc_distances_remove_by_depth(hwloc_topology_t topology, int depth);
482 
489 static __hwloc_inline int
491 {
492  int depth = hwloc_get_type_depth(topology, type);
493  if (depth == HWLOC_TYPE_DEPTH_UNKNOWN || depth == HWLOC_TYPE_DEPTH_MULTIPLE)
494  return 0;
495  return hwloc_distances_remove_by_depth(topology, depth);
496 }
497 
504 HWLOC_DECLSPEC int hwloc_distances_release_remove(hwloc_topology_t topology, struct hwloc_distances_s *distances);
505 
509 #ifdef __cplusplus
510 } /* extern "C" */
511 #endif
512 
513 
514 #endif /* HWLOC_DISTANCES_H */
hwloc_distances_kind_e
hwloc_distances_kind_e
Kinds of distance matrices.
Definition: distances.h:81
HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE
@ HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE
If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping...
Definition: distances.h:432
hwloc_distances_get_by_depth
int hwloc_distances_get_by_depth(hwloc_topology_t topology, int depth, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)
Retrieve distance matrices for object at a specific depth in the topology.
hwloc_distances_get_by_type
int hwloc_distances_get_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)
Retrieve distance matrices for object of a specific type.
HWLOC_DISTANCES_ADD_FLAG_GROUP
@ HWLOC_DISTANCES_ADD_FLAG_GROUP
Try to group objects based on the newly provided distance information. Grouping is only performed whe...
Definition: distances.h:426
hwloc_distances_remove
int hwloc_distances_remove(hwloc_topology_t topology)
Remove all distance matrices from a topology.
hwloc_obj
Structure of a topology object.
Definition: hwloc.h:488
HWLOC_DISTANCES_KIND_VALUE_HOPS
@ HWLOC_DISTANCES_KIND_VALUE_HOPS
Distance values are numbers of hops between objects. Values are smaller for closer objects,...
Definition: distances.h:109
hwloc_topology_t
struct hwloc_topology * hwloc_topology_t
Topology context.
Definition: hwloc.h:778
hwloc_distances_s::objs
hwloc_obj_t * objs
Array of objects described by the distance matrix. These objects are not in any particular order,...
Definition: distances.h:57
hwloc_distances_get_by_name
int hwloc_distances_get_by_name(hwloc_topology_t topology, const char *name, unsigned *nr, struct hwloc_distances_s **distances, unsigned long flags)
Retrieve a distance matrix with the given name.
hwloc_distances_release
void hwloc_distances_release(hwloc_topology_t topology, struct hwloc_distances_s *distances)
Release a distance matrix structure previously returned by hwloc_distances_get().
hwloc_distances_add_create
hwloc_distances_add_handle_t hwloc_distances_add_create(hwloc_topology_t topology, const char *name, unsigned long kind, unsigned long flags)
Create a new empty distances structure.
hwloc_distances_release_remove
int hwloc_distances_release_remove(hwloc_topology_t topology, struct hwloc_distances_s *distances)
Release and remove the given distance matrice from the topology.
HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL
@ HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL
Remove NULL objects from the distances structure.
Definition: distances.h:221
HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES
@ HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES
This distances structure covers objects of different types. This may apply to the "NVLinkBandwidth" s...
Definition: distances.h:116
hwloc_obj_type_t
hwloc_obj_type_t
Type of topology object.
Definition: hwloc.h:198
hwloc_distances_remove_by_type
int hwloc_distances_remove_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)
Remove distance matrices for objects of a specific type in the topology.
Definition: distances.h:490
hwloc_distances_remove_by_depth
int hwloc_distances_remove_by_depth(hwloc_topology_t topology, int depth)
Remove distance matrices for objects at a specific depth in the topology.
HWLOC_DISTANCES_KIND_FROM_USER
@ HWLOC_DISTANCES_KIND_FROM_USER
These distances were provided by the user.
Definition: distances.h:89
hwloc_distances_add_flag_e
hwloc_distances_add_flag_e
Flags for adding a new distances to a topology.
Definition: distances.h:420
HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE
@ HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE
Apply a transitive closure to the matrix to connect objects across switches.
Definition: distances.h:258
HWLOC_TYPE_DEPTH_UNKNOWN
@ HWLOC_TYPE_DEPTH_UNKNOWN
No object of given type exists in the topology.
Definition: hwloc.h:915
hwloc_distances_s
Matrix of distances between a set of objects.
Definition: distances.h:55
hwloc_distances_transform_e
hwloc_distances_transform_e
Transformations of distances structures.
Definition: distances.h:207
hwloc_distances_add_values
int hwloc_distances_add_values(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long flags)
Specify the objects and values in a new empty distances structure.
HWLOC_DISTANCES_KIND_VALUE_BANDWIDTH
@ HWLOC_DISTANCES_KIND_VALUE_BANDWIDTH
Distance values are similar to bandwidths between objects. Values are higher for closer objects,...
Definition: distances.h:103
HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS
@ HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS
Merge switches with multiple ports into a single object.
Definition: distances.h:248
hwloc_distances_obj_index
int hwloc_distances_obj_index(struct hwloc_distances_s *distances, hwloc_obj_t obj)
Find the index of an object in a distances structure.
Definition: distances.h:308
HWLOC_DISTANCES_KIND_VALUE_LATENCY
@ HWLOC_DISTANCES_KIND_VALUE_LATENCY
Distance values are similar to latencies between objects. Values are smaller for closer objects,...
Definition: distances.h:96
hwloc_distances_add_commit
int hwloc_distances_add_commit(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned long flags)
Commit a new distances structure.
hwloc_distances_s::values
hwloc_uint64_t * values
Matrix of distances between objects, stored as a one-dimension array.
Definition: distances.h:63
HWLOC_TYPE_DEPTH_MULTIPLE
@ HWLOC_TYPE_DEPTH_MULTIPLE
Objects of given type exist at different depth in the topology (only for Groups).
Definition: hwloc.h:916
hwloc_get_type_depth
int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)
Returns the depth of objects of type type.
HWLOC_DISTANCES_KIND_FROM_OS
@ HWLOC_DISTANCES_KIND_FROM_OS
These distances were obtained from the operating system or hardware.
Definition: distances.h:85
hwloc_distances_add_handle_t
void * hwloc_distances_add_handle_t
Handle to a new distances structure during its addition to the topology.
Definition: distances.h:362
HWLOC_DISTANCES_TRANSFORM_LINKS
@ HWLOC_DISTANCES_TRANSFORM_LINKS
Replace bandwidth values with a number of links.
Definition: distances.h:235
hwloc_distances_obj_pair_values
int hwloc_distances_obj_pair_values(struct hwloc_distances_s *distances, hwloc_obj_t obj1, hwloc_obj_t obj2, hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)
Find the values between two objects in a distance matrices.
Definition: distances.h:326
hwloc_distances_get
int hwloc_distances_get(hwloc_topology_t topology, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)
Retrieve distance matrices.
hwloc_distances_s::kind
unsigned long kind
OR'ed set of hwloc_distances_kind_e.
Definition: distances.h:62
hwloc_distances_get_name
const char * hwloc_distances_get_name(hwloc_topology_t topology, struct hwloc_distances_s *distances)
Get a description of what a distances structure contains.
hwloc_distances_s::nbobjs
unsigned nbobjs
Number of objects described by the distance matrix.
Definition: distances.h:56
hwloc_distances_transform
int hwloc_distances_transform(hwloc_topology_t topology, struct hwloc_distances_s *distances, enum hwloc_distances_transform_e transform, void *transform_attr, unsigned long flags)
Apply a transformation to a distances structure.