diff --git a/index.php b/index.php index 4439830986..e151d5f722 100644 --- a/index.php +++ b/index.php @@ -99,9 +99,9 @@ function pr($name, $url, $comma) { news("Open MPI v5.0.6 released", "Bug fix release", ""); -news("hwloc 2.11.2", - "Stable release", - "https://www.mail-archive.com/hwloc-announce@lists.open-mpi.org/msg00169.html"); +news("hwloc 2.12.0", + "Major release", + "https://sympa.inria.fr/sympa/arc/hwloc-announce/2025-02/msg00001.html"); ?> diff --git a/projects/hwloc/doc/hwloc-v2.12.0rc1-a4.pdf b/projects/hwloc/doc/hwloc-v2.12.0-a4.pdf similarity index 71% rename from projects/hwloc/doc/hwloc-v2.12.0rc1-a4.pdf rename to projects/hwloc/doc/hwloc-v2.12.0-a4.pdf index bbb71e6990..04649a9eba 100644 Binary files a/projects/hwloc/doc/hwloc-v2.12.0rc1-a4.pdf and b/projects/hwloc/doc/hwloc-v2.12.0-a4.pdf differ diff --git a/projects/hwloc/doc/hwloc-v2.12.0rc1-letter.pdf b/projects/hwloc/doc/hwloc-v2.12.0-letter.pdf similarity index 55% rename from projects/hwloc/doc/hwloc-v2.12.0rc1-letter.pdf rename to projects/hwloc/doc/hwloc-v2.12.0-letter.pdf index 35f82b0743..488ccd80e0 100644 Binary files a/projects/hwloc/doc/hwloc-v2.12.0rc1-letter.pdf and b/projects/hwloc/doc/hwloc-v2.12.0-letter.pdf differ diff --git a/projects/hwloc/doc/index.php b/projects/hwloc/doc/index.php index 2d04348029..d83c689a01 100644 --- a/projects/hwloc/doc/index.php +++ b/projects/hwloc/doc/index.php @@ -36,7 +36,7 @@ function print_docs($desc, $letterpdf, $a4pdf, $html) { ######################################################### -$versions = array(); +$versions = array("v2.12.0"); $first = 1; foreach ($versions as $key => $v) { # print_docs("Release $v (stable" . (!$first ? ", old" : "") . ")", diff --git a/projects/hwloc/doc/v2.12.0rc1/a00071_source.php b/projects/hwloc/doc/v2.12.0/a00071_source.php similarity index 98% rename from projects/hwloc/doc/v2.12.0rc1/a00071_source.php rename to projects/hwloc/doc/v2.12.0/a00071_source.php index e646271b49..b58fb8c18c 100644 --- a/projects/hwloc/doc/v2.12.0rc1/a00071_source.php +++ b/projects/hwloc/doc/v2.12.0/a00071_source.php @@ -38,7 +38,7 @@
Macros | |
| #define | HWLOC_API_VERSION 0x00020b00 |
| #define | HWLOC_API_VERSION 0x00020c00 |
| #define | HWLOC_COMPONENT_ABI 7 |
| #define HWLOC_API_VERSION 0x00020b00 | +#define HWLOC_API_VERSION 0x00020c00 |
A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.
It may be consulted and modified with the bitmap API as any hwloc_bitmap_t (see hwloc/bitmap.h).
-Each bit may be converted into a PU object using hwloc_get_pu_obj_by_os_index().
+Each bit may be converted into a PU object using hwloc_get_pu_obj_by_os_index().
A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.
-It may be consulted and modified with the bitmap API as any hwloc_bitmap_t (see hwloc/bitmap.h). Each bit may be converted into a NUMA node object using hwloc_get_numanode_obj_by_os_index().
+It may be consulted and modified with the bitmap API as any hwloc_bitmap_t (see hwloc/bitmap.h). Each bit may be converted into a NUMA node object using hwloc_get_numanode_obj_by_os_index().
When binding memory on a system without any NUMA node, the single main memory bank is considered as NUMA node #0.
See also Converting between CPU sets and node sets.
diff --git a/projects/hwloc/doc/v2.12.0rc1/a00140.php b/projects/hwloc/doc/v2.12.0/a00140.php similarity index 100% rename from projects/hwloc/doc/v2.12.0rc1/a00140.php rename to projects/hwloc/doc/v2.12.0/a00140.php diff --git a/projects/hwloc/doc/v2.12.0rc1/a00141.php b/projects/hwloc/doc/v2.12.0/a00141.php similarity index 100% rename from projects/hwloc/doc/v2.12.0rc1/a00141.php rename to projects/hwloc/doc/v2.12.0/a00141.php diff --git a/projects/hwloc/doc/v2.12.0rc1/a00142.php b/projects/hwloc/doc/v2.12.0/a00142.php similarity index 100% rename from projects/hwloc/doc/v2.12.0rc1/a00142.php rename to projects/hwloc/doc/v2.12.0/a00142.php diff --git a/projects/hwloc/doc/v2.12.0rc1/a00143.php b/projects/hwloc/doc/v2.12.0/a00143.php similarity index 81% rename from projects/hwloc/doc/v2.12.0rc1/a00143.php rename to projects/hwloc/doc/v2.12.0/a00143.php index 985a46d33e..caf7a12e81 100644 --- a/projects/hwloc/doc/v2.12.0rc1/a00143.php +++ b/projects/hwloc/doc/v2.12.0/a00143.php @@ -55,26 +55,26 @@Be sure to see the figure in Terms and Definitions that shows a complete topology tree, including depths, child/sibling/cousin relationships, and an example of an asymmetric topology where one package has fewer caches than its peers.
@@ -204,8 +204,8 @@| static int hwloc_get_nbobjs_by_type | +int hwloc_get_nbobjs_by_type | ( | hwloc_topology_t | topology, | @@ -233,7 +233,7 @@
| static hwloc_obj_t hwloc_get_next_obj_by_depth | +hwloc_obj_t hwloc_get_next_obj_by_depth | ( | hwloc_topology_t | topology, | @@ -282,7 +282,7 @@
| static hwloc_obj_t hwloc_get_next_obj_by_type | +hwloc_obj_t hwloc_get_next_obj_by_type | ( | hwloc_topology_t | topology, | @@ -331,7 +331,7 @@
| static hwloc_obj_t hwloc_get_obj_by_type | +hwloc_obj_t hwloc_get_obj_by_type | ( | hwloc_topology_t | topology, | @@ -421,7 +421,7 @@
| static hwloc_obj_t hwloc_get_root_obj | +hwloc_obj_t hwloc_get_root_obj | ( | hwloc_topology_t | topology | ) | @@ -454,7 +454,7 @@
| static int hwloc_get_type_or_above_depth | +int hwloc_get_type_or_above_depth | ( | hwloc_topology_t | topology, | @@ -535,7 +535,7 @@
| static int hwloc_get_type_or_below_depth | +int hwloc_get_type_or_below_depth | ( | hwloc_topology_t | topology, | @@ -576,7 +576,7 @@
Functions | ||||
| static const char * | hwloc_obj_get_info_by_name (hwloc_obj_t obj, const char *name) | |||
| const char * | hwloc_obj_get_info_by_name (hwloc_obj_t obj, const char *name) | |||
| int | hwloc_obj_add_info (hwloc_obj_t obj, const char *name, const char *value) | |||
| int | hwloc_obj_set_subtype (hwloc_topology_t topology, hwloc_obj_t obj, const char *subtype) |
|
-inlinestatic | +inline|
When the requested binding operation is not available and the HWLOC_MEMBIND_STRICT flag was passed, the function returns -1. errno will be set to ENOSYS when the system does support the specified action or policy (e.g., some systems only allow binding memory on a per-thread basis, whereas other systems only allow binding memory for all threads in a process). errno will be set to EXDEV when the requested set can not be enforced (e.g., some systems only allow binding memory to a single NUMA node).
If HWLOC_MEMBIND_STRICT was not passed, the function may fail as well, or the operating system may use a slightly different operation (with side-effects, smaller binding set, etc.) when the requested operation is not exactly supported.
The most portable form that should be preferred over the others whenever possible is as follows. It allocates some memory hopefully bound to the specified set. To do so, hwloc will possibly have to change the current memory binding policy in order to actually get the memory bound, if the OS does not provide any other way to simply allocate bound memory without changing the policy for all allocations. That is the difference with hwloc_alloc_membind(), which will never change the current memory binding policy.
-Each hwloc memory binding function takes a bitmap argument that is a CPU set by default, or a NUMA memory node set if the flag HWLOC_MEMBIND_BYNODESET is specified. See Object Sets (hwloc_cpuset_t and hwloc_nodeset_t) and The bitmap API for a discussion of CPU sets and NUMA memory node sets. It is also possible to convert between CPU set and node set using hwloc_cpuset_to_nodeset() or hwloc_cpuset_from_nodeset().
+Each hwloc memory binding function takes a bitmap argument that is a CPU set by default, or a NUMA memory node set if the flag HWLOC_MEMBIND_BYNODESET is specified. See Object Sets (hwloc_cpuset_t and hwloc_nodeset_t) and The bitmap API for a discussion of CPU sets and NUMA memory node sets. It is also possible to convert between CPU set and node set using hwloc_cpuset_to_nodeset() or hwloc_cpuset_from_nodeset().
Memory binding by CPU set cannot work for CPU-less NUMA memory nodes. Binding by nodeset should therefore be preferred whenever possible.
| static void * hwloc_alloc_membind_policy | +void * hwloc_alloc_membind_policy | ( | hwloc_topology_t | topology, | @@ -313,7 +313,7 @@
| static hwloc_obj_t hwloc_get_first_largest_obj_inside_cpuset | +hwloc_obj_t hwloc_get_first_largest_obj_inside_cpuset | ( | hwloc_topology_t | topology, | @@ -82,7 +82,7 @@
| static unsigned hwloc_get_nbobjs_inside_cpuset_by_depth | +unsigned hwloc_get_nbobjs_inside_cpuset_by_depth | ( | hwloc_topology_t | topology, | @@ -175,7 +175,7 @@
| static int hwloc_get_nbobjs_inside_cpuset_by_type | +int hwloc_get_nbobjs_inside_cpuset_by_type | ( | hwloc_topology_t | topology, | @@ -225,7 +225,7 @@
| static hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_depth | +hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_depth | ( | hwloc_topology_t | topology, | @@ -283,7 +283,7 @@
| static hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_type | +hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_type | ( | hwloc_topology_t | topology, | @@ -342,7 +342,7 @@
NULL if there is no depth for the given type. NULL if there are multiple depths for the given type, the caller should fallback to hwloc_get_next_obj_inside_cpuset_by_depth().NULL if there are multiple depths for the given type, the caller should fallback to hwloc_get_next_obj_inside_cpuset_by_depth().
| static int hwloc_get_obj_index_inside_cpuset | +int hwloc_get_obj_index_inside_cpuset | ( | hwloc_topology_t | topology, | @@ -399,7 +399,7 @@
| static hwloc_obj_t hwloc_get_obj_inside_cpuset_by_depth | +hwloc_obj_t hwloc_get_obj_inside_cpuset_by_depth | ( | hwloc_topology_t | topology, | @@ -456,7 +456,7 @@
| static hwloc_obj_t hwloc_get_obj_inside_cpuset_by_type | +hwloc_obj_t hwloc_get_obj_inside_cpuset_by_type | ( | hwloc_topology_t | topology, | @@ -510,7 +510,7 @@
NULL if there is no depth for given type. NULL if there are multiple depths for given type, the caller should fallback to hwloc_get_obj_inside_cpuset_by_depth().NULL if there are multiple depths for given type, the caller should fallback to hwloc_get_obj_inside_cpuset_by_depth().
| static hwloc_obj_t hwloc_get_child_covering_cpuset | +hwloc_obj_t hwloc_get_child_covering_cpuset | ( | hwloc_topology_t | topology, | @@ -78,7 +78,7 @@
| static hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth | +hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth | ( | hwloc_topology_t | topology, | @@ -132,7 +132,7 @@
| static hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_type | +hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_type | ( | hwloc_topology_t | topology, | @@ -189,7 +189,7 @@
NULL if there is no depth for the given type. NULL if there are multiple depths for the given type, the caller should fallback to hwloc_get_next_obj_covering_cpuset_by_depth().NULL if there are multiple depths for the given type, the caller should fallback to hwloc_get_next_obj_covering_cpuset_by_depth().
| static hwloc_obj_t hwloc_get_obj_covering_cpuset | +hwloc_obj_t hwloc_get_obj_covering_cpuset | ( | hwloc_topology_t | topology, | @@ -238,7 +238,7 @@
Be sure to see the figure in Terms and Definitions that shows a complete topology tree, including depths, child/sibling/cousin relationships, and an example of an asymmetric topology where one package has fewer caches than its peers.
| static hwloc_obj_t hwloc_get_ancestor_obj_by_depth | +hwloc_obj_t hwloc_get_ancestor_obj_by_depth | ( | hwloc_topology_t | topology, | @@ -81,7 +81,7 @@
| static hwloc_obj_t hwloc_get_ancestor_obj_by_type | +hwloc_obj_t hwloc_get_ancestor_obj_by_type | ( | hwloc_topology_t | topology, | @@ -129,7 +129,7 @@
| static hwloc_obj_t hwloc_get_common_ancestor_obj | +hwloc_obj_t hwloc_get_common_ancestor_obj | ( | hwloc_topology_t | topology, | @@ -179,7 +179,7 @@
| static hwloc_obj_t hwloc_get_next_child | +hwloc_obj_t hwloc_get_next_child | ( | hwloc_topology_t | topology, | @@ -225,7 +225,7 @@
| static int hwloc_obj_is_in_subtree | +int hwloc_obj_is_in_subtree | ( | hwloc_topology_t | topology, | @@ -275,7 +275,7 @@
Functions | |
| static int | hwloc_get_cache_type_depth (hwloc_topology_t topology, unsigned cachelevel, hwloc_obj_cache_type_t cachetype) |
| static hwloc_obj_t | hwloc_get_cache_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set) |
| static hwloc_obj_t | hwloc_get_shared_cache_covering_obj (hwloc_topology_t topology, hwloc_obj_t obj) |
| int | hwloc_get_cache_type_depth (hwloc_topology_t topology, unsigned cachelevel, hwloc_obj_cache_type_t cachetype) |
| hwloc_obj_t | hwloc_get_cache_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set) |
| hwloc_obj_t | hwloc_get_shared_cache_covering_obj (hwloc_topology_t topology, hwloc_obj_t obj) |
| static hwloc_obj_t hwloc_get_cache_covering_cpuset | +hwloc_obj_t hwloc_get_cache_covering_cpuset | ( | hwloc_topology_t | topology, | @@ -70,7 +70,7 @@
| static int hwloc_get_cache_type_depth | +int hwloc_get_cache_type_depth | ( | hwloc_topology_t | topology, | @@ -115,7 +115,7 @@
| static hwloc_obj_t hwloc_get_shared_cache_covering_obj | +hwloc_obj_t hwloc_get_shared_cache_covering_obj | ( | hwloc_topology_t | topology, | @@ -164,7 +164,7 @@
| static hwloc_obj_t hwloc_get_numanode_obj_by_os_index | +hwloc_obj_t hwloc_get_numanode_obj_by_os_index | ( | hwloc_topology_t | topology, | @@ -167,7 +167,7 @@
| static hwloc_obj_t hwloc_get_obj_below_array_by_type | +hwloc_obj_t hwloc_get_obj_below_array_by_type | ( | hwloc_topology_t | topology, | @@ -219,13 +219,13 @@
Find an object below a chain of objects specified by types and indexes.
-This is a generalized version of hwloc_get_obj_below_by_type().
+This is a generalized version of hwloc_get_obj_below_by_type().
Arrays typev and idxv must contain nr types and indexes.
Start from the top system object and walk the arrays typev and idxv. For each type and logical index couple in the arrays, look under the previously found object to find the index-th object of the given type. Indexes are specified within the parent, not withing the entire system.
For instance, if nr is 3, typev contains NODE, PACKAGE and CORE, and idxv contains 0, 1 and 2, return the third core object below the second package below the first NUMA node.
@@ -234,8 +234,8 @@| static hwloc_obj_t hwloc_get_obj_below_by_type | +hwloc_obj_t hwloc_get_obj_below_by_type | ( | hwloc_topology_t | topology, | @@ -281,7 +281,7 @@
| static hwloc_obj_t hwloc_get_pu_obj_by_os_index | +hwloc_obj_t hwloc_get_pu_obj_by_os_index | ( | hwloc_topology_t | topology, | @@ -387,7 +387,7 @@
Functions | |
| static int | hwloc_distrib (hwloc_topology_t topology, hwloc_obj_t *roots, unsigned n_roots, hwloc_cpuset_t *set, unsigned n, int until, unsigned long flags) |
| int | hwloc_distrib (hwloc_topology_t topology, hwloc_obj_t *roots, unsigned n_roots, hwloc_cpuset_t *set, unsigned n, int until, unsigned long flags) |
Flags to be given to hwloc_distrib().
+Flags to be given to hwloc_distrib().
| Enumerator | ||||
|---|---|---|---|---|
| HWLOC_DISTRIB_FLAG_REVERSE | Distrib in reverse order, starting from the last objects. |
|
-inlinestatic | +inline|
Functions | |
| static int | hwloc_cpuset_to_nodeset (hwloc_topology_t topology, hwloc_const_cpuset_t _cpuset, hwloc_nodeset_t nodeset) |
| static int | hwloc_cpuset_from_nodeset (hwloc_topology_t topology, hwloc_cpuset_t _cpuset, hwloc_const_nodeset_t nodeset) |
| int | hwloc_cpuset_to_nodeset (hwloc_topology_t topology, hwloc_const_cpuset_t _cpuset, hwloc_nodeset_t nodeset) |
| int | hwloc_cpuset_from_nodeset (hwloc_topology_t topology, hwloc_cpuset_t _cpuset, hwloc_const_nodeset_t nodeset) |
| static int hwloc_cpuset_from_nodeset | +int hwloc_cpuset_from_nodeset | ( | hwloc_topology_t | topology, | @@ -74,7 +74,7 @@
| static int hwloc_cpuset_to_nodeset | +int hwloc_cpuset_to_nodeset | ( | hwloc_topology_t | topology, | @@ -124,7 +124,7 @@
| static int hwloc_bridge_covers_pcibus | +int hwloc_bridge_covers_pcibus | ( | hwloc_obj_t | bridge, | @@ -84,15 +84,15 @@
| static hwloc_obj_t hwloc_get_next_bridge | +hwloc_obj_t hwloc_get_next_bridge | ( | hwloc_topology_t | topology, | @@ -120,7 +120,7 @@
| static hwloc_obj_t hwloc_get_next_osdev | +hwloc_obj_t hwloc_get_next_osdev | ( | hwloc_topology_t | topology, | @@ -163,7 +163,7 @@
| static hwloc_obj_t hwloc_get_next_pcidev | +hwloc_obj_t hwloc_get_next_pcidev | ( | hwloc_topology_t | topology, | @@ -206,7 +206,7 @@
| static hwloc_obj_t hwloc_get_non_io_ancestor_obj | +hwloc_obj_t hwloc_get_non_io_ancestor_obj | ( | hwloc_topology_t | topology, | @@ -249,7 +249,7 @@
| static hwloc_obj_t hwloc_get_pcidev_by_busid | +hwloc_obj_t hwloc_get_pcidev_by_busid | ( | hwloc_topology_t | topology, | @@ -310,7 +310,7 @@
| static hwloc_obj_t hwloc_get_pcidev_by_busidstring | +hwloc_obj_t hwloc_get_pcidev_by_busidstring | ( | hwloc_topology_t | topology, | @@ -349,7 +349,7 @@
Keep a single index among those set in bitmap bitmap.
May be useful before binding so that the process does not have a chance of migrating between multiple processors in the original mask. Instead of running the task on any PU inside the given CPU set, the operating system scheduler will be forced to run it on a single of these PUs. It avoids a migration overhead and cache-line ping-pongs between PUs.
-Values on the diagonal are set to 0.
This transformation only applies to bandwidth matrices.
-Merge switches with multiple ports into a single object. This currently only applies to NVSwitches where GPUs seem connected to different separate switch ports in the NVLinkBandwidth matrix. This transformation will replace all of them with the same port connected to all GPUs. Other ports are removed by applying HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL internally.
+Merge switches with multiple ports into a single object.
+This currently only applies to NVSwitches where GPUs seem connected to different switch ports. Switch ports must be objects with subtype "NVSwitch" as in the NVLinkBandwidth matrix.
+This transformation will replace all ports with only the first one, now connected to all GPUs. Other ports are removed by applying HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL internally.
Apply a transitive closure to the matrix to connect objects across switches. This currently only applies to GPUs and NVSwitches in the NVLinkBandwidth matrix. All pairs of GPUs will be reported as directly connected.
+Apply a transitive closure to the matrix to connect objects across switches.
+All pairs of GPUs will be reported as directly connected instead GPUs being only connected to switches.
+Switch ports must be objects with subtype "NVSwitch" as in the NVLinkBandwidth matrix.
Functions | |
| static int | hwloc_distances_obj_index (struct hwloc_distances_s *distances, hwloc_obj_t obj) |
| 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) |
| int | hwloc_distances_obj_index (struct hwloc_distances_s *distances, hwloc_obj_t obj) |
| 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) |
| static int hwloc_distances_obj_index | +int hwloc_distances_obj_index | ( | struct hwloc_distances_s * | distances, | @@ -68,7 +68,7 @@
| static int hwloc_distances_obj_pair_values | +int hwloc_distances_obj_pair_values | ( | struct hwloc_distances_s * | distances, | @@ -127,7 +127,7 @@
If err is 0 at the end, then addition was successful.
| static int hwloc_distances_remove_by_type | +int hwloc_distances_remove_by_type | ( | hwloc_topology_t | topology, | @@ -159,7 +159,7 @@
Functions | |
| static int | hwloc_cpuset_to_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, unsigned long *mask, unsigned long *maxnode) |
| static int | hwloc_nodeset_to_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, unsigned long *mask, unsigned long *maxnode) |
| static int | hwloc_cpuset_from_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_cpuset_t cpuset, const unsigned long *mask, unsigned long maxnode) |
| static int | hwloc_nodeset_from_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_nodeset_t nodeset, const unsigned long *mask, unsigned long maxnode) |
| int | hwloc_cpuset_to_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, unsigned long *mask, unsigned long *maxnode) |
| int | hwloc_nodeset_to_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, unsigned long *mask, unsigned long *maxnode) |
| int | hwloc_cpuset_from_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_cpuset_t cpuset, const unsigned long *mask, unsigned long maxnode) |
| int | hwloc_nodeset_from_linux_libnuma_ulongs (hwloc_topology_t topology, hwloc_nodeset_t nodeset, const unsigned long *mask, unsigned long maxnode) |
This interface helps converting between Linux libnuma unsigned long masks and hwloc cpusets and nodesets.
@@ -47,8 +47,8 @@| static int hwloc_cpuset_from_linux_libnuma_ulongs | +int hwloc_cpuset_from_linux_libnuma_ulongs | ( | hwloc_topology_t | topology, | @@ -88,7 +88,7 @@
| static int hwloc_cpuset_to_linux_libnuma_ulongs | +int hwloc_cpuset_to_linux_libnuma_ulongs | ( | hwloc_topology_t | topology, | @@ -143,7 +143,7 @@
| static int hwloc_nodeset_from_linux_libnuma_ulongs | +int hwloc_nodeset_from_linux_libnuma_ulongs | ( | hwloc_topology_t | topology, | @@ -196,7 +196,7 @@
| static int hwloc_nodeset_to_linux_libnuma_ulongs | +int hwloc_nodeset_to_linux_libnuma_ulongs | ( | hwloc_topology_t | topology, | @@ -251,7 +251,7 @@
This interface helps converting between Linux libnuma bitmasks and hwloc cpusets and nodesets.
@@ -47,8 +47,8 @@| static int hwloc_cpuset_from_linux_libnuma_bitmask | +int hwloc_cpuset_from_linux_libnuma_bitmask | ( | hwloc_topology_t | topology, | @@ -82,7 +82,7 @@
| static struct bitmask * hwloc_cpuset_to_linux_libnuma_bitmask | +struct bitmask * hwloc_cpuset_to_linux_libnuma_bitmask | ( | hwloc_topology_t | topology, | @@ -124,7 +124,7 @@
| static int hwloc_nodeset_from_linux_libnuma_bitmask | +int hwloc_nodeset_from_linux_libnuma_bitmask | ( | hwloc_topology_t | topology, | @@ -171,7 +171,7 @@
| static struct bitmask * hwloc_nodeset_to_linux_libnuma_bitmask | +struct bitmask * hwloc_nodeset_to_linux_libnuma_bitmask | ( | hwloc_topology_t | topology, | @@ -213,7 +213,7 @@
Functions | |
| static int | hwloc_cpuset_to_glibc_sched_affinity (hwloc_topology_t topology, hwloc_const_cpuset_t hwlocset, cpu_set_t *schedset, size_t schedsetsize) |
| static int | hwloc_cpuset_from_glibc_sched_affinity (hwloc_topology_t topology, hwloc_cpuset_t hwlocset, const cpu_set_t *schedset, size_t schedsetsize) |
| int | hwloc_cpuset_to_glibc_sched_affinity (hwloc_topology_t topology, hwloc_const_cpuset_t hwlocset, cpu_set_t *schedset, size_t schedsetsize) |
| int | hwloc_cpuset_from_glibc_sched_affinity (hwloc_topology_t topology, hwloc_cpuset_t hwlocset, const cpu_set_t *schedset, size_t schedsetsize) |
This interface offers ways to convert between hwloc cpusets and glibc cpusets such as those manipulated by sched_getaffinity() or pthread_attr_setaffinity_np().
topology must match the current machine. | static int hwloc_cpuset_from_glibc_sched_affinity | +int hwloc_cpuset_from_glibc_sched_affinity | ( | hwloc_topology_t | topology, | @@ -82,7 +82,7 @@
| static int hwloc_cpuset_to_glibc_sched_affinity | +int hwloc_cpuset_to_glibc_sched_affinity | ( | hwloc_topology_t | topology, | @@ -137,7 +137,7 @@
Functions | |
| static int | hwloc_opencl_get_device_pci_busid (cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func) |
| static int | hwloc_opencl_get_device_cpuset (hwloc_topology_t topology, cl_device_id device, hwloc_cpuset_t set) |
| static hwloc_obj_t | hwloc_opencl_get_device_osdev_by_index (hwloc_topology_t topology, unsigned platform_index, unsigned device_index) |
| static hwloc_obj_t | hwloc_opencl_get_device_osdev (hwloc_topology_t topology, cl_device_id device) |
| int | hwloc_opencl_get_device_pci_busid (cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func) |
| int | hwloc_opencl_get_device_cpuset (hwloc_topology_t topology, cl_device_id device, hwloc_cpuset_t set) |
| hwloc_obj_t | hwloc_opencl_get_device_osdev_by_index (hwloc_topology_t topology, unsigned platform_index, unsigned device_index) |
| hwloc_obj_t | hwloc_opencl_get_device_osdev (hwloc_topology_t topology, cl_device_id device) |
This interface offers ways to retrieve topology information about OpenCL devices.
Only AMD and NVIDIA OpenCL implementations currently offer useful locality information about their devices.
| static int hwloc_opencl_get_device_cpuset | +int hwloc_opencl_get_device_cpuset | ( | hwloc_topology_t | topology, | @@ -80,7 +80,7 @@
Get the CPU set of processors that are physically close to OpenCL device device.
Store in set the CPU-set describing the locality of the OpenCL device device.
Topology topology and device device must match the local machine. I/O devices detection and the OpenCL component are not needed in the topology.
The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_opencl_get_device_osdev() and hwloc_opencl_get_device_osdev_by_index().
+The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_opencl_get_device_osdev() and hwloc_opencl_get_device_osdev_by_index().
This function is currently only implemented in a meaningful way for Linux with the AMD or NVIDIA OpenCL implementation; other systems will simply get a full cpuset.
| static hwloc_obj_t hwloc_opencl_get_device_osdev | +hwloc_obj_t hwloc_opencl_get_device_osdev | ( | hwloc_topology_t | topology, | @@ -125,7 +125,7 @@
device. NULL if none could be found, for instance if required OpenCL attributes are not available.This function currently only works on AMD and NVIDIA OpenCL devices that support relevant OpenCL extensions. hwloc_opencl_get_device_osdev_by_index() should be preferred whenever possible, i.e. when platform and device index are known.
-Topology topology and device device must match the local machine. I/O devices detection and the OpenCL component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_opencl_get_device_cpuset().
This function currently only works on AMD and NVIDIA OpenCL devices that support relevant OpenCL extensions. hwloc_opencl_get_device_osdev_by_index() should be preferred whenever possible, i.e. when platform and device index are known.
+Topology topology and device device must match the local machine. I/O devices detection and the OpenCL component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_opencl_get_device_cpuset().
| static hwloc_obj_t hwloc_opencl_get_device_osdev_by_index | +hwloc_obj_t hwloc_opencl_get_device_osdev_by_index | ( | hwloc_topology_t | topology, | @@ -177,7 +177,7 @@
| static int hwloc_opencl_get_device_pci_busid | +int hwloc_opencl_get_device_pci_busid | ( | cl_device_id | device, | @@ -238,7 +238,7 @@
This interface offers ways to retrieve topology information about CUDA devices when using the CUDA Driver API.
| static int hwloc_cuda_get_device_cpuset | +int hwloc_cuda_get_device_cpuset | ( | hwloc_topology_t | topology, | @@ -81,7 +81,7 @@
Get the CPU set of processors that are physically close to device cudevice.
Store in set the CPU-set describing the locality of the CUDA device cudevice.
Topology topology and device cudevice must match the local machine. I/O devices detection and the CUDA component are not needed in the topology.
The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_cuda_get_device_osdev() and hwloc_cuda_get_device_osdev_by_index().
+The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_cuda_get_device_osdev() and hwloc_cuda_get_device_osdev_by_index().
This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset.
| static hwloc_obj_t hwloc_cuda_get_device_osdev | +hwloc_obj_t hwloc_cuda_get_device_osdev | ( | hwloc_topology_t | topology, | @@ -126,7 +126,7 @@
cudevice. NULL if none could be found.Topology topology and device cudevice must match the local machine. I/O devices detection and the CUDA component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_cuda_get_device_cpuset().
Topology topology and device cudevice must match the local machine. I/O devices detection and the CUDA component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_cuda_get_device_cpuset().
| static hwloc_obj_t hwloc_cuda_get_device_osdev_by_index | +hwloc_obj_t hwloc_cuda_get_device_osdev_by_index | ( | hwloc_topology_t | topology, | @@ -171,7 +171,7 @@
The topology topology does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection and the CUDA component must be enabled in the topology.
| static int hwloc_cuda_get_device_pci_ids | +int hwloc_cuda_get_device_pci_ids | ( | hwloc_topology_t | topology, | @@ -234,7 +234,7 @@
| static hwloc_obj_t hwloc_cuda_get_device_pcidev | +hwloc_obj_t hwloc_cuda_get_device_pcidev | ( | hwloc_topology_t | topology, | @@ -276,7 +276,7 @@
Functions | |
| static int | hwloc_cudart_get_device_pci_ids (hwloc_topology_t topology, int idx, int *domain, int *bus, int *dev) |
| static int | hwloc_cudart_get_device_cpuset (hwloc_topology_t topology, int idx, hwloc_cpuset_t set) |
| static hwloc_obj_t | hwloc_cudart_get_device_pcidev (hwloc_topology_t topology, int idx) |
| static hwloc_obj_t | hwloc_cudart_get_device_osdev_by_index (hwloc_topology_t topology, unsigned idx) |
| int | hwloc_cudart_get_device_pci_ids (hwloc_topology_t topology, int idx, int *domain, int *bus, int *dev) |
| int | hwloc_cudart_get_device_cpuset (hwloc_topology_t topology, int idx, hwloc_cpuset_t set) |
| hwloc_obj_t | hwloc_cudart_get_device_pcidev (hwloc_topology_t topology, int idx) |
| hwloc_obj_t | hwloc_cudart_get_device_osdev_by_index (hwloc_topology_t topology, unsigned idx) |
This interface offers ways to retrieve topology information about CUDA devices when using the CUDA Runtime API.
| static int hwloc_cudart_get_device_cpuset | +int hwloc_cudart_get_device_cpuset | ( | hwloc_topology_t | topology, | @@ -79,7 +79,7 @@
Get the CPU set of processors that are physically close to device idx.
Store in set the CPU-set describing the locality of the CUDA device whose index is idx.
Topology topology and device idx must match the local machine. I/O devices detection and the CUDA component are not needed in the topology.
The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_cudart_get_device_osdev_by_index().
+The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_cudart_get_device_osdev_by_index().
This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset.
| static hwloc_obj_t hwloc_cudart_get_device_osdev_by_index | +hwloc_obj_t hwloc_cudart_get_device_osdev_by_index | ( | hwloc_topology_t | topology, | @@ -124,7 +124,7 @@
idx. NULL if none could be found.The topology topology does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection and the CUDA component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_cudart_get_device_cpuset().
The topology topology does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection and the CUDA component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_cudart_get_device_cpuset().
| static int hwloc_cudart_get_device_pci_ids | +int hwloc_cudart_get_device_pci_ids | ( | hwloc_topology_t | topology, | @@ -187,7 +187,7 @@
| static hwloc_obj_t hwloc_cudart_get_device_pcidev | +hwloc_obj_t hwloc_cudart_get_device_pcidev | ( | hwloc_topology_t | topology, | @@ -229,7 +229,7 @@
Functions | |
| static int | hwloc_nvml_get_device_cpuset (hwloc_topology_t topology, nvmlDevice_t device, hwloc_cpuset_t set) |
| static hwloc_obj_t | hwloc_nvml_get_device_osdev_by_index (hwloc_topology_t topology, unsigned idx) |
| static hwloc_obj_t | hwloc_nvml_get_device_osdev (hwloc_topology_t topology, nvmlDevice_t device) |
| int | hwloc_nvml_get_device_cpuset (hwloc_topology_t topology, nvmlDevice_t device, hwloc_cpuset_t set) |
| hwloc_obj_t | hwloc_nvml_get_device_osdev_by_index (hwloc_topology_t topology, unsigned idx) |
| hwloc_obj_t | hwloc_nvml_get_device_osdev (hwloc_topology_t topology, nvmlDevice_t device) |
This interface offers ways to retrieve topology information about devices managed by the NVIDIA Management Library (NVML).
| static int hwloc_nvml_get_device_cpuset | +int hwloc_nvml_get_device_cpuset | ( | hwloc_topology_t | topology, | @@ -77,7 +77,7 @@
Get the CPU set of processors that are physically close to NVML device device.
Store in set the CPU-set describing the locality of the NVML device device.
Topology topology and device device must match the local machine. I/O devices detection and the NVML component are not needed in the topology.
The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_nvml_get_device_osdev() and hwloc_nvml_get_device_osdev_by_index().
+The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_nvml_get_device_osdev() and hwloc_nvml_get_device_osdev_by_index().
This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset.
| static hwloc_obj_t hwloc_nvml_get_device_osdev | +hwloc_obj_t hwloc_nvml_get_device_osdev | ( | hwloc_topology_t | topology, | @@ -122,7 +122,7 @@
device. NULL if none could be found.Topology topology and device device must match the local machine. I/O devices detection and the NVML component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_nvml_get_device_cpuset().
Topology topology and device device must match the local machine. I/O devices detection and the NVML component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_nvml_get_device_cpuset().
| static hwloc_obj_t hwloc_nvml_get_device_osdev_by_index | +hwloc_obj_t hwloc_nvml_get_device_osdev_by_index | ( | hwloc_topology_t | topology, | @@ -165,7 +165,7 @@
Functions | |
| static int | hwloc_rsmi_get_device_cpuset (hwloc_topology_t topology, uint32_t dv_ind, hwloc_cpuset_t set) |
| static hwloc_obj_t | hwloc_rsmi_get_device_osdev_by_index (hwloc_topology_t topology, uint32_t dv_ind) |
| static hwloc_obj_t | hwloc_rsmi_get_device_osdev (hwloc_topology_t topology, uint32_t dv_ind) |
| int | hwloc_rsmi_get_device_cpuset (hwloc_topology_t topology, uint32_t dv_ind, hwloc_cpuset_t set) |
| hwloc_obj_t | hwloc_rsmi_get_device_osdev_by_index (hwloc_topology_t topology, uint32_t dv_ind) |
| hwloc_obj_t | hwloc_rsmi_get_device_osdev (hwloc_topology_t topology, uint32_t dv_ind) |
This interface offers ways to retrieve topology information about devices managed by the ROCm SMI Management Library.
| static int hwloc_rsmi_get_device_cpuset | +int hwloc_rsmi_get_device_cpuset | ( | hwloc_topology_t | topology, | @@ -77,7 +77,7 @@
Get the CPU set of logical processors that are physically close to AMD GPU device whose index is dv_ind.
Store in set the CPU-set describing the locality of the AMD GPU device whose index is dv_ind.
Topology topology and device dv_ind must match the local machine. I/O devices detection and the ROCm SMI component are not needed in the topology.
The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_rsmi_get_device_osdev() and hwloc_rsmi_get_device_osdev_by_index().
+The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_rsmi_get_device_osdev() and hwloc_rsmi_get_device_osdev_by_index().
This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset.
| static hwloc_obj_t hwloc_rsmi_get_device_osdev | +hwloc_obj_t hwloc_rsmi_get_device_osdev | ( | hwloc_topology_t | topology, | @@ -122,7 +122,7 @@
dv_ind. NULL if none could be found.Topology topology and device dv_ind must match the local machine. I/O devices detection and the ROCm SMI component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_rsmi_get_device_cpuset().
Topology topology and device dv_ind must match the local machine. I/O devices detection and the ROCm SMI component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_rsmi_get_device_cpuset().
| static hwloc_obj_t hwloc_rsmi_get_device_osdev_by_index | +hwloc_obj_t hwloc_rsmi_get_device_osdev_by_index | ( | hwloc_topology_t | topology, | @@ -165,7 +165,7 @@
Functions | |
| static int | hwloc_levelzero_get_device_cpuset (hwloc_topology_t topology, ze_device_handle_t device, hwloc_cpuset_t set) |
| static int | hwloc_levelzero_get_sysman_device_cpuset (hwloc_topology_t topology, zes_device_handle_t device, hwloc_cpuset_t set) |
| static hwloc_obj_t | hwloc_levelzero_get_device_osdev (hwloc_topology_t topology, ze_device_handle_t device) |
| static hwloc_obj_t | hwloc_levelzero_get_sysman_device_osdev (hwloc_topology_t topology, zes_device_handle_t device) |
| int | hwloc_levelzero_get_device_cpuset (hwloc_topology_t topology, ze_device_handle_t device, hwloc_cpuset_t set) |
| int | hwloc_levelzero_get_sysman_device_cpuset (hwloc_topology_t topology, zes_device_handle_t device, hwloc_cpuset_t set) |
| hwloc_obj_t | hwloc_levelzero_get_device_osdev (hwloc_topology_t topology, ze_device_handle_t device) |
| hwloc_obj_t | hwloc_levelzero_get_sysman_device_osdev (hwloc_topology_t topology, zes_device_handle_t device) |
This interface offers ways to retrieve topology information about devices managed by the Level Zero API, both for main Core devices (ZE API) and the Sysman devices (ZES API).
| static int hwloc_levelzero_get_device_cpuset | +int hwloc_levelzero_get_device_cpuset | ( | hwloc_topology_t | topology, | @@ -79,7 +79,7 @@
Get the CPU set of logical processors that are physically close to the Level Zero device device.
Store in set the CPU-set describing the locality of the Level Zero device device.
Topology topology and device device must match the local machine. The Level Zero library must have been initialized with zeInit(). I/O devices detection and the Level Zero component are not needed in the topology.
The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_levelzero_get_device_osdev().
+The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_levelzero_get_device_osdev().
This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset.
| static hwloc_obj_t hwloc_levelzero_get_device_osdev | +hwloc_obj_t hwloc_levelzero_get_device_osdev | ( | hwloc_topology_t | topology, | @@ -125,7 +125,7 @@
device. NULL if none could be found.Topology topology and device dv_ind must match the local machine. The Level Zero library must have been initialized with zeInit(). I/O devices detection and the Level Zero component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_levelzero_get_device_cpuset().
Topology topology and device dv_ind must match the local machine. The Level Zero library must have been initialized with zeInit(). I/O devices detection and the Level Zero component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_levelzero_get_device_cpuset().
| static int hwloc_levelzero_get_sysman_device_cpuset | +int hwloc_levelzero_get_sysman_device_cpuset | ( | hwloc_topology_t | topology, | @@ -178,7 +178,7 @@
Get the CPU set of logical processors that are physically close to the Level Zero Sysman device device.
Store in set the CPU-set describing the locality of the Level Zero device device.
Topology topology and device device must match the local machine. The Level Zero library must have been initialized with Sysman enabled with zesInit(). I/O devices detection and the Level Zero component are not needed in the topology.
The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_levelzero_get_device_osdev().
+The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_levelzero_get_device_osdev().
This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset.
| static hwloc_obj_t hwloc_levelzero_get_sysman_device_osdev | +hwloc_obj_t hwloc_levelzero_get_sysman_device_osdev | ( | hwloc_topology_t | topology, | @@ -223,7 +223,7 @@
device. NULL if none could be found.Topology topology and device dv_ind must match the local machine. The Level Zero library must have been initialized with Sysman enabled with zesInit(). I/O devices detection and the Level Zero component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_levelzero_get_device_cpuset().
Topology topology and device dv_ind must match the local machine. The Level Zero library must have been initialized with Sysman enabled with zesInit(). I/O devices detection and the Level Zero component must be enabled in the topology. If not, the locality of the object may still be found using hwloc_levelzero_get_device_cpuset().
Functions | |
| static hwloc_obj_t | hwloc_gl_get_display_osdev_by_port_device (hwloc_topology_t topology, unsigned port, unsigned device) |
| static hwloc_obj_t | hwloc_gl_get_display_osdev_by_name (hwloc_topology_t topology, const char *name) |
| static int | hwloc_gl_get_display_by_osdev (hwloc_topology_t topology, hwloc_obj_t osdev, unsigned *port, unsigned *device) |
| hwloc_obj_t | hwloc_gl_get_display_osdev_by_port_device (hwloc_topology_t topology, unsigned port, unsigned device) |
| hwloc_obj_t | hwloc_gl_get_display_osdev_by_name (hwloc_topology_t topology, const char *name) |
| int | hwloc_gl_get_display_by_osdev (hwloc_topology_t topology, hwloc_obj_t osdev, unsigned *port, unsigned *device) |
This interface offers ways to retrieve topology information about OpenGL displays.
Only the NVIDIA display locality information is currently available, using the NV-CONTROL X11 extension and the NVCtrl library.
| static int hwloc_gl_get_display_by_osdev | +int hwloc_gl_get_display_by_osdev | ( | hwloc_topology_t | topology, | @@ -84,7 +84,7 @@
| static hwloc_obj_t hwloc_gl_get_display_osdev_by_name | +hwloc_obj_t hwloc_gl_get_display_osdev_by_name | ( | hwloc_topology_t | topology, | @@ -127,7 +127,7 @@
| static hwloc_obj_t hwloc_gl_get_display_osdev_by_port_device | +hwloc_obj_t hwloc_gl_get_display_osdev_by_port_device | ( | hwloc_topology_t | topology, | @@ -176,7 +176,7 @@
Functions | |
| static int | hwloc_ibv_get_device_cpuset (hwloc_topology_t topology, struct ibv_device *ibdev, hwloc_cpuset_t set) |
| static hwloc_obj_t | hwloc_ibv_get_device_osdev_by_name (hwloc_topology_t topology, const char *ibname) |
| static hwloc_obj_t | hwloc_ibv_get_device_osdev (hwloc_topology_t topology, struct ibv_device *ibdev) |
| int | hwloc_ibv_get_device_cpuset (hwloc_topology_t topology, struct ibv_device *ibdev, hwloc_cpuset_t set) |
| hwloc_obj_t | hwloc_ibv_get_device_osdev_by_name (hwloc_topology_t topology, const char *ibname) |
| hwloc_obj_t | hwloc_ibv_get_device_osdev (hwloc_topology_t topology, struct ibv_device *ibdev) |
This interface offers ways to retrieve topology information about OpenFabrics devices (InfiniBand, Omni-Path, usNIC, etc).
| static int hwloc_ibv_get_device_cpuset | +int hwloc_ibv_get_device_cpuset | ( | hwloc_topology_t | topology, | @@ -77,7 +77,7 @@
Get the CPU set of processors that are physically close to device ibdev.
Store in set the CPU-set describing the locality of the OpenFabrics device ibdev (InfiniBand, etc).
Topology topology and device ibdev must match the local machine. I/O devices detection is not needed in the topology.
The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_ibv_get_device_osdev() and hwloc_ibv_get_device_osdev_by_name().
+The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see hwloc_ibv_get_device_osdev() and hwloc_ibv_get_device_osdev_by_name().
This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset.
| static hwloc_obj_t hwloc_ibv_get_device_osdev | +hwloc_obj_t hwloc_ibv_get_device_osdev | ( | hwloc_topology_t | topology, | @@ -122,7 +122,7 @@
ibdev (InfiniBand, etc). NULL if none could be found.Topology topology and device ibdev must match the local machine. I/O devices detection must be enabled in the topology. If not, the locality of the object may still be found using hwloc_ibv_get_device_cpuset().
Topology topology and device ibdev must match the local machine. I/O devices detection must be enabled in the topology. If not, the locality of the object may still be found using hwloc_ibv_get_device_cpuset().
| static hwloc_obj_t hwloc_ibv_get_device_osdev_by_name | +hwloc_obj_t hwloc_ibv_get_device_osdev_by_name | ( | hwloc_topology_t | topology, | @@ -165,7 +165,7 @@
Functions | |
| static int | hwloc_plugin_check_namespace (const char *pluginname, const char *symbol) |
| int | hwloc_plugin_check_namespace (const char *pluginname, const char *symbol) |
| static int hwloc_plugin_check_namespace | +int hwloc_plugin_check_namespace | ( | const char * | pluginname, | @@ -127,7 +127,7 @@
Functions | |
| static int | hwloc_filter_check_pcidev_subtype_important (unsigned classid) |
| static int | hwloc_filter_check_osdev_subtype_important (hwloc_obj_osdev_type_t subtype) |
| static int | hwloc_filter_check_keep_object_type (hwloc_topology_t topology, hwloc_obj_type_t type) |
| static int | hwloc_filter_check_keep_object (hwloc_topology_t topology, hwloc_obj_t obj) |
| int | hwloc_filter_check_pcidev_subtype_important (unsigned classid) |
| int | hwloc_filter_check_osdev_subtype_important (hwloc_obj_osdev_type_t subtype) |
| int | hwloc_filter_check_keep_object_type (hwloc_topology_t topology, hwloc_obj_type_t type) |
| int | hwloc_filter_check_keep_object (hwloc_topology_t topology, hwloc_obj_t obj) |
| static int hwloc_filter_check_keep_object | +int hwloc_filter_check_keep_object | ( | hwloc_topology_t | topology, | @@ -73,7 +73,7 @@
| static int hwloc_filter_check_keep_object_type | +int hwloc_filter_check_keep_object_type | ( | hwloc_topology_t | topology, | @@ -112,7 +112,7 @@
| static int hwloc_filter_check_osdev_subtype_important | +int hwloc_filter_check_osdev_subtype_important | ( | hwloc_obj_osdev_type_t | subtype | ) | @@ -142,7 +142,7 @@
| static int hwloc_filter_check_pcidev_subtype_important | +int hwloc_filter_check_pcidev_subtype_important | ( | unsigned | classid | ) | @@ -171,7 +171,7 @@
Array of objects described by the distance matrix. These objects are not in any particular order, see hwloc_distances_obj_index() and hwloc_distances_obj_pair_values() for easy ways to find objects in this array and their corresponding values.
+Array of objects described by the distance matrix. These objects are not in any particular order, see hwloc_distances_obj_index() and hwloc_distances_obj_pair_values() for easy ways to find objects in this array and their corresponding values.
An application can thus use the two first sets of functions if it wants to manage separately the global process binding policy and directed allocation, or use the third set of functions if it does not care about the process memory binding policy. Again, reading Memory binding is strongly recommended.
Any of these types may be filtered individually with hwloc_topology_set_type_filter().
hwloc tries to attach these new objects to normal objects (usually NUMA nodes) to match their actual physical location. For instance, if a I/O hub (or root complex) is physically connected to a package, the corresponding hwloc bridge object (and its PCI bridges and devices children) is inserted as a child of the corresponding hwloc Package object. These children are not in the normal children list but rather in the I/O-specific children list.
-I/O objects also have neither CPU sets nor node sets (NULL pointers) because they are not directly usable by the user applications for binding. Moreover I/O hierarchies may be highly complex (asymmetric trees of bridges). So I/O objects are placed in specific levels with custom depths. Their lists may still be traversed with regular helpers such as hwloc_get_next_obj_by_type(). However, hwloc offers some dedicated helpers such as hwloc_get_next_pcidev() and hwloc_get_next_osdev() for convenience (see Finding I/O objects).
+I/O objects also have neither CPU sets nor node sets (NULL pointers) because they are not directly usable by the user applications for binding. Moreover I/O hierarchies may be highly complex (asymmetric trees of bridges). So I/O objects are placed in specific levels with custom depths. Their lists may still be traversed with regular helpers such as hwloc_get_next_obj_by_type(). However, hwloc offers some dedicated helpers such as hwloc_get_next_pcidev() and hwloc_get_next_osdev() for convenience (see Finding I/O objects).
Although each PCI device is uniquely identified by its bus ID (e.g. 0000:01:02.3), a user-space application can hardly find out which PCI device it is actually using. Applications rather use software handles (such as the eth0 network interface, the sda hard drive, or the mlx4_0 OpenFabrics HCA). Therefore hwloc tries to add software devices (HWLOC_OBJ_OS_DEVICE, also known as OS devices).
Each hostbridge contains one or several children, either other bridges (usually PCI to PCI switches) or PCI devices (HWLOC_OBJ_PCI_DEVICE). The number of bridges between the hostbridge and a PCI device depends on the machine.
I/O devices may be consulted by traversing the topology manually (with usual routines such as hwloc_get_obj_by_type()) or by using dedicated helpers (such as hwloc_get_pcidev_by_busid(), see Finding I/O objects).
-I/O objects do not actually contain any locality information because their CPU sets and node sets are NULL. Their locality must be retrieved by walking up the object tree (through the parent link) until a non-I/O object is found (see hwloc_get_non_io_ancestor_obj()). This normal object should have non-NULL CPU sets and node sets which describe the processing units and memory that are immediately close to the I/O device. For instance the path from a OS device to its locality may go across a PCI device parent, one or several bridges, up to a Package node with the same locality.
I/O devices may be consulted by traversing the topology manually (with usual routines such as hwloc_get_obj_by_type()) or by using dedicated helpers (such as hwloc_get_pcidev_by_busid(), see Finding I/O objects).
+I/O objects do not actually contain any locality information because their CPU sets and node sets are NULL. Their locality must be retrieved by walking up the object tree (through the parent link) until a non-I/O object is found (see hwloc_get_non_io_ancestor_obj()). This normal object should have non-NULL CPU sets and node sets which describe the processing units and memory that are immediately close to the I/O device. For instance the path from a OS device to its locality may go across a PCI device parent, one or several bridges, up to a Package node with the same locality.
Command-line tools are also aware of I/O devices. lstopo displays the interesting ones by default (passing --no-io disables it).
hwloc-calc and hwloc-bind may manipulate I/O devices specified by PCI bus ID or by OS device name.
Each object also contains an attr field that, if non NULL, points to a union hwloc_obj_attr_u of type-specific attribute structures. For instance, a L2Cache object obj contains cache-specific information in obj->attr->cache, such as its size and associativity, cache type. See hwloc_obj_attr_u for details.
Aside of these generic attribute fields, hwloc annotates many objects with info attributes made of name and value strings. Each object contains a list of such pairs that may be consulted manually (looking at the object infos array field) or using the hwloc_obj_get_info_by_name(). The user may additionally add new name-value pairs to any object using hwloc_obj_add_info() or the hwloc-annotate program.
Aside of these generic attribute fields, hwloc annotates many objects with info attributes made of name and value strings. Each object contains a list of such pairs that may be consulted manually (looking at the object infos array field) or using the hwloc_obj_get_info_by_name(). The user may additionally add new name-value pairs to any object using hwloc_obj_add_info() or the hwloc-annotate program.
Here is a non-exhaustive list of attributes that may be automatically added by hwloc. Note that these attributes heavily depend on the ability of the operating system to report them. Many of them will therefore be missing on some OS.
Hence, one may have to rethink the way it selects NUMA nodes.
A common need consists in iterating over the list of NUMA nodes (e.g. using hwloc_get_next_obj_by_type()). This is useful for counting some domains before partitioning a job, or for finding a node that is local to some objects. With heterogeneous memory, one should remember that multiple nodes may now have the same locality (HBM and DRAM above) or overlapping localities (e.g. DRAM and CXL above).
A common need consists in iterating over the list of NUMA nodes (e.g. using hwloc_get_next_obj_by_type()). This is useful for counting some domains before partitioning a job, or for finding a node that is local to some objects. With heterogeneous memory, one should remember that multiple nodes may now have the same locality (HBM and DRAM above) or overlapping localities (e.g. DRAM and CXL above).
In hwloc v1.x, NUMA nodes were inside the tree, for instance Packages contained 2 NUMA nodes which contained a L3 and several cache.
Starting with hwloc v2.0, NUMA nodes are not in the main tree anymore. They are attached under objects as Memory Children on the side of normal children. This memory children list starts at obj->memory_first_child and its size is obj->memory_arity. Hence there can now exist two local NUMA nodes, for instance on Intel Xeon Phi processors.
The normal list of children (starting at obj->first_child, ending at obj->last_child, of size obj->arity, and available as the array obj->children) now only contains CPU-side objects: PUs, Cores, Packages, Caches, Groups, Machine and System. hwloc_get_next_child() may still be used to iterate over all children of all lists.
The normal list of children (starting at obj->first_child, ending at obj->last_child, of size obj->arity, and available as the array obj->children) now only contains CPU-side objects: PUs, Cores, Packages, Caches, Groups, Machine and System. hwloc_get_next_child() may still be used to iterate over all children of all lists.
Hence the CPU-side hierarchy is built using normal children, while memory is attached to that hierarchy depending on its affinity.
I/O children are not in the main object children list anymore either. They are in the list starting at obj->io_first_child and its size is obj->io_arity.
Misc children are not in the main object children list anymore. They are in the list starting at obj->misc_first_child and its size is obj->misc_arity.
See hwloc_obj for details about children lists.
-hwloc_get_next_child() may still be used to iterate over all children of all lists.
+hwloc_get_next_child() may still be used to iterate over all children of all lists.
Given the above, objects may now be of 4 kinds:
Instead of a single HWLOC_OBJ_CACHE, there are now 8 types HWLOC_OBJ_L1CACHE, ..., HWLOC_OBJ_L5CACHE, HWLOC_OBJ_L1ICACHE, ..., HWLOC_OBJ_L3ICACHE.
Cache object attributes are unchanged.
-hwloc_get_cache_type_depth() is not needed to disambiguate cache types anymore since new types can be passed to hwloc_get_type_depth() without ever getting HWLOC_TYPE_DEPTH_MULTIPLE anymore.
+hwloc_get_cache_type_depth() is not needed to disambiguate cache types anymore since new types can be passed to hwloc_get_type_depth() without ever getting HWLOC_TYPE_DEPTH_MULTIPLE anymore.
hwloc_obj_type_is_cache(), hwloc_obj_type_is_dcache() and hwloc_obj_type_is_icache() may be used to check whether a given type is a cache, data/unified cache or instruction cache.
Bitmap functions (and a couple other functions) can return errors (in theory).
Most bitmap functions may have to reallocate the internal bitmap storage. In v1.x, they would silently crash if realloc failed. In v2.0, they now return an int that can be negative on error. However, the preallocated storage is 512 bits, hence realloc will not even be used unless you run hwloc on machines with larger PU or NUMAnode indexes.
-hwloc_obj_add_info(), hwloc_cpuset_from_nodeset() and hwloc_cpuset_from_nodeset() also return an int, which would be -1 in case of allocation errors.
+hwloc_obj_add_info(), hwloc_cpuset_from_nodeset() and hwloc_cpuset_from_nodeset() also return an int, which would be -1 in case of allocation errors.
hwloc_distribute() and hwloc_distributev() removed, deprecated by hwloc_distrib().
+hwloc_distribute() and hwloc_distributev() removed, deprecated by hwloc_distrib().
Latest snapshot — @@ -17,7 +18,7 @@
Latest snapshot — diff --git a/software/hwloc/v2.12/version.inc b/software/hwloc/v2.12/version.inc index 2d55ff46d5..8306f43916 100644 --- a/software/hwloc/v2.12/version.inc +++ b/software/hwloc/v2.12/version.inc @@ -11,8 +11,8 @@ $download_prefix="https://download.open-mpi.org/release/hwloc/v" . $release_seri $s3_prefix = "release/hwloc/v" . $release_series . "/"; /* releases must be ordered newest to oldest */ -$releases = array(); +$releases = array("2.12.0"); /* prereleases must be ordered newest to oldest. All prereleases will be shown, so make an empty array when the official release is added to releases above */ -$prereleases = array("2.12.0rc1"); +$prereleases = array();