Open MPI logo

Portable Hardware Locality (hwloc) Documentation: v2.0.4

  |   Home   |   Support   |   FAQ   |  
distances.h
1 /*
2  * Copyright © 2010-2019 Inria. All rights reserved.
3  * See COPYING in top-level directory.
4  */
5 
10 #ifndef HWLOC_DISTANCES_H
11 #define HWLOC_DISTANCES_H
12 
13 #ifndef HWLOC_H
14 #error Please include the main hwloc.h instead
15 #endif
16 
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #elif 0
21 }
22 #endif
23 
24 
42  unsigned nbobjs;
48  unsigned long kind;
49  hwloc_uint64_t *values;
54 };
55 
76 
91 };
92 
116 HWLOC_DECLSPEC int
118  unsigned *nr, struct hwloc_distances_s **distances,
119  unsigned long kind, unsigned long flags);
120 
125 HWLOC_DECLSPEC int
127  unsigned *nr, struct hwloc_distances_s **distances,
128  unsigned long kind, unsigned long flags);
129 
134 static __hwloc_inline int
136  unsigned *nr, struct hwloc_distances_s **distances,
137  unsigned long kind, unsigned long flags)
138 {
139  int depth = hwloc_get_type_depth(topology, type);
140  if (depth == HWLOC_TYPE_DEPTH_UNKNOWN || depth == HWLOC_TYPE_DEPTH_MULTIPLE) {
141  *nr = 0;
142  return 0;
143  }
144  return hwloc_distances_get_by_depth(topology, depth, nr, distances, kind, flags);
145 }
146 
148 HWLOC_DECLSPEC void
149 hwloc_distances_release(hwloc_topology_t topology, struct hwloc_distances_s *distances);
150 
163 static __hwloc_inline int
165 {
166  unsigned i;
167  for(i=0; i<distances->nbobjs; i++)
168  if (distances->objs[i] == obj)
169  return (int)i;
170  return -1;
171 }
172 
180 static __hwloc_inline int
182  hwloc_obj_t obj1, hwloc_obj_t obj2,
183  hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)
184 {
185  int i1 = hwloc_distances_obj_index(distances, obj1);
186  int i2 = hwloc_distances_obj_index(distances, obj2);
187  if (i1 < 0 || i2 < 0)
188  return -1;
189  *value1to2 = distances->values[i1 * distances->nbobjs + i2];
190  *value2to1 = distances->values[i2 * distances->nbobjs + i1];
191  return 0;
192 }
193 
214 };
215 
230 HWLOC_DECLSPEC int hwloc_distances_add(hwloc_topology_t topology,
231  unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values,
232  unsigned long kind, unsigned long flags);
233 
242 HWLOC_DECLSPEC int hwloc_distances_remove(hwloc_topology_t topology);
243 
248 HWLOC_DECLSPEC int hwloc_distances_remove_by_depth(hwloc_topology_t topology, int depth);
249 
254 static __hwloc_inline int
256 {
257  int depth = hwloc_get_type_depth(topology, type);
258  if (depth == HWLOC_TYPE_DEPTH_UNKNOWN || depth == HWLOC_TYPE_DEPTH_MULTIPLE)
259  return 0;
260  return hwloc_distances_remove_by_depth(topology, depth);
261 }
262 
266 #ifdef __cplusplus
267 } /* extern "C" */
268 #endif
269 
270 
271 #endif /* HWLOC_DISTANCES_H */
hwloc_uint64_t * values
Matrix of distances between objects, stored as a one-dimension array.
Definition: distances.h:49
hwloc_distances_kind_e
Kinds of distance matrices.
Definition: distances.h:67
int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)
Returns the depth of objects of type type.
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.
If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping...
Definition: distances.h:213
unsigned nbobjs
Number of objects described by the distance matrix.
Definition: distances.h:42
struct hwloc_topology * hwloc_topology_t
Topology context.
Definition: hwloc.h:637
unsigned long kind
OR&#39;ed set of hwloc_distances_kind_e.
Definition: distances.h:48
Try to group objects based on the newly provided distance information.
Definition: distances.h:207
static 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:164
Distance values are similar to latencies between objects. Values are smaller for closer objects...
Definition: distances.h:83
static 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:255
Objects of given type exist at different depth in the topology (only for Groups). ...
Definition: hwloc.h:768
hwloc_obj_t * objs
Array of objects described by the distance matrix. These objects are not in any particular order...
Definition: distances.h:43
static 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:181
int hwloc_distances_remove(hwloc_topology_t topology)
Remove all distance matrices from a topology.
These distances were obtained from the operating system or hardware.
Definition: distances.h:71
Structure of a topology object.
Definition: hwloc.h:357
hwloc_distances_add_flag_e
Flags for adding a new distances to a topology.
Definition: distances.h:203
static 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.
Definition: distances.h:135
int hwloc_distances_add(hwloc_topology_t topology, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long kind, unsigned long flags)
Provide a new distance matrix.
hwloc_obj_type_t
Definition: hwloc.h:176
int hwloc_distances_get(hwloc_topology_t topology, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)
Retrieve distance matrices.
No object of given type exists in the topology.
Definition: hwloc.h:767
Distance values are similar to bandwidths between objects. Values are higher for closer objects...
Definition: distances.h:90
Matrix of distances between a set of objects.
Definition: distances.h:41
void hwloc_distances_release(hwloc_topology_t topology, struct hwloc_distances_s *distances)
Release a distance matrix structure previously returned by hwloc_distances_get(). ...
int hwloc_distances_remove_by_depth(hwloc_topology_t topology, int depth)
Remove distance matrices for objects at a specific depth in the topology.
These distances were provided by the user.
Definition: distances.h:75